From 2910dd479bdedbc8705ca3a763d4dcece4f16cb3 Mon Sep 17 00:00:00 2001 From: pkdash Date: Fri, 13 Sep 2024 18:19:03 -0400 Subject: [PATCH 01/18] [#71] adding support for CSV Aggregation --- hsclient/__init__.py | 1 + hsclient/hydroshare.py | 66 ++++++++++++++++++++++++++++++++++++++++++ hsclient/utils.py | 7 +++++ 3 files changed, 74 insertions(+) diff --git a/hsclient/__init__.py b/hsclient/__init__.py index 285d4ec..1f186a4 100644 --- a/hsclient/__init__.py +++ b/hsclient/__init__.py @@ -7,5 +7,6 @@ TimeseriesAggregation, GeoRasterAggregation, GeoFeatureAggregation, + CSVAggregation ) from hsclient.oauth2_model import Token diff --git a/hsclient/hydroshare.py b/hsclient/hydroshare.py index 0b1feaa..57fd622 100644 --- a/hsclient/hydroshare.py +++ b/hsclient/hydroshare.py @@ -199,6 +199,7 @@ def populate_metadata(_aggr): AggregationType.TimeSeriesAggregation: TimeseriesAggregation, AggregationType.GeographicRasterAggregation: GeoRasterAggregation, AggregationType.GeographicFeatureAggregation: GeoFeatureAggregation, + AggregationType.CSVFileAggregation: CSVAggregation } for aggr in aggregations_copy: typed_aggr_cls = typed_aggregation_classes.get(aggr.metadata.type, None) @@ -859,6 +860,71 @@ def get_main_file_path(): return aggr +class CSVAggregation(DataObjectSupportingAggregation): + """Represents a CSV Aggregation in HydroShare""" + @classmethod + def create(cls, base_aggr): + return super().create(aggr_cls=cls, base_aggr=base_aggr) + + def as_data_object(self, agg_path: str) -> 'pandas.DataFrame': + """ + Loads the CSV aggregation to a pandas DataFrame object + :param agg_path: the path to the Time Series aggregation + :return: the CSV aggregation as a pandas DataFrame object + """ + if pandas is None: + raise Exception("pandas package not found") + + return self._get_data_object(agg_path=agg_path, func=pandas.read_csv) + + def save_data_object(self, resource: 'Resource', agg_path: str, as_new_aggr: bool = False, + destination_path: str = "") -> 'Aggregation': + + """ + Saves the pandas DataFrame object to the CSV aggregation + :param resource: the resource containing the aggregation + :param agg_path: the path to the CSV aggregation + :param as_new_aggr: Defaults False, set to True to create a new CSV aggregation + :param destination_path: the destination path in Hydroshare to save the new aggregation + :return: the updated or new CSV aggregation + """ + self._validate_aggregation_for_update(resource, AggregationType.CSVFileAggregation) + file_path = self._validate_aggregation_path(agg_path, for_save_data=True) + self._data_object.to_csv(file_path, index=False) + aggr_main_file_path = self.main_file_path + data_object = self._data_object + if not as_new_aggr: + # cache some of the metadata fields of the original aggregation to update the metadata of the + # updated aggregation + keywords = self.metadata.subjects + additional_meta = self.metadata.additional_metadata + title = self.metadata.title + + # upload the updated aggregation files to the temp folder - to create the updated aggregation + self._update_aggregation(resource, file_path) + # retrieve the updated aggregation + aggr = resource.aggregation(file__path=aggr_main_file_path) + + # update metadata + for kw in keywords: + if kw not in aggr.metadata.subjects: + aggr.metadata.subjects.append(kw) + aggr.metadata.additional_metadata = additional_meta + aggr.metadata.title = title + aggr.save() + else: + # creating a new aggregation by uploading the updated data files + resource.file_upload(file_path, destination_path=destination_path) + + # retrieve the new aggregation + agg_path = urljoin(destination_path, os.path.basename(aggr_main_file_path)) + aggr = resource.aggregation(file__path=agg_path) + data_object = None + + aggr._data_object = data_object + return aggr + + class Resource(Aggregation): """Represents a Resource in HydroShare""" diff --git a/hsclient/utils.py b/hsclient/utils.py index c496fa6..a8ef779 100644 --- a/hsclient/utils.py +++ b/hsclient/utils.py @@ -1,8 +1,13 @@ +from collections import namedtuple from os.path import splitext from urllib.request import pathname2url from hsmodels.schemas.enums import AggregationType +CSVColumnDataType = namedtuple('CSVColumnDataType', ['string', 'number', 'datetime', 'boolean'])( + 'string', 'number', 'datetime', 'boolean' +) + def is_aggregation(path): return path.endswith('#aggregation') @@ -19,6 +24,8 @@ def main_file_type(type: AggregationType): return ".refts.json" if type == AggregationType.TimeSeriesAggregation: return ".sqlite" + if type == AggregationType.CSVFileAggregation: + return ".csv" return None From 7cc0205e0b7f34d6d2f706fb2508491de085a2b3 Mon Sep 17 00:00:00 2001 From: pkdash Date: Fri, 13 Sep 2024 18:22:06 -0400 Subject: [PATCH 02/18] [#71] tests for csv aggregation --- tests/conftest.py | 12 + .../ecoregions.csv | 2924 +++++++++++++++++ .../ecoregions_meta.xml | 61 + .../ecoregions_resmap.xml | 53 + tests/test_data_objects.py | 80 +- 5 files changed, 3129 insertions(+), 1 deletion(-) create mode 100644 tests/data/test_resource_metadata_files/ecoregions.csv create mode 100644 tests/data/test_resource_metadata_files/ecoregions_meta.xml create mode 100644 tests/data/test_resource_metadata_files/ecoregions_resmap.xml diff --git a/tests/conftest.py b/tests/conftest.py index af7e462..a9faa84 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -77,6 +77,18 @@ def resource_with_geofeature_aggr(new_resource): return new_resource +@pytest.fixture() +def resource_with_csv_aggr(new_resource): + files = [ + "ecoregions.csv", + "ecoregions_resmap.xml", + "ecoregions_meta.xml", + ] + root_path = "data/test_resource_metadata_files/" + new_resource.file_upload(*[os.path.join(root_path, file) for file in files], refresh=False) + return new_resource + + @pytest.fixture() def resource_with_raster_aggr(resource): return resource diff --git a/tests/data/test_resource_metadata_files/ecoregions.csv b/tests/data/test_resource_metadata_files/ecoregions.csv new file mode 100644 index 0000000..c63b05b --- /dev/null +++ b/tests/data/test_resource_metadata_files/ecoregions.csv @@ -0,0 +1,2924 @@ +id,lat,lon,ecoregion +02469100,32.2376437,-88.0083498,EASTERN TEMPERATE FORESTS +02450250,34.28537757,-87.3989084,EASTERN TEMPERATE FORESTS +02454000,33.76399789,-87.3583383,EASTERN TEMPERATE FORESTS +02453500,33.75760677,-87.1702791,EASTERN TEMPERATE FORESTS +02458502,33.5239948,-86.8911032,EASTERN TEMPERATE FORESTS +02458450,33.5176059,-86.8791584,EASTERN TEMPERATE FORESTS +02457595,33.5970492,-86.8680483,EASTERN TEMPERATE FORESTS +02423496,33.3692767,-86.7841551,EASTERN TEMPERATE FORESTS +02458148,33.5770483,-86.7188778,EASTERN TEMPERATE FORESTS +02423380,33.4817724,-86.7127653,EASTERN TEMPERATE FORESTS +02455980,33.71121273,-86.6961013,EASTERN TEMPERATE FORESTS +02423130,33.62232504,-86.599431,EASTERN TEMPERATE FORESTS +02423398,33.52427129,-86.5755404,EASTERN TEMPERATE FORESTS +02423397,33.53454886,-86.5624847,EASTERN TEMPERATE FORESTS +02423160,33.60371416,-86.5491517,EASTERN TEMPERATE FORESTS +02407514,33.32066689,-86.4952592,EASTERN TEMPERATE FORESTS +02405500,33.44760728,-86.386924,EASTERN TEMPERATE FORESTS +02419890,32.43985898,-86.1955222,EASTERN TEMPERATE FORESTS +02400100,34.06509836,-85.6141287,EASTERN TEMPERATE FORESTS +02412000,33.622885,-85.5132894,EASTERN TEMPERATE FORESTS +02397530,34.20194444,-85.45325,EASTERN TEMPERATE FORESTS +02413300,33.43733498,-85.399118,EASTERN TEMPERATE FORESTS +023432415,31.62219444,-85.0591667,EASTERN TEMPERATE FORESTS +15747000,67.8754405,-163.6773733,NA +15580095,64.8919444,-163.67,NA +15565447,61.9336866,-162.8829356,NA +15297610,55.1769059,-162.6895109,NA +15565400,62.7887211,-160.699352,NA +15565700,63.9342965,-160.3074725,NA +15301500,60.1539944,-158.7366923,NA +15302000,59.93483,-158.1900062,NA +15304010,61.8893006,-158.156842,NA +15302812,59.415,-157.8041667,NA +15803000,70.4953764,-157.395848,NA +15302300,59.8376227,-156.6938693,NA +15302320,59.80901149,-156.6669229,NA +15302250,59.8424682,-155.7185564,NA +15302200,59.7926376,-155.5246895,NA +15300250,59.7859761,-155.2552406,NA +15300100,59.8237617,-154.8844049,NA +15298040,60.2036591,-154.7044349,NA +15300270,59.84155048,-154.3796745,NA +15300300,59.7579499,-153.8468866,NA +15300320,59.70379507,-153.712188,NA +15295700,57.69397807,-153.1639087,NA +15297475,57.81592178,-152.6244165,NA +15241600,60.04841667,-151.6649167,NA +15266300,60.4769289,-151.0816675,NA +15238986,59.76173646,-150.955177,NA +15239070,59.80107399,-150.8849079,NA +15266110,60.466099,-150.60109,NA +15294080,62.1328333,-150.5386667,NA +15294350,61.5441796,-150.5147329,NA +15292400,62.55810837,-150.23616,NA +15564879,67.2544444,-150.1772222,NA +15292780,62.1748474,-150.1726719,NA +15293700,61.80974586,-150.0972379,NA +15293200,61.92388889,-150.0713889,NA +15292800,62.1047619,-150.0597486,NA +15292700,62.3464388,-150.019201,NA +15274600,61.1388906,-149.9255337,NA +15294005,61.78030346,-149.8866786,NA +15261000,60.4799795,-149.882711,NA +15260001,60.43441667,-149.8245278,NA +15258000,60.49219269,-149.8099203,NA +15274000,61.16667096,-149.7727527,NA +15276000,61.22500619,-149.6372008,NA +15238450,60.1093333,-149.4546667,NA +15290000,61.7097433,-149.231938,NA +15285000,61.64307278,-149.1983305,NA +15457800,65.66483428,-149.0989254,NA +15515500,64.5649444,-149.094,NA +15284000,61.6086312,-149.0730432,NA +15283700,61.68438889,-149.0524167,NA +15280999,61.52338889,-149.0418889,NA +15896000,70.28138539,-148.962786,NA +15272380,60.8974833,-148.9241074,NA +15236900,60.36995858,-148.8987624,NA +15908000,69.0158333,-148.8177778,NA +15519100,65.4648407,-148.6311143,NA +15291700,62.8233333,-148.6047222,NA +15519030,65.5229722,-148.5463889,NA +15518900,65.47151429,-148.2688894,NA +15237030,60.45188889,-148.108,NA +15291000,63.10343837,-147.5180902,NA +15484000,64.47152778,-146.9280556,NA +15493000,64.9019722,-146.3613333,NA +15219000,60.7608659,-146.174225,NA +15200280,62.5203918,-145.5330154,NA +15215900,60.5327973,-145.3806148,NA +15446000,65.7107629,-144.3358018,NA +15209700,61.43372656,-142.9426256,NA +15209770,61.48468889,-142.8866167,NA +15310002,64.0344444,-142.5283333,NA +15331000,64.4708611,-142.2215,NA +15330000,64.4668333,-142.21625,NA +15348000,64.3088552,-141.4045168,NA +15129500,59.58636636,-139.4941877,NA +15129510,59.5702565,-139.4400197,NA +15129280,59.30202778,-139.0456944,NA +15129300,59.4172165,-139.019217,NA +15057596,58.44465728,-135.7418302,NA +15057580,58.4432745,-135.6020974,NA +15057590,58.42299689,-135.5998738,NA +15056210,59.5116183,-135.3462752,NA +15087618,57.12491678,-135.3334277,NA +15087610,57.2599243,-135.3334275,NA +15087700,57.05297119,-135.3162085,NA +15056100,59.4658333,-135.3041667,NA +15106980,57.6779902,-135.2231705,NA +15087810,57.0607496,-135.211484,NA +15106970,57.69215748,-135.2034467,NA +15106920,57.662435,-135.1867819,NA +15056030,59.0049486,-135.185708,NA +15100000,57.1427162,-134.8656418,NA +15101500,58.08799687,-134.7487297,NA +15054000,58.3818946,-134.6378955,NA +15052475,58.3660622,-134.5778918,NA +15051010,58.33217378,-134.4676074,NA +15041200,58.53829828,-133.7017432,NA +15087570,56.87216067,-133.6767336,NA +15081497,55.8010287,-133.1103222,NA +15087585,56.9682723,-133.06978,NA +15081614,55.55687287,-133.0186197,NA +15081495,55.7324084,-132.9688959,NA +15086225,55.9086111,-132.9308333,NA +15087300,56.6818693,-132.9239425,NA +15087500,56.7935403,-132.8747734,NA +15085697,55.45931667,-132.716261,NA +15086960,56.4118757,-132.4933566,NA +15085100,55.3951944,-132.4086268,NA +15083500,54.9463249,-132.1724762,NA +15024800,56.70772188,-132.1319653,NA +15058700,55.3424302,-131.7005736,NA +15068040,55.51909057,-131.5244658,NA +15015595,56.2402062,-130.8819864,NA +15011894,55.42578169,-130.5628063,NA +15011870,55.4138425,-130.4622504,NA +15011880,55.3532874,-130.4505824,NA +15009000,55.83302857,-130.1833693,NA +15008000,56.025815,-130.0669823,NA +09534000,32.48758333,-114.7896667,NORTH AMERICAN DESERTS +09534550,32.48694444,-114.7872222,NORTH AMERICAN DESERTS +09522005,32.7122222,-114.7222222,NORTH AMERICAN DESERTS +09404200,35.7735994,-113.363544,NORTH AMERICAN DESERTS +09403850,36.39581624,-112.6318566,NORTH AMERICAN DESERTS +331954112371801,33.33175278,-112.6216556,NORTH AMERICAN DESERTS +332029112353701,33.34151667,-112.5935417,NORTH AMERICAN DESERTS +332108112332001,33.3521361,-112.5556528,NORTH AMERICAN DESERTS +09402500,36.10137176,-112.0862795,NORTH AMERICAN DESERTS +09383100,36.20220808,-111.8171042,NORTH AMERICAN DESERTS +09402300,36.1952642,-111.7771024,NORTH AMERICAN DESERTS +09505800,34.53863606,-111.6940356,TEMPERATE SIERRAS +09508300,34.16086787,-111.6929235,NORTH AMERICAN DESERTS +09380000,36.8643333,-111.5878722,NORTH AMERICAN DESERTS +09471000,31.62592644,-110.1745226,SOUTHERN SEMI-ARID HIGHLANDS +07194933,36.24377778,-94.2391389,EASTERN TEMPERATE FORESTS +07194880,36.2814662,-94.2279838,EASTERN TEMPERATE FORESTS +071948095,36.1228083,-94.1625611,EASTERN TEMPERATE FORESTS +07048495,36.0432583,-94.1360222,EASTERN TEMPERATE FORESTS +07048550,36.05388889,-94.0830556,EASTERN TEMPERATE FORESTS +07048600,36.07305556,-94.0811111,EASTERN TEMPERATE FORESTS +07337000,33.55194444,-94.0411111,EASTERN TEMPERATE FORESTS +07049050,36.26757447,-93.9432535,EASTERN TEMPERATE FORESTS +07049691,36.4208333,-93.8472222,EASTERN TEMPERATE FORESTS +07055814,35.97896536,-93.0435069,EASTERN TEMPERATE FORESTS +07257500,35.46638889,-93.0411111,EASTERN TEMPERATE FORESTS +07362693,34.63064678,-92.8273923,EASTERN TEMPERATE FORESTS +07056515,35.94,-92.7133333,EASTERN TEMPERATE FORESTS +07075250,35.54705,-92.7076667,EASTERN TEMPERATE FORESTS +07263296,34.87888889,-92.6855556,EASTERN TEMPERATE FORESTS +072632966,34.87527778,-92.6538889,EASTERN TEMPERATE FORESTS +07261090,35.2708333,-92.6302778,EASTERN TEMPERATE FORESTS +07075270,35.5697222,-92.6219444,EASTERN TEMPERATE FORESTS +07054501,36.365,-92.575,EASTERN TEMPERATE FORESTS +07054527,36.3436111,-92.5741667,EASTERN TEMPERATE FORESTS +07059998,36.2483333,-92.24,EASTERN TEMPERATE FORESTS +07060000,36.24923449,-92.2384887,EASTERN TEMPERATE FORESTS +07060500,36.11666667,-92.1430556,EASTERN TEMPERATE FORESTS +07076000,35.5172222,-91.9972222,EASTERN TEMPERATE FORESTS +07364122,33.95321944,-91.7334167,EASTERN TEMPERATE FORESTS +07364130,33.963125,-91.6924472,EASTERN TEMPERATE FORESTS +07364133,33.86638889,-91.6561111,EASTERN TEMPERATE FORESTS +11530500,41.5109543,-123.9795164,MARINE WEST COAST FOREST +11530000,41.049852,-123.673668,NORTHWESTERN FORESTED MOUNTAINS +11475560,39.7295997,-123.6439073,MARINE WEST COAST FOREST +11523000,41.3034599,-123.5345036,NORTHWESTERN FORESTED MOUNTAINS +14361590,42.00623585,-123.1575489,NORTHWESTERN FORESTED MOUNTAINS +14361600,42.0040833,-123.1486944,NORTHWESTERN FORESTED MOUNTAINS +11462500,39.02656314,-123.1305588,MEDITERRANEAN CALIFORNIA +11461500,39.24655605,-123.1302806,MEDITERRANEAN CALIFORNIA +11526400,40.76653148,-123.1144757,NORTHWESTERN FORESTED MOUNTAINS +11463000,38.8793475,-123.0536124,MEDITERRANEAN CALIFORNIA +11525854,40.64527778,-122.9566667,NORTHWESTERN FORESTED MOUNTAINS +11467000,38.50852336,-122.9277737,MEDITERRANEAN CALIFORNIA +11465240,38.65324355,-122.9272191,MEDITERRANEAN CALIFORNIA +11463980,38.6329653,-122.8555494,MEDITERRANEAN CALIFORNIA +11463682,38.65824247,-122.8294376,MEDITERRANEAN CALIFORNIA +11525500,40.7247222,-122.801111,NORTHWESTERN FORESTED MOUNTAINS +11458433,38.4188004,-122.5627606,MEDITERRANEAN CALIFORNIA +11162753,37.52944444,-122.3583333,MEDITERRANEAN CALIFORNIA +11451800,38.8898988,-122.2383082,MEDITERRANEAN CALIFORNIA +11381500,40.0546022,-122.0241541,MEDITERRANEAN CALIFORNIA +11179000,37.58715679,-121.960793,MEDITERRANEAN CALIFORNIA +11383500,40.01404745,-121.9483181,MEDITERRANEAN CALIFORNIA +11176900,37.62659915,-121.8830126,MEDITERRANEAN CALIFORNIA +11174000,37.577434,-121.857734,MEDITERRANEAN CALIFORNIA +11173575,37.5404908,-121.856345,MEDITERRANEAN CALIFORNIA +11390500,39.00989476,-121.82469,MEDITERRANEAN CALIFORNIA +11173510,37.5035472,-121.8246774,MEDITERRANEAN CALIFORNIA +11173500,37.50194444,-121.8183333,MEDITERRANEAN CALIFORNIA +11172955,37.4986111,-121.7794444,MEDITERRANEAN CALIFORNIA +11172945,37.4974356,-121.7735644,MEDITERRANEAN CALIFORNIA +11173200,37.46160337,-121.769397,MEDITERRANEAN CALIFORNIA +11176500,37.62326509,-121.7588418,MEDITERRANEAN CALIFORNIA +11390000,39.72599524,-121.7088643,MEDITERRANEAN CALIFORNIA +11447650,38.45566389,-121.5016167,MEDITERRANEAN CALIFORNIA +11355500,40.6891111,-121.4228056,NORTHWESTERN FORESTED MOUNTAINS +11446980,38.5671281,-121.3882857,MEDITERRANEAN CALIFORNIA +11446700,38.59129436,-121.3327288,MEDITERRANEAN CALIFORNIA +11303500,37.6760406,-121.2663293,MEDITERRANEAN CALIFORNIA +11446500,38.6354601,-121.2277262,MEDITERRANEAN CALIFORNIA +11446220,38.70452778,-121.164361,MEDITERRANEAN CALIFORNIA +11303000,37.72965078,-121.1104934,MEDITERRANEAN CALIFORNIA +11433790,38.8829546,-121.0630007,MEDITERRANEAN CALIFORNIA +11274538,37.41354657,-121.0160412,MEDITERRANEAN CALIFORNIA +11274550,37.43218889,-121.0133444,MEDITERRANEAN CALIFORNIA +11446030,38.76295708,-121.0082763,MEDITERRANEAN CALIFORNIA +11290000,37.627153,-120.9843777,MEDITERRANEAN CALIFORNIA +11273400,37.3472151,-120.9761777,MEDITERRANEAN CALIFORNIA +11261500,37.3099386,-120.9310369,MEDITERRANEAN CALIFORNIA +11262900,37.26244,-120.9065908,MEDITERRANEAN CALIFORNIA +11262895,37.2407741,-120.8779783,MEDITERRANEAN CALIFORNIA +11302500,37.77715006,-120.852988,MEDITERRANEAN CALIFORNIA +11261100,37.24771864,-120.8521446,MEDITERRANEAN CALIFORNIA +11302000,37.85159385,-120.6379816,MEDITERRANEAN CALIFORNIA +11299997,37.87603788,-120.6052025,MEDITERRANEAN CALIFORNIA +11289650,37.666321,-120.4421394,MEDITERRANEAN CALIFORNIA +11133000,34.63609474,-120.424606,MEDITERRANEAN CALIFORNIA +11254000,36.8105046,-120.3782256,MEDITERRANEAN CALIFORNIA +10343500,39.43157246,-120.2379793,NORTHWESTERN FORESTED MOUNTAINS +10336660,39.10740708,-120.1621352,NORTHWESTERN FORESTED MOUNTAINS +10336676,39.1321292,-120.1576913,NORTHWESTERN FORESTED MOUNTAINS +10336645,39.05185197,-120.1185209,NORTHWESTERN FORESTED MOUNTAINS +10346000,39.42796385,-120.0340873,NORTHWESTERN FORESTED MOUNTAINS +103366092,38.8485185,-120.0271275,NORTHWESTERN FORESTED MOUNTAINS +10336580,38.79629598,-120.0190718,NORTHWESTERN FORESTED MOUNTAINS +103366098,38.87546309,-120.00546,NORTHWESTERN FORESTED MOUNTAINS +10336612,38.93435236,-120.0001818,NORTHWESTERN FORESTED MOUNTAINS +10336610,38.9224078,-119.9915706,NORTHWESTERN FORESTED MOUNTAINS +10336795,38.93657456,-119.9907372,NORTHWESTERN FORESTED MOUNTAINS +11126000,34.5891552,-119.9887532,MEDITERRANEAN CALIFORNIA +10336780,38.9199077,-119.9724036,NORTHWESTERN FORESTED MOUNTAINS +11276900,37.8815908,-119.9701824,NORTHWESTERN FORESTED MOUNTAINS +10336779,38.91212985,-119.969348,NORTHWESTERN FORESTED MOUNTAINS +10336775,38.90339444,-119.9688917,NORTHWESTERN FORESTED MOUNTAINS +11278300,37.89436824,-119.962682,NORTHWESTERN FORESTED MOUNTAINS +10336770,38.8632405,-119.9582367,NORTHWESTERN FORESTED MOUNTAINS +11276600,37.87936848,-119.947126,NORTHWESTERN FORESTED MOUNTAINS +11277300,37.96769944,-119.9174029,NORTHWESTERN FORESTED MOUNTAINS +11278000,37.969088,-119.882124,NORTHWESTERN FORESTED MOUNTAINS +11276500,37.93742147,-119.7982326,NORTHWESTERN FORESTED MOUNTAINS +11252275,36.87638889,-119.7930556,MEDITERRANEAN CALIFORNIA +11251000,36.98439397,-119.7243124,MEDITERRANEAN CALIFORNIA +11250110,36.99916667,-119.706111,MEDITERRANEAN CALIFORNIA +11274790,37.9165884,-119.6598938,NORTHWESTERN FORESTED MOUNTAINS +11264500,37.73131496,-119.5590514,NORTHWESTERN FORESTED MOUNTAINS +11111500,34.5777657,-119.2573347,MEDITERRANEAN CALIFORNIA +11224000,37.63194444,-119.0863889,NORTHWESTERN FORESTED MOUNTAINS +10265100,37.75027778,-118.9394444,NORTHWESTERN FORESTED MOUNTAINS +10265150,37.66882166,-118.8176312,NORTH AMERICAN DESERTS +11204100,36.02411648,-118.8134258,MEDITERRANEAN CALIFORNIA +11108500,34.39971939,-118.7048126,MEDITERRANEAN CALIFORNIA +11206820,36.61166667,-118.7016667,NORTHWESTERN FORESTED MOUNTAINS +11203580,36.04828125,-118.6542556,NORTHWESTERN FORESTED MOUNTAINS +10277400,37.0529883,-118.2273207,NORTH AMERICAN DESERTS +11103010,33.8044618,-118.2050693,MEDITERRANEAN CALIFORNIA +10263500,34.42083115,-117.8395072,MEDITERRANEAN CALIFORNIA +11046062,33.25055556,-117.4313889,MEDITERRANEAN CALIFORNIA +10261500,34.57304916,-117.3206018,NORTH AMERICAN DESERTS +10260500,34.34305858,-117.2264316,MEDITERRANEAN CALIFORNIA +11044000,33.4739175,-117.1422536,MEDITERRANEAN CALIFORNIA +09429490,32.8849361,-114.468111,NORTH AMERICAN DESERTS +09371010,37.00113889,-109.0295833,NORTH AMERICAN DESERTS +09163500,39.13276047,-109.0270546,NORTH AMERICAN DESERTS +09171100,38.3569337,-108.8334347,NORTH AMERICAN DESERTS +09153270,39.16416667,-108.7502611,NORTH AMERICAN DESERTS +09306290,40.17969335,-108.5653775,NORTH AMERICAN DESERTS +09106200,39.06053714,-108.4778683,NORTH AMERICAN DESERTS +09306242,39.9202502,-108.4728719,NORTH AMERICAN DESERTS +09260000,40.54901667,-108.4243222,NORTH AMERICAN DESERTS +09306255,40.1685813,-108.4012046,NORTH AMERICAN DESERTS +09306224,40.1625,-108.345,NORTH AMERICAN DESERTS +09095300,39.3747361,-108.3172694,NORTH AMERICAN DESERTS +09306200,39.9210833,-108.2975876,NORTH AMERICAN DESERTS +09306222,40.0780264,-108.2364753,NORTH AMERICAN DESERTS +391953108130201,39.33119444,-108.2178056,NORTH AMERICAN DESERTS +09306007,39.8260846,-108.1831384,NORTH AMERICAN DESERTS +09304800,40.0225833,-108.1199444,NORTH AMERICAN DESERTS +09149500,38.74194444,-108.0804167,NORTH AMERICAN DESERTS +09144250,38.75303944,-108.078403,NORTH AMERICAN DESERTS +383926107593001,38.657207,-107.9922886,NORTH AMERICAN DESERTS +09361500,37.2791688,-107.8803445,NORTH AMERICAN DESERTS +09363500,37.03656944,-107.8753333,NORTH AMERICAN DESERTS +09136100,38.78516667,-107.8334167,NORTH AMERICAN DESERTS +09304200,40.00497428,-107.8253486,NORTH AMERICAN DESERTS +09359010,37.8027744,-107.6728392,NORTHWESTERN FORESTED MOUNTAINS +09359020,37.7883333,-107.6682222,NORTHWESTERN FORESTED MOUNTAINS +09358550,37.8197187,-107.6636723,NORTHWESTERN FORESTED MOUNTAINS +09358000,37.8111077,-107.6592278,NORTHWESTERN FORESTED MOUNTAINS +09352900,37.47750126,-107.5436688,NORTHWESTERN FORESTED MOUNTAINS +385553107243301,38.93125278,-107.4090917,NORTHWESTERN FORESTED MOUNTAINS +09085150,39.56166667,-107.4066667,NORTHWESTERN FORESTED MOUNTAINS +09132095,38.9372222,-107.3583333,NORTHWESTERN FORESTED MOUNTAINS +385903107210800,38.9883611,-107.3484889,NORTHWESTERN FORESTED MOUNTAINS +09085100,39.5549819,-107.337554,NORTHWESTERN FORESTED MOUNTAINS +09085000,39.54666667,-107.3308333,NORTHWESTERN FORESTED MOUNTAINS +393259107194801,39.54975,-107.3301,NORTHWESTERN FORESTED MOUNTAINS +09124500,38.2988834,-107.2300557,NORTHWESTERN FORESTED MOUNTAINS +09243800,40.34581144,-107.085053,NORTHWESTERN FORESTED MOUNTAINS +09070500,39.6446111,-107.0780139,NORTHWESTERN FORESTED MOUNTAINS +385106106571000,38.85165929,-106.9533773,NORTHWESTERN FORESTED MOUNTAINS +09114520,38.5332722,-106.9490861,NORTHWESTERN FORESTED MOUNTAINS +09119000,38.5211111,-106.9409583,NORTHWESTERN FORESTED MOUNTAINS +09110000,38.66443715,-106.8453172,NORTHWESTERN FORESTED MOUNTAINS +09075400,39.1938333,-106.8336667,NORTHWESTERN FORESTED MOUNTAINS +09239500,40.4829861,-106.8324306,NORTHWESTERN FORESTED MOUNTAINS +09060799,39.8911,-106.8316944,NORTHWESTERN FORESTED MOUNTAINS +394220106431500,39.705,-106.7258333,NORTHWESTERN FORESTED MOUNTAINS +09066510,39.60943048,-106.447808,NORTHWESTERN FORESTED MOUNTAINS +09041090,40.2024844,-106.4225335,NORTHWESTERN FORESTED MOUNTAINS +09064600,39.55387495,-106.402529,NORTHWESTERN FORESTED MOUNTAINS +08227000,38.16333294,-106.290583,NORTHWESTERN FORESTED MOUNTAINS +07086000,39.04277116,-106.2658553,NORTHWESTERN FORESTED MOUNTAINS +07091200,38.6522188,-106.051126,NORTHWESTERN FORESTED MOUNTAINS +09046530,39.4930424,-106.0447409,NORTHWESTERN FORESTED MOUNTAINS +09034250,40.108319,-106.0041847,NORTHWESTERN FORESTED MOUNTAINS +09010500,40.32581784,-105.8566791,NORTHWESTERN FORESTED MOUNTAINS +09033300,40.00689167,-105.8482722,NORTHWESTERN FORESTED MOUNTAINS +09027100,39.9903333,-105.8297778,NORTHWESTERN FORESTED MOUNTAINS +09014050,40.2461111,-105.8288333,NORTHWESTERN FORESTED MOUNTAINS +09033100,39.9990861,-105.8265583,NORTHWESTERN FORESTED MOUNTAINS +09032000,39.94998694,-105.7655627,NORTHWESTERN FORESTED MOUNTAINS +373947105421101,37.6631111,-105.7031111,NORTH AMERICAN DESERTS +402114105350101,40.3538611,-105.5841389,NORTHWESTERN FORESTED MOUNTAINS +07094500,38.4872189,-105.373604,NORTHWESTERN FORESTED MOUNTAINS +07096000,38.43388674,-105.2572128,GREAT PLAINS +07097000,38.38833418,-105.0160961,GREAT PLAINS +06711565,39.66498738,-105.004149,GREAT PLAINS +06714215,39.81220846,-104.9583129,GREAT PLAINS +07105530,38.8030491,-104.7958069,GREAT PLAINS +07105815,38.7297222,-104.7676389,GREAT PLAINS +07105780,38.752495,-104.7624723,GREAT PLAINS +07105800,38.7294404,-104.7338611,GREAT PLAINS +07105820,38.71860726,-104.729139,GREAT PLAINS +07099400,38.2716694,-104.718033,GREAT PLAINS +07106000,38.6016647,-104.6702503,GREAT PLAINS +07124200,37.12946459,-104.6399888,NORTHWESTERN FORESTED MOUNTAINS +07099971,38.253275,-104.6028778,GREAT PLAINS +07106500,38.2877801,-104.6010849,GREAT PLAINS +381312104321001,38.2201111,-104.5359722,GREAT PLAINS +07109500,38.24805799,-104.3991356,GREAT PLAINS +07119700,38.12583934,-103.9119006,GREAT PLAINS +07126300,37.3564059,-103.9002383,GREAT PLAINS +07120500,38.06528559,-103.6860593,GREAT PLAINS +07126485,37.6183474,-103.593557,GREAT PLAINS +06764000,40.97499276,-102.2518517,GREAT PLAINS +09058000,40.03665248,-106.4400324,NORTHWESTERN FORESTED MOUNTAINS +09034500,40.08331887,-106.0880765,NORTHWESTERN FORESTED MOUNTAINS +07099969,38.25361396,-104.6060854,GREAT PLAINS +01200600,41.5931499,-73.4495669,NORTHERN FORESTS +01209710,41.13537426,-73.426231,EASTERN TEMPERATE FORESTS +01201487,41.4658222,-73.40320278,EASTERN TEMPERATE FORESTS +01186000,41.9628729,-73.017606,NORTHERN FORESTS +01187300,42.0375,-72.93932778,NORTHERN FORESTS +01196500,41.45026389,-72.841275,EASTERN TEMPERATE FORESTS +01189999,41.91648634,-72.69314808,EASTERN TEMPERATE FORESTS +01184000,41.9873186,-72.6053669,EASTERN TEMPERATE FORESTS +01193050,41.5417656,-72.5531454,EASTERN TEMPERATE FORESTS +01193630,41.51704355,-72.4825876,EASTERN TEMPERATE FORESTS +01193500,41.55232124,-72.44925287,EASTERN TEMPERATE FORESTS +01194500,41.42751667,-72.33477778,EASTERN TEMPERATE FORESTS +01194000,41.44166944,-72.33267778,EASTERN TEMPERATE FORESTS +01119500,41.7506544,-72.26563469,EASTERN TEMPERATE FORESTS +011277916,41.35944444,-72.17527778,EASTERN TEMPERATE FORESTS +01120790,41.81616944,-72.1061694,EASTERN TEMPERATE FORESTS +01478650,39.6892222,-75.74875,EASTERN TEMPERATE FORESTS +01478000,39.63738889,-75.72788889,EASTERN TEMPERATE FORESTS +01483155,39.4309722,-75.7094722,EASTERN TEMPERATE FORESTS +01478950,39.70688889,-75.6950833,EASTERN TEMPERATE FORESTS +01479000,39.6992222,-75.67502778,EASTERN TEMPERATE FORESTS +01480025,39.70594444,-75.64577778,EASTERN TEMPERATE FORESTS +01480000,39.76280556,-75.6365,EASTERN TEMPERATE FORESTS +01487150,38.6914722,-75.63488889,EASTERN TEMPERATE FORESTS +01482695,39.55405556,-75.6188611,EASTERN TEMPERATE FORESTS +01481500,39.7695,-75.5766944,EASTERN TEMPERATE FORESTS +01487000,38.7283333,-75.5618611,EASTERN TEMPERATE FORESTS +01482100,39.68927997,-75.521588,EASTERN TEMPERATE FORESTS +01483700,39.1637222,-75.5190833,EASTERN TEMPERATE FORESTS +01484100,38.90577778,-75.51275,EASTERN TEMPERATE FORESTS +01484525,38.59455556,-75.29102778,EASTERN TEMPERATE FORESTS +01484272,38.791,-75.25077778,EASTERN TEMPERATE FORESTS +295323085151700,29.8897222,-85.2547222,EASTERN TEMPERATE FORESTS +295308085143700,29.88555556,-85.2436111,EASTERN TEMPERATE FORESTS +02359223,29.7695111,-85.0842806,EASTERN TEMPERATE FORESTS +02359170,29.94937094,-85.0154686,EASTERN TEMPERATE FORESTS +02327100,30.12936856,-84.4943482,EASTERN TEMPERATE FORESTS +02327033,30.18825753,-84.40823469,EASTERN TEMPERATE FORESTS +02326993,30.3152004,-84.3987914,EASTERN TEMPERATE FORESTS +02326995,30.27825,-84.3862778,EASTERN TEMPERATE FORESTS +02327031,30.07270485,-84.3273972,EASTERN TEMPERATE FORESTS +02326516,30.3397222,-83.9923333,EASTERN TEMPERATE FORESTS +02326526,30.3013159,-83.9796085,EASTERN TEMPERATE FORESTS +02326050,30.06811667,-83.8987028,EASTERN TEMPERATE FORESTS +02324170,29.6682821,-83.37735989,EASTERN TEMPERATE FORESTS +02319000,30.59548716,-83.2595906,EASTERN TEMPERATE FORESTS +02319800,30.2449425,-83.24958439,EASTERN TEMPERATE FORESTS +02319394,30.41049435,-83.18013979,EASTERN TEMPERATE FORESTS +02320000,30.09994513,-83.1715247,EASTERN TEMPERATE FORESTS +302307083101400,30.38565833,-83.1699917,EASTERN TEMPERATE FORESTS +291842083085100,29.31190595,-83.1473499,NA +291930083082800,29.32523894,-83.140961,EASTERN TEMPERATE FORESTS +291841083070800,29.31162833,-83.118738,EASTERN TEMPERATE FORESTS +291652083064100,29.28135143,-83.1112374,EASTERN TEMPERATE FORESTS +02315626,30.43944444,-83.0892778,EASTERN TEMPERATE FORESTS +02323592,29.33940554,-83.086515,EASTERN TEMPERATE FORESTS +02317620,30.59826888,-83.073195,EASTERN TEMPERATE FORESTS +02315550,30.3929988,-82.9331875,EASTERN TEMPERATE FORESTS +02320500,29.955785,-82.9276278,EASTERN TEMPERATE FORESTS +02323000,29.79134359,-82.924293,EASTERN TEMPERATE FORESTS +02322800,29.91162076,-82.8604033,EASTERN TEMPERATE FORESTS +02315520,30.3707788,-82.79985119,EASTERN TEMPERATE FORESTS +02322700,29.95273288,-82.7859573,EASTERN TEMPERATE FORESTS +02313700,29.20413378,-82.769001,EASTERN TEMPERATE FORESTS +02313272,29.00110935,-82.7657876,NA +02310308,28.2502877,-82.7226006,EASTERN TEMPERATE FORESTS +02322500,29.84884769,-82.7151204,EASTERN TEMPERATE FORESTS +02315005,30.4857755,-82.7120734,EASTERN TEMPERATE FORESTS +285531082412600,28.92527778,-82.69063889,NA +02310752,28.90155556,-82.6458056,EASTERN TEMPERATE FORESTS +02310674,28.69470935,-82.6389891,NA +02310750,28.90500349,-82.6351883,EASTERN TEMPERATE FORESTS +02310673,28.70263889,-82.6247222,EASTERN TEMPERATE FORESTS +02310700,28.78526096,-82.6178779,EASTERN TEMPERATE FORESTS +02321975,29.85273894,-82.6084508,EASTERN TEMPERATE FORESTS +02310689,28.8131111,-82.60563889,EASTERN TEMPERATE FORESTS +02310742,28.8933611,-82.6055556,EASTERN TEMPERATE FORESTS +02310690,28.80137159,-82.6026,EASTERN TEMPERATE FORESTS +02310740,28.890535,-82.5956566,EASTERN TEMPERATE FORESTS +02321958,29.8735723,-82.59122849,EASTERN TEMPERATE FORESTS +02310650,28.71526419,-82.5767656,EASTERN TEMPERATE FORESTS +02306028,27.94196627,-82.4587057,EASTERN TEMPERATE FORESTS +023060013,28.0202967,-82.4548166,EASTERN TEMPERATE FORESTS +02299734,27.11271944,-82.4474111,NA +02304517,28.0151611,-82.4424056,EASTERN TEMPERATE FORESTS +02304510,28.02113015,-82.4345385,EASTERN TEMPERATE FORESTS +02299727,27.14394246,-82.4300958,EASTERN TEMPERATE FORESTS +02321500,29.9219073,-82.4262246,EASTERN TEMPERATE FORESTS +02301721,27.85974739,-82.3842598,EASTERN TEMPERATE FORESTS +023000095,27.51364999,-82.3670375,EASTERN TEMPERATE FORESTS +02304000,28.05446224,-82.3637032,EASTERN TEMPERATE FORESTS +02313000,28.98886759,-82.3495406,EASTERN TEMPERATE FORESTS +02301718,27.86934167,-82.3264528,EASTERN TEMPERATE FORESTS +02301638,27.85891477,-82.2737021,EASTERN TEMPERATE FORESTS +02301635,27.85715556,-82.26858889,EASTERN TEMPERATE FORESTS +02301500,27.872248,-82.2112008,EASTERN TEMPERATE FORESTS +02312700,28.8002651,-82.1528658,EASTERN TEMPERATE FORESTS +02239501,29.2149764,-82.0412,EASTERN TEMPERATE FORESTS +02297350,27.07755529,-82.00730919,EASTERN TEMPERATE FORESTS +02297345,27.08666667,-81.9994444,EASTERN TEMPERATE FORESTS +02297460,26.98755887,-81.9942538,EASTERN TEMPERATE FORESTS +02240000,29.21469888,-81.9859203,EASTERN TEMPERATE FORESTS +02298202,26.98478094,-81.9356414,EASTERN TEMPERATE FORESTS +02298123,27.05199986,-81.7845267,EASTERN TEMPERATE FORESTS +02246318,30.19635087,-81.7684315,EASTERN TEMPERATE FORESTS +302609081453300,30.43585,-81.7592,EASTERN TEMPERATE FORESTS +02246459,30.28218375,-81.7403761,EASTERN TEMPERATE FORESTS +301204081434900,30.20118056,-81.7304,EASTERN TEMPERATE FORESTS +301057081414800,30.18245833,-81.69676389,EASTERN TEMPERATE FORESTS +02244040,29.5963582,-81.683138,EASTERN TEMPERATE FORESTS +02246751,30.44333889,-81.6682,EASTERN TEMPERATE FORESTS +301124081395901,30.1902405,-81.6662048,EASTERN TEMPERATE FORESTS +02246500,30.3224616,-81.6653735,EASTERN TEMPERATE FORESTS +301817081393600,30.30478056,-81.6601,EASTERN TEMPERATE FORESTS +301510081383500,30.25288889,-81.6431,EASTERN TEMPERATE FORESTS +294130081382000,29.69166667,-81.63888889,EASTERN TEMPERATE FORESTS +295856081372301,29.9824648,-81.6228662,EASTERN TEMPERATE FORESTS +02266200,28.38500749,-81.6164632,EASTERN TEMPERATE FORESTS +02245340,30.0059222,-81.6151361,EASTERN TEMPERATE FORESTS +02244450,29.59635886,-81.6078574,EASTERN TEMPERATE FORESTS +02266291,28.42694444,-81.6052778,EASTERN TEMPERATE FORESTS +02246804,30.45494167,-81.59688889,EASTERN TEMPERATE FORESTS +300803081354500,30.13408889,-81.5959,EASTERN TEMPERATE FORESTS +02231291,30.5507931,-81.5898179,EASTERN TEMPERATE FORESTS +255654081350200,25.94819444,-81.58388889,TROPICAL WET FORESTS +022662947,28.3800078,-81.5828516,EASTERN TEMPERATE FORESTS +02266298,28.3486201,-81.5811849,EASTERN TEMPERATE FORESTS +02266300,28.33278738,-81.579796,EASTERN TEMPERATE FORESTS +02266320,28.298622,-81.5775738,EASTERN TEMPERATE FORESTS +02246518,30.28696944,-81.57,EASTERN TEMPERATE FORESTS +302309081333001,30.3860727,-81.55814749,EASTERN TEMPERATE FORESTS +02245290,29.8,-81.55,EASTERN TEMPERATE FORESTS +022462002,30.11916667,-81.54638889,EASTERN TEMPERATE FORESTS +255534081324000,25.926,-81.5443056,TROPICAL WET FORESTS +02266495,28.27584517,-81.5439622,EASTERN TEMPERATE FORESTS +255138081321701,25.86051667,-81.53795,NA +255123081321300,25.8565,-81.5370556,NA +302657081312400,30.44928889,-81.5233,EASTERN TEMPERATE FORESTS +02236125,29.16692445,-81.5220157,EASTERN TEMPERATE FORESTS +02264100,28.32528785,-81.5206284,EASTERN TEMPERATE FORESTS +02264000,28.39056323,-81.5195173,EASTERN TEMPERATE FORESTS +02264051,28.37444444,-81.515,EASTERN TEMPERATE FORESTS +255432081303900,25.90880556,-81.5109167,TROPICAL WET FORESTS +255726081303700,25.9569972,-81.5109083,TROPICAL WET FORESTS +02245260,29.72338056,-81.4843667,EASTERN TEMPERATE FORESTS +255327081275900,25.89538889,-81.4555,TROPICAL WET FORESTS +02263692,28.47194903,-81.42923779,EASTERN TEMPERATE FORESTS +02236000,29.00831827,-81.3825651,EASTERN TEMPERATE FORESTS +02290928,25.8697222,-81.3825,TROPICAL WET FORESTS +02235495,28.93943195,-81.3447869,EASTERN TEMPERATE FORESTS +02290930,25.8286111,-81.3416667,TROPICAL WET FORESTS +02234500,28.83804694,-81.3242323,EASTERN TEMPERATE FORESTS +02262900,28.37139699,-81.3106247,EASTERN TEMPERATE FORESTS +02290947,25.7885722,-81.0999222,TROPICAL WET FORESTS +02292010,26.83333333,-81.08888889,TROPICAL WET FORESTS +250802081035500,25.13696944,-81.0643806,TROPICAL WET FORESTS +02248000,29.05081845,-81.0464455,EASTERN TEMPERATE FORESTS +02234000,28.7141611,-81.0353374,EASTERN TEMPERATE FORESTS +02248040,29.1152614,-81.0242225,EASTERN TEMPERATE FORESTS +02288900,25.85176527,-80.9803467,TROPICAL WET FORESTS +02232500,28.54305529,-80.943392,EASTERN TEMPERATE FORESTS +253044080555900,25.512125,-80.9331528,TROPICAL WET FORESTS +02232400,28.36972837,-80.8725578,EASTERN TEMPERATE FORESTS +022908295,25.46797778,-80.8545278,TROPICAL WET FORESTS +02248380,28.73638079,-80.754773,NA +251003080435500,25.16819444,-80.73358889,TROPICAL WET FORESTS +254721080414301,25.78916667,-80.6952778,TROPICAL WET FORESTS +254543080405401,25.7620472,-80.6820444,TROPICAL WET FORESTS +255200080405001,25.86666667,-80.6805556,TROPICAL WET FORESTS +255151080371501,25.86415,-80.6208333,TROPICAL WET FORESTS +02276877,26.98553333,-80.6156,TROPICAL WET FORESTS +255300080370001,25.90660833,-80.58876389,TROPICAL WET FORESTS +251209080350100,25.20330278,-80.5841111,TROPICAL WET FORESTS +251253080320100,25.2148972,-80.5335056,TROPICAL WET FORESTS +0229070825,25.57708333,-80.4001667,TROPICAL WET FORESTS +0229070834,25.57895278,-80.3878472,TROPICAL WET FORESTS +0229070836,25.57358056,-80.3877361,TROPICAL WET FORESTS +0229070838,25.57027778,-80.3856944,TROPICAL WET FORESTS +022907085,25.57091667,-80.37875,TROPICAL WET FORESTS +0229070854,25.57,-80.3747778,TROPICAL WET FORESTS +254157080213800,25.69905556,-80.3606111,TROPICAL WET FORESTS +254155080213500,25.6987222,-80.3598056,TROPICAL WET FORESTS +02277100,27.2048,-80.2587833,NA +265906080093500,26.98528333,-80.16,EASTERN TEMPERATE FORESTS +265929080091800,26.9914,-80.1548333,EASTERN TEMPERATE FORESTS +02277743,26.94674444,-80.08508889,EASTERN TEMPERATE FORESTS +265651080045500,26.9478354,-80.08170838,EASTERN TEMPERATE FORESTS +02358000,30.7010251,-84.8590871,EASTERN TEMPERATE FORESTS +02290709,25.5598611,-80.3595556,TROPICAL WET FORESTS +02286328,25.9002222,-80.1949722,TROPICAL WET FORESTS +02397080,34.24953794,-85.3357887,EASTERN TEMPERATE FORESTS +02397500,34.06019444,-85.3135556,EASTERN TEMPERATE FORESTS +02397075,34.2331496,-85.2932875,EASTERN TEMPERATE FORESTS +02413215,33.61277778,-85.2844444,EASTERN TEMPERATE FORESTS +02413210,33.49269444,-85.2793056,EASTERN TEMPERATE FORESTS +02397000,34.2005,-85.2564167,EASTERN TEMPERATE FORESTS +02413205,33.5008333,-85.2525,EASTERN TEMPERATE FORESTS +02338523,33.3407222,-85.2267222,EASTERN TEMPERATE FORESTS +02388350,34.3608333,-85.1401667,EASTERN TEMPERATE FORESTS +02395980,34.2321111,-85.1169444,EASTERN TEMPERATE FORESTS +02343805,31.24908333,-85.1066111,EASTERN TEMPERATE FORESTS +02387690,34.4409216,-85.0952259,EASTERN TEMPERATE FORESTS +02394820,33.9974722,-85.0536944,EASTERN TEMPERATE FORESTS +02338660,33.2357222,-84.9875556,EASTERN TEMPERATE FORESTS +02395000,34.20930556,-84.97875,EASTERN TEMPERATE FORESTS +02387600,34.4948611,-84.9654167,EASTERN TEMPERATE FORESTS +02394958,34.108709,-84.9504992,EASTERN TEMPERATE FORESTS +02386865,34.66758264,-84.94299919,EASTERN TEMPERATE FORESTS +02337498,33.52638889,-84.9367222,EASTERN TEMPERATE FORESTS +02395120,34.24277778,-84.8897222,EASTERN TEMPERATE FORESTS +02385170,34.7433333,-84.8805278,EASTERN TEMPERATE FORESTS +02394682,34.0789722,-84.8544444,EASTERN TEMPERATE FORESTS +02384500,34.8275,-84.8509722,EASTERN TEMPERATE FORESTS +02394670,34.1427222,-84.839,EASTERN TEMPERATE FORESTS +02337410,33.65380556,-84.8210278,EASTERN TEMPERATE FORESTS +02394612,34.16527778,-84.81638889,EASTERN TEMPERATE FORESTS +02383180,34.51675408,-84.79716019,EASTERN TEMPERATE FORESTS +02385800,34.71675,-84.77025,EASTERN TEMPERATE FORESTS +02357150,30.903,-84.7495,EASTERN TEMPERATE FORESTS +02382610,34.6367513,-84.742159,EASTERN TEMPERATE FORESTS +02394000,34.1629722,-84.7410833,EASTERN TEMPERATE FORESTS +02394515,34.1011111,-84.7375,EASTERN TEMPERATE FORESTS +02382500,34.60380556,-84.6957778,EASTERN TEMPERATE FORESTS +02337170,33.65666667,-84.6736111,EASTERN TEMPERATE FORESTS +02337000,33.77677778,-84.6155,EASTERN TEMPERATE FORESTS +02344630,33.35727778,-84.5826111,EASTERN TEMPERATE FORESTS +02356000,30.91030556,-84.5805,EASTERN TEMPERATE FORESTS +02344655,33.42166667,-84.5783333,EASTERN TEMPERATE FORESTS +02344673,33.38316667,-84.5727222,EASTERN TEMPERATE FORESTS +02336728,33.74352778,-84.5681667,EASTERN TEMPERATE FORESTS +02350600,32.0525,-84.5483333,EASTERN TEMPERATE FORESTS +02392000,34.24019444,-84.4945278,EASTERN TEMPERATE FORESTS +02336490,33.81741667,-84.4803333,EASTERN TEMPERATE FORESTS +02336658,33.73905556,-84.4791111,EASTERN TEMPERATE FORESTS +02336526,33.7944722,-84.4741944,EASTERN TEMPERATE FORESTS +02336000,33.85916667,-84.4544444,EASTERN TEMPERATE FORESTS +02335870,33.95388889,-84.4433333,EASTERN TEMPERATE FORESTS +02335880,33.9019722,-84.4430278,EASTERN TEMPERATE FORESTS +02336410,33.8382222,-84.4392778,EASTERN TEMPERATE FORESTS +02336313,33.82163889,-84.43863889,EASTERN TEMPERATE FORESTS +02344280,33.5258333,-84.43388889,EASTERN TEMPERATE FORESTS +02203603,33.68388889,-84.4152778,EASTERN TEMPERATE FORESTS +02336300,33.82030556,-84.40763889,EASTERN TEMPERATE FORESTS +02335779,33.99527778,-84.3844444,EASTERN TEMPERATE FORESTS +02335778,33.99638889,-84.3844444,EASTERN TEMPERATE FORESTS +02335777,33.99666667,-84.3844444,EASTERN TEMPERATE FORESTS +02335815,33.96775,-84.3836667,EASTERN TEMPERATE FORESTS +02336360,33.86916667,-84.37888889,EASTERN TEMPERATE FORESTS +02203655,33.67891667,-84.35813889,EASTERN TEMPERATE FORESTS +02335757,34.0175,-84.3533333,EASTERN TEMPERATE FORESTS +02336340,33.89775,-84.34525,EASTERN TEMPERATE FORESTS +02336120,33.83155556,-84.3427778,EASTERN TEMPERATE FORESTS +02336240,33.8030833,-84.3406944,EASTERN TEMPERATE FORESTS +02353000,31.30694444,-84.33888889,EASTERN TEMPERATE FORESTS +02203700,33.68902778,-84.3301111,EASTERN TEMPERATE FORESTS +02335450,33.98580556,-84.3156944,EASTERN TEMPERATE FORESTS +02203831,33.70569444,-84.2921944,EASTERN TEMPERATE FORESTS +023362095,33.82138889,-84.2747222,EASTERN TEMPERATE FORESTS +02335405,33.9733333,-84.27,EASTERN TEMPERATE FORESTS +02335700,34.05055556,-84.2694444,EASTERN TEMPERATE FORESTS +02335400,33.97305556,-84.26888889,EASTERN TEMPERATE FORESTS +02335350,33.965,-84.2647222,EASTERN TEMPERATE FORESTS +02203863,33.69319444,-84.25388889,EASTERN TEMPERATE FORESTS +02336152,33.81044444,-84.2479722,EASTERN TEMPERATE FORESTS +02203873,33.70941667,-84.2391667,EASTERN TEMPERATE FORESTS +02336030,33.9058333,-84.225,EASTERN TEMPERATE FORESTS +02203900,33.66577778,-84.224,EASTERN TEMPERATE FORESTS +02203950,33.7632222,-84.2203611,EASTERN TEMPERATE FORESTS +02335078,34.016211,-84.2110306,EASTERN TEMPERATE FORESTS +02335000,33.9972222,-84.2019444,EASTERN TEMPERATE FORESTS +02203960,33.69666667,-84.1986111,EASTERN TEMPERATE FORESTS +02204037,33.66819444,-84.1511667,EASTERN TEMPERATE FORESTS +02207135,33.83041667,-84.1393333,EASTERN TEMPERATE FORESTS +02352790,31.44434377,-84.137684,EASTERN TEMPERATE FORESTS +02334620,34.07163889,-84.1304167,EASTERN TEMPERATE FORESTS +02204070,33.6301111,-84.1284722,EASTERN TEMPERATE FORESTS +02389150,34.3575833,-84.1135833,EASTERN TEMPERATE FORESTS +02334652,34.0588333,-84.1106944,EASTERN TEMPERATE FORESTS +02334653,34.0567222,-84.1083333,EASTERN TEMPERATE FORESTS +02205865,33.9411111,-84.1077778,EASTERN TEMPERATE FORESTS +02334654,34.05388889,-84.1052778,EASTERN TEMPERATE FORESTS +02334885,34.0325,-84.08888889,EASTERN TEMPERATE FORESTS +02204118,33.6622222,-84.0841667,EASTERN TEMPERATE FORESTS +02204115,33.6747222,-84.0841667,EASTERN TEMPERATE FORESTS +02334430,34.15666667,-84.0784167,EASTERN TEMPERATE FORESTS +02206500,33.85305556,-84.0783333,EASTERN TEMPERATE FORESTS +02334578,34.09638889,-84.0780556,EASTERN TEMPERATE FORESTS +02207160,33.77327778,-84.0771667,EASTERN TEMPERATE FORESTS +02334480,34.1325,-84.07,EASTERN TEMPERATE FORESTS +02204130,33.57975,-84.06425,EASTERN TEMPERATE FORESTS +02207220,33.7335833,-84.0615556,EASTERN TEMPERATE FORESTS +02207120,33.7725,-84.0581944,EASTERN TEMPERATE FORESTS +02388985,34.3986111,-84.0566667,EASTERN TEMPERATE FORESTS +02205522,33.92588889,-84.0378056,EASTERN TEMPERATE FORESTS +02207185,33.7775,-84.0377778,EASTERN TEMPERATE FORESTS +02388975,34.4090833,-84.0198056,EASTERN TEMPERATE FORESTS +02205000,34.00194444,-84.005,EASTERN TEMPERATE FORESTS +02207385,33.81527778,-83.99013889,EASTERN TEMPERATE FORESTS +02208130,33.9497222,-83.9483333,EASTERN TEMPERATE FORESTS +02207400,33.82138889,-83.9425,EASTERN TEMPERATE FORESTS +02333500,34.52827778,-83.9402222,EASTERN TEMPERATE FORESTS +02207335,33.66694444,-83.9380556,EASTERN TEMPERATE FORESTS +02218565,34.01027778,-83.8941667,EASTERN TEMPERATE FORESTS +02208150,33.91694444,-83.8880556,EASTERN TEMPERATE FORESTS +02217274,34.0822222,-83.8544444,EASTERN TEMPERATE FORESTS +02208493,33.6285,-83.7988611,EASTERN TEMPERATE FORESTS +02208450,33.63938889,-83.7784167,EASTERN TEMPERATE FORESTS +02330450,34.7009722,-83.72925,EASTERN TEMPERATE FORESTS +02212600,33.10030556,-83.7231667,EASTERN TEMPERATE FORESTS +03544970,34.8836111,-83.7223056,EASTERN TEMPERATE FORESTS +02317797,31.48169444,-83.5841111,EASTERN TEMPERATE FORESTS +02318700,30.82555556,-83.5625,EASTERN TEMPERATE FORESTS +02217643,34.1620583,-83.5250944,EASTERN TEMPERATE FORESTS +02215000,32.283,-83.4623056,EASTERN TEMPERATE FORESTS +02318500,30.79330556,-83.4534444,EASTERN TEMPERATE FORESTS +02181350,34.75027778,-83.405,EASTERN TEMPERATE FORESTS +02176930,34.97452778,-83.1161667,EASTERN TEMPERATE FORESTS +02191740,34.02066816,-83.0693128,EASTERN TEMPERATE FORESTS +02223056,32.93933333,-83.0669722,EASTERN TEMPERATE FORESTS +02317500,30.70383333,-83.0326667,EASTERN TEMPERATE FORESTS +02223500,32.54394444,-82.8929722,EASTERN TEMPERATE FORESTS +02215500,31.91991667,-82.6740556,EASTERN TEMPERATE FORESTS +02201000,32.97566667,-82.6098056,EASTERN TEMPERATE FORESTS +02314500,30.68102778,-82.56013889,EASTERN TEMPERATE FORESTS +02225000,31.9395,-82.35338889,EASTERN TEMPERATE FORESTS +02226500,31.23844444,-82.3228333,EASTERN TEMPERATE FORESTS +02196835,33.4386111,-82.1161111,EASTERN TEMPERATE FORESTS +021968385,33.42509167,-82.09873889,EASTERN TEMPERATE FORESTS +02197000,33.37252778,-81.9420833,EASTERN TEMPERATE FORESTS +02228000,31.21958333,-81.8664444,EASTERN TEMPERATE FORESTS +02231254,30.74427778,-81.654,EASTERN TEMPERATE FORESTS +022035975,31.45333333,-81.3627778,EASTERN TEMPERATE FORESTS +02203578,31.69549627,-81.2714903,EASTERN TEMPERATE FORESTS +02198810,32.25602778,-81.1780278,EASTERN TEMPERATE FORESTS +02198750,32.34858333,-81.1604444,EASTERN TEMPERATE FORESTS +02198920,32.16533333,-81.1549167,EASTERN TEMPERATE FORESTS +02198820,32.24916667,-81.1536111,EASTERN TEMPERATE FORESTS +02198840,32.2354722,-81.1510833,EASTERN TEMPERATE FORESTS +02198950,32.1657222,-81.1379722,EASTERN TEMPERATE FORESTS +02198955,32.14277778,-81.1352778,EASTERN TEMPERATE FORESTS +021989792,32.16583333,-81.13,EASTERN TEMPERATE FORESTS +021989715,32.11608333,-81.1283333,EASTERN TEMPERATE FORESTS +021989793,32.13666667,-81.1219444,EASTERN TEMPERATE FORESTS +0219897945,32.09777778,-81.0827778,EASTERN TEMPERATE FORESTS +021989773,32.08041667,-81.0813611,EASTERN TEMPERATE FORESTS +02198980,32.03580556,-80.9060556,EASTERN TEMPERATE FORESTS +02397100,34.24870459,-85.35551139,EASTERN TEMPERATE FORESTS +16212700,21.46113889,-158.024111,NA +16213000,21.38347222,-158.0109167,NA +16304200,21.5861111,-157.9080556,NA +16303000,21.55638889,-157.8988889,NA +213407157533801,21.5686111,-157.8938889,NA +213358157533701,21.5661111,-157.893611,NA +213425157531701,21.5736111,-157.8880556,NA +212837157522001,21.4737861,-157.8694722,NA +16284200,21.44816667,-157.856611,NA +16242500,21.29322222,-157.8127222,NA +16618000,20.97869444,-156.5545,NA +205632156322001,20.94222222,-156.5388889,NA +205256156321601,20.88222222,-156.5377778,NA +205121156321501,20.85583333,-156.5375,NA +205126156315501,20.85722222,-156.5319444,NA +205427156313101,20.9075,-156.5252778,NA +205120156312801,20.85555556,-156.5244444,NA +205433156311501,20.90638889,-156.5213889,NA +205125156304801,20.856875,-156.513325,NA +16555000,20.85848056,-156.196925,NA +205224156113101,20.87014722,-156.18915,NA +16527000,20.831325,-156.1872889,NA +205233156111901,20.87264722,-156.1858167,NA +16520000,20.82,-156.1408333,NA +205008156082901,20.8323361,-156.138536,NA +16516000,20.81472222,-156.1338889,NA +205036156080501,20.84026944,-156.1327417,NA +204952156073501,20.82814167,-156.1237333,NA +204959156072201,20.83008056,-156.1198444,NA +16508000,20.8068611,-156.1142222,NA +204902156063101,20.81415278,-156.1059889,NA +16704000,19.71213889,-155.15075,NA +16713000,19.72554167,-155.0916694,NA +13213100,43.8761111,-116.9825,NORTH AMERICAN DESERTS +13269000,44.24555556,-116.9808333,NORTH AMERICAN DESERTS +13213000,43.78166667,-116.9727778,NORTH AMERICAN DESERTS +13343000,46.43416667,-116.9677778,NORTH AMERICAN DESERTS +13345000,46.91527778,-116.951111,NORTH AMERICAN DESERTS +13251000,44.0422222,-116.9252778,NORTH AMERICAN DESERTS +13317660,46.00305556,-116.9169444,NORTHWESTERN FORESTED MOUNTAINS +13176400,42.26136944,-116.8684417,NORTH AMERICAN DESERTS +13342500,46.4483333,-116.8275,NORTH AMERICAN DESERTS +13342450,46.42638889,-116.806111,NORTH AMERICAN DESERTS +13266000,44.27,-116.7722222,NORTH AMERICAN DESERTS +13211210,43.67776944,-116.7054944,NORTH AMERICAN DESERTS +13211205,43.67735278,-116.7011306,NORTH AMERICAN DESERTS +13211000,43.68888889,-116.6863889,NORTH AMERICAN DESERTS +13210050,43.6848841,-116.5737442,NORTH AMERICAN DESERTS +12322000,48.99638889,-116.5075,NORTHWESTERN FORESTED MOUNTAINS +12318500,48.905,-116.4019444,NORTHWESTERN FORESTED MOUNTAINS +13341050,46.50027778,-116.3925,NORTHWESTERN FORESTED MOUNTAINS +13172500,43.25481389,-116.3906389,NORTH AMERICAN DESERTS +12314000,48.79382868,-116.381871,NORTHWESTERN FORESTED MOUNTAINS +12310100,48.70527778,-116.3697222,NORTHWESTERN FORESTED MOUNTAINS +13316500,45.41305556,-116.3252778,NORTHWESTERN FORESTED MOUNTAINS +13317000,45.75027778,-116.3238889,NORTHWESTERN FORESTED MOUNTAINS +13341000,46.5043462,-116.3204192,NORTHWESTERN FORESTED MOUNTAINS +12309500,48.69805556,-116.3125,NORTHWESTERN FORESTED MOUNTAINS +13206000,43.66055556,-116.2791667,NORTH AMERICAN DESERTS +13340000,46.4783333,-116.2575,NORTHWESTERN FORESTED MOUNTAINS +12413445,47.5081222,-116.2418,NORTHWESTERN FORESTED MOUNTAINS +12413470,47.5513111,-116.2362917,NORTHWESTERN FORESTED MOUNTAINS +12413370,47.47666667,-116.2216667,NORTHWESTERN FORESTED MOUNTAINS +12414500,47.2744444,-116.1888889,NORTHWESTERN FORESTED MOUNTAINS +12413360,47.44027778,-116.1752778,NORTHWESTERN FORESTED MOUNTAINS +12413250,47.54527778,-116.1341667,NORTHWESTERN FORESTED MOUNTAINS +13203510,43.539613,-116.0945556,NORTH AMERICAN DESERTS +12391950,48.08805556,-116.0727778,NORTHWESTERN FORESTED MOUNTAINS +13338500,46.08638889,-115.9766667,NORTHWESTERN FORESTED MOUNTAINS +13337099,46.13005278,-115.9481306,NORTHWESTERN FORESTED MOUNTAINS +13337095,46.0470361,-115.866161,NORTH AMERICAN DESERTS +13192200,43.55055556,-115.7219444,NORTHWESTERN FORESTED MOUNTAINS +13168500,42.7711111,-115.7202778,NORTH AMERICAN DESERTS +13340600,46.84055556,-115.621111,NORTHWESTERN FORESTED MOUNTAINS +13190565,43.40305556,-115.5602778,NORTHWESTERN FORESTED MOUNTAINS +13190505,43.34055556,-115.4783333,NORTHWESTERN FORESTED MOUNTAINS +13310850,44.88952778,-115.3602222,NORTHWESTERN FORESTED MOUNTAINS +13311450,44.9363611,-115.3372222,NORTHWESTERN FORESTED MOUNTAINS +13311250,44.93477778,-115.3366944,NORTHWESTERN FORESTED MOUNTAINS +13311000,44.9057222,-115.3295,NORTHWESTERN FORESTED MOUNTAINS +13310800,44.90225,-115.3256667,NORTHWESTERN FORESTED MOUNTAINS +13154500,43.0022222,-115.2025,NORTH AMERICAN DESERTS +13108150,42.69638889,-114.8552778,NORTH AMERICAN DESERTS +13152500,42.88638889,-114.8030556,NORTH AMERICAN DESERTS +13296000,44.27888889,-114.7338889,NORTHWESTERN FORESTED MOUNTAINS +13094000,42.6658333,-114.7122222,NORTH AMERICAN DESERTS +13092747,42.5625,-114.4947222,NORTH AMERICAN DESERTS +13090999,42.6147222,-114.4683333,NORTH AMERICAN DESERTS +13307000,45.3225,-114.44,NORTHWESTERN FORESTED MOUNTAINS +13090000,42.5908333,-114.3602778,NORTH AMERICAN DESERTS +13140900,43.32277778,-114.3241667,NORTH AMERICAN DESERTS +13140800,43.32916667,-114.3191667,NORTH AMERICAN DESERTS +13150200,43.3122222,-114.1827778,NORTH AMERICAN DESERTS +13150430,43.3233611,-114.10835,NORTH AMERICAN DESERTS +13302005,44.69166667,-114.0469444,NORTHWESTERN FORESTED MOUNTAINS +13120500,43.9983333,-114.021111,NORTHWESTERN FORESTED MOUNTAINS +13305000,44.94,-113.6391667,NORTHWESTERN FORESTED MOUNTAINS +13081500,42.67277778,-113.5002778,NORTH AMERICAN DESERTS +13069500,43.12527778,-112.5188889,NORTH AMERICAN DESERTS +13068500,43.13055556,-112.4766667,NORTH AMERICAN DESERTS +13075500,42.87166667,-112.4680556,NORTH AMERICAN DESERTS +13075000,42.63,-112.2255556,NORTH AMERICAN DESERTS +13060000,43.41305556,-112.135,NORTH AMERICAN DESERTS +13073000,42.6247222,-112.0880556,NORTH AMERICAN DESERTS +13057000,43.75277778,-111.9791667,NORTH AMERICAN DESERTS +13056500,43.8258333,-111.905,NORTH AMERICAN DESERTS +13038500,43.73527778,-111.8780556,NORTH AMERICAN DESERTS +13055000,43.9272222,-111.6138889,NORTH AMERICAN DESERTS +13032500,43.3508333,-111.2188889,NORTHWESTERN FORESTED MOUNTAINS +13139510,43.5172222,-114.3216667,NORTH AMERICAN DESERTS +05586300,39.63275,-90.6076667,EASTERN TEMPERATE FORESTS +05446500,41.5561111,-90.1852778,EASTERN TEMPERATE FORESTS +05447500,41.4889333,-90.1580083,EASTERN TEMPERATE FORESTS +05420400,41.8944725,-90.156793,EASTERN TEMPERATE FORESTS +05595000,38.3197222,-89.8883333,EASTERN TEMPERATE FORESTS +05576100,39.71553889,-89.7024444,EASTERN TEMPERATE FORESTS +05576195,39.659075,-89.6589361,EASTERN TEMPERATE FORESTS +05599490,37.7583333,-89.3277778,EASTERN TEMPERATE FORESTS +05440700,42.12218889,-89.2553639,EASTERN TEMPERATE FORESTS +03612600,37.17921867,-89.058404,EASTERN TEMPERATE FORESTS +05579630,40.4583333,-88.8775,EASTERN TEMPERATE FORESTS +05578250,40.2358611,-88.8095556,EASTERN TEMPERATE FORESTS +05543010,41.29988889,-88.6141944,EASTERN TEMPERATE FORESTS +03378900,38.77310238,-88.4972706,EASTERN TEMPERATE FORESTS +411955088280601,41.33305556,-88.4669444,EASTERN TEMPERATE FORESTS +05551580,41.64283889,-88.4433806,EASTERN TEMPERATE FORESTS +03343805,39.46527778,-88.33638889,EASTERN TEMPERATE FORESTS +05550001,42.16194444,-88.29388889,EASTERN TEMPERATE FORESTS +412320088154101,41.38877778,-88.2615833,EASTERN TEMPERATE FORESTS +05549500,42.3100222,-88.2514745,EASTERN TEMPERATE FORESTS +05539670,41.41444444,-88.2144444,EASTERN TEMPERATE FORESTS +05527500,41.3463333,-88.1867222,EASTERN TEMPERATE FORESTS +03381495,38.0922222,-88.1561111,EASTERN TEMPERATE FORESTS +05527000,41.2461111,-88.1275,EASTERN TEMPERATE FORESTS +05538020,41.5,-88.1069444,EASTERN TEMPERATE FORESTS +05538010,41.505,-88.0997222,EASTERN TEMPERATE FORESTS +05537980,41.5364722,-88.0836944,EASTERN TEMPERATE FORESTS +05536995,41.64,-88.0599722,EASTERN TEMPERATE FORESTS +05536137,41.83719444,-87.6854167,EASTERN TEMPERATE FORESTS +05536368,41.65281186,-87.670326,EASTERN TEMPERATE FORESTS +03346500,38.72380556,-87.6643611,EASTERN TEMPERATE FORESTS +03339000,40.1010833,-87.5976111,EASTERN TEMPERATE FORESTS +03378500,38.130879,-87.941419,EASTERN TEMPERATE FORESTS +03374100,38.4897695,-87.55002269,EASTERN TEMPERATE FORESTS +05518000,41.1828134,-87.3403096,EASTERN TEMPERATE FORESTS +05524500,40.87059306,-87.3066912,EASTERN TEMPERATE FORESTS +03373980,38.52838237,-87.2539017,EASTERN TEMPERATE FORESTS +04095090,41.62225939,-87.1758685,EASTERN TEMPERATE FORESTS +03340900,39.71116667,-87.0712778,EASTERN TEMPERATE FORESTS +05517500,41.2200392,-86.968356,EASTERN TEMPERATE FORESTS +03359000,39.48754419,-86.9247337,EASTERN TEMPERATE FORESTS +03357330,39.8162678,-86.7539873,EASTERN TEMPERATE FORESTS +03374500,38.44199969,-86.7141587,EASTERN TEMPERATE FORESTS +05515500,41.38963889,-86.7061667,EASTERN TEMPERATE FORESTS +05517000,41.3028196,-86.6205695,EASTERN TEMPERATE FORESTS +03372500,39.00494444,-86.5091944,EASTERN TEMPERATE FORESTS +05516665,41.27138889,-86.4666667,EASTERN TEMPERATE FORESTS +03354000,39.4975477,-86.4005495,EASTERN TEMPERATE FORESTS +03353670,39.8655,-86.3947778,EASTERN TEMPERATE FORESTS +03353420,39.8725833,-86.3615278,EASTERN TEMPERATE FORESTS +03353415,39.88577778,-86.3554444,EASTERN TEMPERATE FORESTS +03353200,39.94642897,-86.2602702,EASTERN TEMPERATE FORESTS +03353611,39.7144889,-86.2005434,EASTERN TEMPERATE FORESTS +033531908,39.7247222,-86.1677778,EASTERN TEMPERATE FORESTS +03353633,39.67416667,-86.1155556,EASTERN TEMPERATE FORESTS +03327000,40.7233754,-85.9574891,EASTERN TEMPERATE FORESTS +03324500,40.81171069,-85.68387,EASTERN TEMPERATE FORESTS +03323500,40.85325,-85.4897778,EASTERN TEMPERATE FORESTS +03323587,41.02138889,-85.2555556,EASTERN TEMPERATE FORESTS +03276000,39.43393969,-85.0032932,EASTERN TEMPERATE FORESTS +03275500,39.80671459,-84.907183,EASTERN TEMPERATE FORESTS +04183038,41.1830833,-84.8696944,EASTERN TEMPERATE FORESTS +06610505,41.18916667,-95.8625,GREAT PLAINS +06808500,40.87327778,-95.5814444,GREAT PLAINS +06817000,40.7432222,-95.0145278,GREAT PLAINS +05482300,42.35455556,-94.9910278,GREAT PLAINS +05482500,41.9878611,-94.3770833,GREAT PLAINS +05484000,41.59041667,-94.1511667,GREAT PLAINS +05484500,41.53402778,-93.9497778,GREAT PLAINS +05481000,42.4319722,-93.8059444,GREAT PLAINS +05482000,41.61194444,-93.6197222,GREAT PLAINS +05487520,41.48938889,-93.2782222,GREAT PLAINS +05451210,42.31530556,-93.1521944,GREAT PLAINS +05488110,41.36416667,-92.9754722,GREAT PLAINS +05458300,42.7372222,-92.4700917,GREAT PLAINS +05489500,41.0108472,-92.4112917,GREAT PLAINS +05464475,41.98941597,-91.7595985,GREAT PLAINS +05455100,41.60640556,-91.6157222,GREAT PLAINS +05411950,42.90915055,-91.4670855,EASTERN TEMPERATE FORESTS +05412100,42.93026244,-91.38430399,EASTERN TEMPERATE FORESTS +05474500,40.39365535,-91.374318,EASTERN TEMPERATE FORESTS +05412500,42.7399884,-91.261799,EASTERN TEMPERATE FORESTS +05465500,41.1780861,-91.1820917,EASTERN TEMPERATE FORESTS +05418110,42.4703333,-91.1245556,GREAT PLAINS +05418720,42.1638611,-90.3350833,EASTERN TEMPERATE FORESTS +05420460,41.82725278,-90.1904056,GREAT PLAINS +07137500,38.0275129,-102.0115706,GREAT PLAINS +07138070,37.9697442,-101.1287794,GREAT PLAINS +06861000,38.80778889,-100.0222667,GREAT PLAINS +07141300,38.35306787,-98.7642519,GREAT PLAINS +07142575,38.09363056,-98.5461389,GREAT PLAINS +06864500,38.72667589,-98.2336684,GREAT PLAINS +06853500,39.9936611,-97.9318583,GREAT PLAINS +07143672,38.02853056,-97.5405417,GREAT PLAINS +375350097262800,37.89713889,-97.4411111,GREAT PLAINS +07144100,37.88306739,-97.4244864,GREAT PLAINS +07179300,38.75129167,-96.6496611,GREAT PLAINS +06879650,39.102075,-96.5946889,GREAT PLAINS +07182250,38.3975139,-96.356112,GREAT PLAINS +07179730,38.46695699,-96.2505533,GREAT PLAINS +07182280,38.3761263,-96.0677706,GREAT PLAINS +06889160,39.4631449,-95.9505944,GREAT PLAINS +381421095451600,38.23926944,-95.7544861,GREAT PLAINS +06891260,38.89194444,-95.5944444,GREAT PLAINS +07183000,37.92225778,-95.4277596,GREAT PLAINS +385548095192701,38.93000274,-95.3244185,GREAT PLAINS +06914950,38.75334168,-94.977188,GREAT PLAINS +06892360,38.95666667,-94.9736111,GREAT PLAINS +06892495,38.97805556,-94.9227778,GREAT PLAINS +06915000,38.6563999,-94.8963521,GREAT PLAINS +06892518,39.0461111,-94.7894444,GREAT PLAINS +385446094430700,38.91277778,-94.7186111,GREAT PLAINS +385520094420000,38.9272222,-94.6969444,GREAT PLAINS +06893300,38.9405621,-94.6713469,GREAT PLAINS +06893350,38.9061111,-94.64,GREAT PLAINS +385608094380300,38.93555556,-94.6341667,GREAT PLAINS +06893390,38.9383333,-94.6077778,GREAT PLAINS +03438220,37.02172174,-88.2230852,EASTERN TEMPERATE FORESTS +03437400,36.80199065,-87.51362119,EASTERN TEMPERATE FORESTS +03321500,37.8583774,-87.4097294,EASTERN TEMPERATE FORESTS +03303205,37.86839594,-86.3877537,EASTERN TEMPERATE FORESTS +03311500,37.20699194,-86.2610868,EASTERN TEMPERATE FORESTS +03311505,37.20323076,-86.2595925,EASTERN TEMPERATE FORESTS +03313000,36.89504634,-86.1338731,EASTERN TEMPERATE FORESTS +03309000,37.18004845,-86.1124757,EASTERN TEMPERATE FORESTS +03302060,38.0011831,-85.9421857,EASTERN TEMPERATE FORESTS +03294570,38.07812588,-85.8899635,EASTERN TEMPERATE FORESTS +03302030,38.05423677,-85.8716296,EASTERN TEMPERATE FORESTS +03294550,38.1775699,-85.8669086,EASTERN TEMPERATE FORESTS +03302050,38.04693096,-85.8572681,EASTERN TEMPERATE FORESTS +03302000,38.1197916,-85.7957955,EASTERN TEMPERATE FORESTS +03292555,38.23923766,-85.7377399,EASTERN TEMPERATE FORESTS +03292550,38.2345153,-85.7305175,EASTERN TEMPERATE FORESTS +03293510,38.26590398,-85.7207955,EASTERN TEMPERATE FORESTS +03293532,38.2603486,-85.7182954,EASTERN TEMPERATE FORESTS +03293500,38.25034895,-85.7166287,EASTERN TEMPERATE FORESTS +03292500,38.2114592,-85.7024613,EASTERN TEMPERATE FORESTS +03293530,38.27645917,-85.693573,EASTERN TEMPERATE FORESTS +03301940,38.1503466,-85.6935714,EASTERN TEMPERATE FORESTS +03293000,38.237293,-85.6646834,EASTERN TEMPERATE FORESTS +03298300,38.08756629,-85.642458,EASTERN TEMPERATE FORESTS +03297800,37.9911111,-85.6411111,EASTERN TEMPERATE FORESTS +03292900,38.2400708,-85.6344054,EASTERN TEMPERATE FORESTS +03292475,38.3034027,-85.62801689,EASTERN TEMPERATE FORESTS +03292480,38.3127635,-85.6261558,EASTERN TEMPERATE FORESTS +03298250,38.0792321,-85.6160683,EASTERN TEMPERATE FORESTS +03301900,38.1756242,-85.615237,EASTERN TEMPERATE FORESTS +03292474,38.2759036,-85.606072,EASTERN TEMPERATE FORESTS +0329247350,38.32812414,-85.5938499,EASTERN TEMPERATE FORESTS +03292470,38.36117864,-85.57459969,EASTERN TEMPERATE FORESTS +03298135,38.19479109,-85.557181,EASTERN TEMPERATE FORESTS +03298200,38.08534216,-85.5549556,EASTERN TEMPERATE FORESTS +03298150,38.16006729,-85.5421797,EASTERN TEMPERATE FORESTS +03306500,37.2536713,-85.5030215,EASTERN TEMPERATE FORESTS +03297900,38.28534776,-85.4674592,EASTERN TEMPERATE FORESTS +03298000,38.18840166,-85.460235,EASTERN TEMPERATE FORESTS +03307000,37.12547797,-85.4040748,EASTERN TEMPERATE FORESTS +03414100,36.7867288,-85.3652406,EASTERN TEMPERATE FORESTS +03306000,37.2403413,-85.3471848,EASTERN TEMPERATE FORESTS +03290500,38.43895654,-84.9632844,EASTERN TEMPERATE FORESTS +03287500,38.2017388,-84.8816171,EASTERN TEMPERATE FORESTS +03277200,38.7753415,-84.8391146,EASTERN TEMPERATE FORESTS +03289500,38.26868254,-84.8146714,EASTERN TEMPERATE FORESTS +03262001,39.03,-84.8041667,EASTERN TEMPERATE FORESTS +03277130,38.8450635,-84.72077969,EASTERN TEMPERATE FORESTS +03277075,38.99416667,-84.7161111,EASTERN TEMPERATE FORESTS +03260100,39.0797222,-84.6852778,EASTERN TEMPERATE FORESTS +03289000,38.0431322,-84.6263318,EASTERN TEMPERATE FORESTS +03260050,39.0605833,-84.6199167,EASTERN TEMPERATE FORESTS +03289200,38.103687,-84.5879977,EASTERN TEMPERATE FORESTS +03410590,36.70277778,-84.5630556,EASTERN TEMPERATE FORESTS +03260015,39.0851154,-84.5581381,EASTERN TEMPERATE FORESTS +03410600,36.7256326,-84.5438283,EASTERN TEMPERATE FORESTS +03254550,38.98055556,-84.5416667,EASTERN TEMPERATE FORESTS +03254480,38.84444444,-84.5322222,EASTERN TEMPERATE FORESTS +03288180,38.09166667,-84.50138889,EASTERN TEMPERATE FORESTS +03254695,39.05242186,-84.48810859,EASTERN TEMPERATE FORESTS +03254693,39.05020525,-84.4850474,EASTERN TEMPERATE FORESTS +03238140,39.0974212,-84.48360879,EASTERN TEMPERATE FORESTS +03254520,38.9203417,-84.44799549,EASTERN TEMPERATE FORESTS +03238772,38.98666667,-84.3652778,EASTERN TEMPERATE FORESTS +03238745,38.9514529,-84.3382712,EASTERN TEMPERATE FORESTS +03250322,38.24730198,-83.5893567,EASTERN TEMPERATE FORESTS +03249500,38.11535945,-83.5432431,EASTERN TEMPERATE FORESTS +03400800,36.75230974,-83.2574012,EASTERN TEMPERATE FORESTS +03277450,37.2333194,-83.0337562,EASTERN TEMPERATE FORESTS +08017044,30.23714987,-93.2473764,EASTERN TEMPERATE FORESTS +08012150,30.19,-92.5905556,GREAT PLAINS +295447091191500,29.91305556,-91.3208333,EASTERN TEMPERATE FORESTS +295011091184300,29.8365,-91.3119167,EASTERN TEMPERATE FORESTS +294736091164200,29.79333333,-91.2783333,EASTERN TEMPERATE FORESTS +07374000,30.44566667,-91.1915556,EASTERN TEMPERATE FORESTS +073814675,29.66833333,-91.0997222,EASTERN TEMPERATE FORESTS +07381328,29.38522075,-90.729812,EASTERN TEMPERATE FORESTS +07381324,29.38299869,-90.7153674,EASTERN TEMPERATE FORESTS +07381331,29.59805556,-90.71,EASTERN TEMPERATE FORESTS +07381355,29.62733333,-90.5576667,EASTERN TEMPERATE FORESTS +07381350,29.64521343,-90.544808,EASTERN TEMPERATE FORESTS +07381150,29.64705556,-90.5367778,EASTERN TEMPERATE FORESTS +295501090190400,29.91694444,-90.3177778,EASTERN TEMPERATE FORESTS +300034090055300,30.00944444,-90.0980556,EASTERN TEMPERATE FORESTS +295906090054200,29.985,-90.095,EASTERN TEMPERATE FORESTS +295827090052800,29.97416667,-90.0911111,EASTERN TEMPERATE FORESTS +300009090051600,30.0025,-90.0877778,EASTERN TEMPERATE FORESTS +300026090050800,30.0072222,-90.0855556,EASTERN TEMPERATE FORESTS +300127090045800,30.02416667,-90.0827778,EASTERN TEMPERATE FORESTS +300128090045800,30.02444444,-90.0827778,EASTERN TEMPERATE FORESTS +292859090004000,29.48305556,-90.0111111,EASTERN TEMPERATE FORESTS +073802511,29.4742722,-90.0066056,NA +073802516,29.27283333,-89.9468056,NA +073745253,29.78416667,-89.9375,EASTERN TEMPERATE FORESTS +295124089542100,29.85355556,-89.9076944,EASTERN TEMPERATE FORESTS +02489800,30.73740833,-89.8331806,EASTERN TEMPERATE FORESTS +01054200,44.39055556,-70.9797222,NORTHERN FORESTS +01064140,43.7245972,-70.3029333,EASTERN TEMPERATE FORESTS +01055100,44.5025,-70.2244444,EASTERN TEMPERATE FORESTS +01059010,44.06535175,-70.2089428,EASTERN TEMPERATE FORESTS +01010000,46.70055556,-69.7155556,NORTHERN FORESTS +01049265,44.4722222,-69.68388889,EASTERN TEMPERATE FORESTS +01038000,44.22277778,-69.59388889,EASTERN TEMPERATE FORESTS +01031500,45.175,-69.3147222,EASTERN TEMPERATE FORESTS +01011000,47.0697222,-69.0794444,NORTHERN FORESTS +01037380,44.32916667,-69.0608333,EASTERN TEMPERATE FORESTS +01036390,44.82666667,-68.6966667,EASTERN TEMPERATE FORESTS +01022500,44.60805556,-67.93527778,EASTERN TEMPERATE FORESTS +01015010,47.1099333,-67.8884806,EASTERN TEMPERATE FORESTS +01018035,46.1811111,-67.80388889,EASTERN TEMPERATE FORESTS +01021050,45.17,-67.2966667,EASTERN TEMPERATE FORESTS +01021200,44.90138889,-67.2475,EASTERN TEMPERATE FORESTS +03076500,39.6536111,-79.4083056,EASTERN TEMPERATE FORESTS +01597500,39.50275,-79.1239722,EASTERN TEMPERATE FORESTS +01596500,39.57005556,-79.1019444,EASTERN TEMPERATE FORESTS +01598500,39.4789722,-79.0637778,EASTERN TEMPERATE FORESTS +01636845,39.34125,-77.6340833,EASTERN TEMPERATE FORESTS +01636846,39.3376111,-77.6264722,EASTERN TEMPERATE FORESTS +01638500,39.2735833,-77.5431111,EASTERN TEMPERATE FORESTS +01640975,39.6300833,-77.45527778,EASTERN TEMPERATE FORESTS +01642198,39.43602778,-77.4405833,EASTERN TEMPERATE FORESTS +01642199,39.42441667,-77.42977778,EASTERN TEMPERATE FORESTS +01591610,39.19219444,-77.00438889,EASTERN TEMPERATE FORESTS +01649190,39.0333611,-76.96402778,EASTERN TEMPERATE FORESTS +01651730,38.91630556,-76.9343056,EASTERN TEMPERATE FORESTS +01649500,38.96025,-76.9259722,EASTERN TEMPERATE FORESTS +01589290,39.3615833,-76.76175,EASTERN TEMPERATE FORESTS +01581920,39.61905556,-76.6903611,EASTERN TEMPERATE FORESTS +01589485,39.2841111,-76.60363889,EASTERN TEMPERATE FORESTS +01585219,39.3179722,-76.55513889,EASTERN TEMPERATE FORESTS +01585225,39.33669444,-76.5406111,EASTERN TEMPERATE FORESTS +01585230,39.3300833,-76.53488889,EASTERN TEMPERATE FORESTS +01581752,39.49627778,-76.3474444,EASTERN TEMPERATE FORESTS +01585075,39.40852778,-76.34263889,EASTERN TEMPERATE FORESTS +01579550,39.62605556,-76.15775,EASTERN TEMPERATE FORESTS +01490120,38.50166667,-76.0941667,EASTERN TEMPERATE FORESTS +01490200,38.3184722,-76.0885556,EASTERN TEMPERATE FORESTS +01490140,38.44527778,-76.08388889,EASTERN TEMPERATE FORESTS +01493112,39.25705556,-75.94013889,EASTERN TEMPERATE FORESTS +01491000,38.99719444,-75.7858056,EASTERN TEMPERATE FORESTS +01168250,42.66669444,-73.0301667,NORTHERN FORESTS +01170100,42.70341695,-72.67064738,NORTHERN FORESTS +01095375,42.37286967,-71.8281279,EASTERN TEMPERATE FORESTS +01095220,42.41092507,-71.7911829,EASTERN TEMPERATE FORESTS +01095434,42.36453675,-71.775349,EASTERN TEMPERATE FORESTS +01111230,42.0228757,-71.5722859,EASTERN TEMPERATE FORESTS +01104370,42.38555556,-71.2894444,EASTERN TEMPERATE FORESTS +01104453,42.37138889,-71.27527778,EASTERN TEMPERATE FORESTS +01104430,42.3981512,-71.2733903,EASTERN TEMPERATE FORESTS +01104460,42.368985,-71.2706123,EASTERN TEMPERATE FORESTS +01104455,42.37259606,-71.27033448,EASTERN TEMPERATE FORESTS +01104405,42.436484,-71.2695014,EASTERN TEMPERATE FORESTS +01104475,42.3545408,-71.2681121,EASTERN TEMPERATE FORESTS +01104480,42.3556519,-71.2650565,EASTERN TEMPERATE FORESTS +01104410,42.43648406,-71.2642235,EASTERN TEMPERATE FORESTS +01104415,42.43592855,-71.2600567,EASTERN TEMPERATE FORESTS +01104420,42.4198177,-71.2575565,EASTERN TEMPERATE FORESTS +415716070031801,41.9545833,-70.0549722,EASTERN TEMPERATE FORESTS +01173000,42.39120167,-72.0650774,EASTERN TEMPERATE FORESTS +04040000,46.7207742,-89.207086,NORTHERN FORESTS +04001000,47.9212792,-89.1459197,NORTHERN FORESTS +04041500,46.7258333,-88.6624167,NORTHERN FORESTS +04043016,47.0840943,-88.5506792,NORTHERN FORESTS +04043097,46.7346552,-88.4431868,NORTHERN FORESTS +04043140,46.75104286,-88.3617967,NORTHERN FORESTS +04043126,46.72104347,-88.3301306,NORTHERN FORESTS +04043150,46.80409698,-88.3170724,NORTHERN FORESTS +04043238,46.78214818,-87.8776299,NORTHERN FORESTS +04057801,46.49326948,-87.8679127,NORTHERN FORESTS +04043244,46.7857589,-87.8523522,NORTHERN FORESTS +04043275,46.7135391,-87.8406871,NORTHERN FORESTS +04059000,45.90891667,-87.2135278,NORTHERN FORESTS +04059500,45.7549674,-87.2020793,NORTHERN FORESTS +04044755,46.48772616,-86.5407188,NORTHERN FORESTS +04108660,42.65085976,-86.106703,EASTERN TEMPERATE FORESTS +04119400,43.0241884,-86.0264354,EASTERN TEMPERATE FORESTS +04126802,44.9033291,-85.9623135,EASTERN TEMPERATE FORESTS +04125550,44.25944997,-85.94174209,NORTHERN FORESTS +04124200,44.3630596,-85.820905,NORTHERN FORESTS +04107850,42.48225575,-85.798355,EASTERN TEMPERATE FORESTS +04125460,44.19334009,-85.7697863,NORTHERN FORESTS +04124000,44.43639239,-85.6986792,NORTHERN FORESTS +04121970,43.43474558,-85.6653239,NORTHERN FORESTS +04121680,43.485857,-85.63060189,NORTHERN FORESTS +04127499,44.7652789,-85.6211873,EASTERN TEMPERATE FORESTS +04121944,43.43085818,-85.5955989,NORTHERN FORESTS +04121660,43.61308,-85.4778209,NORTHERN FORESTS +04121650,43.693634,-85.4675442,NORTHERN FORESTS +04123500,44.69306827,-84.8472582,NORTHERN FORESTS +04135687,44.5408503,-84.5508559,NORTHERN FORESTS +04135700,44.61473849,-84.455575,NORTHERN FORESTS +04135800,44.71668157,-84.4197413,NORTHERN FORESTS +04136000,44.6769593,-84.2925146,NORTHERN FORESTS +04136500,44.66001385,-84.1311167,NORTHERN FORESTS +04156500,43.52474877,-84.1252599,EASTERN TEMPERATE FORESTS +04142000,44.0725203,-84.0199939,NORTHERN FORESTS +04144032,42.88169789,-83.9846833,EASTERN TEMPERATE FORESTS +04157005,43.4219699,-83.951918,EASTERN TEMPERATE FORESTS +041482663,42.9419733,-83.8460698,EASTERN TEMPERATE FORESTS +04136900,44.61279117,-83.83776619,NORTHERN FORESTS +04137005,44.56084749,-83.802764,NORTHERN FORESTS +04174500,42.28698238,-83.7338296,EASTERN TEMPERATE FORESTS +04137020,44.46334886,-83.7213714,NORTHERN FORESTS +04174518,42.2647606,-83.688273,EASTERN TEMPERATE FORESTS +04137025,44.4541823,-83.6744254,NORTHERN FORESTS +04143830,42.7991949,-83.6477262,EASTERN TEMPERATE FORESTS +04170000,42.57892089,-83.62660809,EASTERN TEMPERATE FORESTS +04137030,44.47279328,-83.57108839,NORTHERN FORESTS +04176500,41.9606008,-83.53104619,EASTERN TEMPERATE FORESTS +04166750,42.37170308,-83.4454903,EASTERN TEMPERATE FORESTS +04137500,44.43640447,-83.4338609,NORTHERN FORESTS +04167625,42.28448237,-83.427434,EASTERN TEMPERATE FORESTS +04160900,42.6603092,-83.3902164,EASTERN TEMPERATE FORESTS +04160800,42.7200307,-83.3535509,EASTERN TEMPERATE FORESTS +04166315,42.44670217,-83.3365985,EASTERN TEMPERATE FORESTS +04166100,42.4475356,-83.29743079,EASTERN TEMPERATE FORESTS +04166470,42.3942031,-83.2782632,EASTERN TEMPERATE FORESTS +04166500,42.3730923,-83.2546513,EASTERN TEMPERATE FORESTS +04175120,42.06416667,-83.25388889,EASTERN TEMPERATE FORESTS +04168400,42.30837099,-83.2527063,EASTERN TEMPERATE FORESTS +04167150,42.3305929,-83.2479841,EASTERN TEMPERATE FORESTS +04161000,42.63336646,-83.2243782,EASTERN TEMPERATE FORESTS +04168530,42.30087127,-83.19937079,EASTERN TEMPERATE FORESTS +04161540,42.68836558,-83.1429886,EASTERN TEMPERATE FORESTS +04161810,42.6716992,-83.0963198,EASTERN TEMPERATE FORESTS +04161820,42.6144781,-83.02659329,EASTERN TEMPERATE FORESTS +04163030,42.53781308,-83.0057566,EASTERN TEMPERATE FORESTS +04164000,42.57781225,-82.951589,EASTERN TEMPERATE FORESTS +04164980,42.6428109,-82.9332572,EASTERN TEMPERATE FORESTS +04165500,42.5958674,-82.90881,EASTERN TEMPERATE FORESTS +04159492,43.15086,-82.6246474,EASTERN TEMPERATE FORESTS +04160398,42.8586422,-82.5379715,EASTERN TEMPERATE FORESTS +04160625,42.76836606,-82.5121348,EASTERN TEMPERATE FORESTS +04101500,41.8292138,-86.2597325,EASTERN TEMPERATE FORESTS +05085900,48.1741475,-96.9989596,GREAT PLAINS +05062130,47.0926944,-96.8170556,GREAT PLAINS +05079000,47.77552716,-96.6095101,GREAT PLAINS +05112000,48.98164829,-96.4630804,NORTHERN FORESTS +05062500,47.26555556,-96.2475,GREAT PLAINS +05075690,48.42666667,-95.97,GREAT PLAINS +05075720,48.32416667,-95.8519444,GREAT PLAINS +05314518,44.86162495,-95.4275162,GREAT PLAINS +05314510,44.83995979,-95.2391751,GREAT PLAINS +05200170,47.32555556,-95.225,NORTHERN FORESTS +05276005,45.3771864,-94.7836175,EASTERN TEMPERATE FORESTS +05137500,48.83027778,-94.705,NORTHERN FORESTS +05267000,45.8260765,-94.3552782,EASTERN TEMPERATE FORESTS +05326189,44.46524278,-94.1502491,GREAT PLAINS +05133500,48.6344009,-93.913228,NORTHERN FORESTS +05320270,43.9966325,-93.9085628,GREAT PLAINS +05284305,46.2519038,-93.8274771,NORTHERN FORESTS +05284310,46.2535703,-93.8213656,NORTHERN FORESTS +05330000,44.69301845,-93.641902,EASTERN TEMPERATE FORESTS +05131500,48.39577636,-93.5493266,NORTHERN FORESTS +05288705,45.04996508,-93.3102274,EASTERN TEMPERATE FORESTS +05288500,45.12880126,-93.2992726,EASTERN TEMPERATE FORESTS +05288550,45.1032986,-93.2771716,EASTERN TEMPERATE FORESTS +05289800,44.91552097,-93.2127224,EASTERN TEMPERATE FORESTS +05288950,44.91579879,-93.1999441,EASTERN TEMPERATE FORESTS +05330920,44.8702432,-93.1924432,EASTERN TEMPERATE FORESTS +05331000,44.9444444,-93.0881111,EASTERN TEMPERATE FORESTS +05345000,44.66663318,-93.0549358,GREAT PLAINS +05331005,44.93107695,-93.0479946,EASTERN TEMPERATE FORESTS +05331560,44.8038555,-93.0121579,EASTERN TEMPERATE FORESTS +05331580,44.7458333,-92.8477778,GREAT PLAINS +05341770,44.8999674,-92.7793704,GREAT PLAINS +05355250,44.56530556,-92.5424444,EASTERN TEMPERATE FORESTS +04024000,46.7032765,-92.4188018,NORTHERN FORESTS +05126000,47.69852609,-91.868212,NORTHERN FORESTS +05124480,47.9226749,-91.535126,NORTHERN FORESTS +04014500,47.33741728,-91.2007189,NORTHERN FORESTS +04010510,47.9634982,-89.6834233,NORTHERN FORESTS +05344980,44.60996745,-92.6101938,EASTERN TEMPERATE FORESTS +07288847,33.03151289,-90.9981598,EASTERN TEMPERATE FORESTS +0728875070,33.4011111,-90.8919444,EASTERN TEMPERATE FORESTS +07288650,33.39666667,-90.8477778,EASTERN TEMPERATE FORESTS +07288800,32.4873633,-90.8173251,EASTERN TEMPERATE FORESTS +07288280,33.8325,-90.67,EASTERN TEMPERATE FORESTS +07288000,34.19733086,-90.575099,EASTERN TEMPERATE FORESTS +07288500,33.5473397,-90.5431441,EASTERN TEMPERATE FORESTS +335054090230200,33.84855556,-90.3841111,EASTERN TEMPERATE FORESTS +07287120,33.39678846,-90.2720286,EASTERN TEMPERATE FORESTS +07279800,34.4389962,-90.2581494,EASTERN TEMPERATE FORESTS +07280010,34.14463889,-90.2301111,EASTERN TEMPERATE FORESTS +07281600,33.65138889,-90.2111111,EASTERN TEMPERATE FORESTS +07277730,34.61666667,-89.9413889,EASTERN TEMPERATE FORESTS +07277700,34.63194444,-89.9244444,EASTERN TEMPERATE FORESTS +07285400,33.77400485,-89.7875859,EASTERN TEMPERATE FORESTS +301141089320300,30.1947222,-89.5341667,NA +024791834,30.91796344,-89.3195037,EASTERN TEMPERATE FORESTS +02481510,30.4836111,-89.2744444,EASTERN TEMPERATE FORESTS +02473085,31.30658333,-89.2641111,EASTERN TEMPERATE FORESTS +02474560,31.22166667,-89.0530556,EASTERN TEMPERATE FORESTS +02479155,31.02527778,-89.0166667,EASTERN TEMPERATE FORESTS +02481270,30.4157534,-88.9758669,EASTERN TEMPERATE FORESTS +02479310,30.61055556,-88.64138889,EASTERN TEMPERATE FORESTS +02479330,30.58388889,-88.57,EASTERN TEMPERATE FORESTS +02480212,30.36777778,-88.5630556,EASTERN TEMPERATE FORESTS +02430012,34.51231996,-88.326157,EASTERN TEMPERATE FORESTS +06818000,39.75325,-94.8568333,GREAT PLAINS +06893150,38.88941667,-94.5806667,GREAT PLAINS +06893562,39.03925,-94.5787222,GREAT PLAINS +06893500,38.957,-94.5588889,GREAT PLAINS +06893060,39.15169444,-94.4940556,GREAT PLAINS +06893620,39.11194444,-94.4722222,GREAT PLAINS +07188885,36.59927778,-94.4496389,EASTERN TEMPERATE FORESTS +06893820,39.0173611,-94.3872778,GREAT PLAINS +06893830,39.03777778,-94.3633333,GREAT PLAINS +06893890,39.02556175,-94.3438385,GREAT PLAINS +06893970,39.08416667,-94.3372222,GREAT PLAINS +06894000,39.1005609,-94.3005038,GREAT PLAINS +07186670,36.77694444,-94.0241667,EASTERN TEMPERATE FORESTS +06918250,38.00388889,-93.9947222,GREAT PLAINS +06895500,39.2150194,-93.5152118,GREAT PLAINS +06900050,40.0266111,-93.4362222,GREAT PLAINS +07053450,36.5950631,-93.3090721,EASTERN TEMPERATE FORESTS +06899900,40.45444444,-93.2863889,GREAT PLAINS +06901500,39.89594444,-93.2365278,GREAT PLAINS +06906500,39.2222512,-92.848798,GREAT PLAINS +06909000,38.980306,-92.7454638,EASTERN TEMPERATE FORESTS +06926080,38.23253889,-92.4586111,EASTERN TEMPERATE FORESTS +06926290,38.27777778,-92.2333333,EASTERN TEMPERATE FORESTS +06910450,38.5871111,-92.1786389,EASTERN TEMPERATE FORESTS +06934000,38.38880556,-91.8198889,EASTERN TEMPERATE FORESTS +06934500,38.70980556,-91.4385,EASTERN TEMPERATE FORESTS +07010330,37.6590833,-91.4145,EASTERN TEMPERATE FORESTS +07065040,37.31310197,-91.3168011,EASTERN TEMPERATE FORESTS +07014000,37.97477778,-91.2040278,EASTERN TEMPERATE FORESTS +07061270,37.55255556,-90.8424444,EASTERN TEMPERATE FORESTS +06935550,38.5658333,-90.8391667,EASTERN TEMPERATE FORESTS +07061290,37.4936111,-90.8383333,EASTERN TEMPERATE FORESTS +07061300,37.4501111,-90.8271111,EASTERN TEMPERATE FORESTS +07061600,37.32519444,-90.7646667,EASTERN TEMPERATE FORESTS +07018500,38.3917222,-90.6378056,EASTERN TEMPERATE FORESTS +07017610,37.96525,-90.5745,EASTERN TEMPERATE FORESTS +06935965,38.78719444,-90.4718056,EASTERN TEMPERATE FORESTS +07020850,37.30188889,-89.518,EASTERN TEMPERATE FORESTS +12305000,48.6175,-116.0463889,NORTHWESTERN FORESTED MOUNTAINS +12301933,48.40066389,-115.3187194,NORTHWESTERN FORESTED MOUNTAINS +12302055,48.35560278,-115.31465,NORTHWESTERN FORESTED MOUNTAINS +12354000,47.2967111,-115.122625,NORTHWESTERN FORESTED MOUNTAINS +12301300,48.89359167,-115.0878528,NORTHWESTERN FORESTED MOUNTAINS +12354500,47.30163889,-115.0868694,NORTHWESTERN FORESTED MOUNTAINS +12354700,47.32187569,-114.890966,NORTHWESTERN FORESTED MOUNTAINS +12353650,47.19631608,-114.890409,NORTHWESTERN FORESTED MOUNTAINS +12388700,47.36679167,-114.585,NORTHWESTERN FORESTED MOUNTAINS +12372000,47.6802861,-114.2467278,NORTHWESTERN FORESTED MOUNTAINS +12363000,48.3618111,-114.18495,NORTHWESTERN FORESTED MOUNTAINS +12344000,45.97205,-114.1412333,NORTHWESTERN FORESTED MOUNTAINS +12353000,46.8686333,-114.1277472,NORTHWESTERN FORESTED MOUNTAINS +12355500,48.4957972,-114.1267639,NORTHWESTERN FORESTED MOUNTAINS +12352500,46.83173889,-114.054861,NORTHWESTERN FORESTED MOUNTAINS +12362500,48.35657778,-114.0378583,NORTHWESTERN FORESTED MOUNTAINS +12370000,48.02423056,-113.9788194,NORTHWESTERN FORESTED MOUNTAINS +12340500,46.87676389,-113.9321194,NORTHWESTERN FORESTED MOUNTAINS +12334550,46.8259111,-113.8140306,NORTHWESTERN FORESTED MOUNTAINS +12340000,46.8994111,-113.7563194,NORTHWESTERN FORESTED MOUNTAINS +12334510,46.7223361,-113.683061,NORTHWESTERN FORESTED MOUNTAINS +05014300,48.7954444,-113.6805833,NORTHWESTERN FORESTED MOUNTAINS +06024450,45.61796667,-113.4569417,NORTHWESTERN FORESTED MOUNTAINS +12338300,46.9794944,-113.092186,NORTHWESTERN FORESTED MOUNTAINS +06024580,45.8508222,-113.068361,NORTHWESTERN FORESTED MOUNTAINS +12337800,46.8907698,-113.0386674,NORTHWESTERN FORESTED MOUNTAINS +12335100,46.9187944,-113.014986,NORTHWESTERN FORESTED MOUNTAINS +12324680,46.58998889,-112.9287139,NORTHWESTERN FORESTED MOUNTAINS +12324590,46.5194833,-112.7931722,NORTHWESTERN FORESTED MOUNTAINS +12324400,46.5109111,-112.789686,NORTHWESTERN FORESTED MOUNTAINS +12323770,46.180375,-112.7850778,NORTHWESTERN FORESTED MOUNTAINS +12323800,46.20824167,-112.76735,NORTHWESTERN FORESTED MOUNTAINS +12324200,46.39765,-112.7425389,NORTHWESTERN FORESTED MOUNTAINS +06025250,45.7012694,-112.7359694,NORTHWESTERN FORESTED MOUNTAINS +06025500,45.52658056,-112.701725,NORTHWESTERN FORESTED MOUNTAINS +06026210,45.4400944,-112.5560917,NORTHWESTERN FORESTED MOUNTAINS +12323233,45.9912694,-112.5273583,NORTHWESTERN FORESTED MOUNTAINS +06018500,45.38338889,-112.4528306,NORTHWESTERN FORESTED MOUNTAINS +06026420,45.5500222,-112.360675,NORTHWESTERN FORESTED MOUNTAINS +06023100,45.54688889,-112.338111,NORTHWESTERN FORESTED MOUNTAINS +06023000,45.50691389,-112.3308889,NORTHWESTERN FORESTED MOUNTAINS +06026500,45.6132833,-112.3293972,NORTHWESTERN FORESTED MOUNTAINS +06098120,48.39110278,-112.319661,GREAT PLAINS +06027600,45.74750278,-112.1872278,NORTHWESTERN FORESTED MOUNTAINS +06073500,47.199025,-112.0959056,GREAT PLAINS +06066500,46.99473889,-112.0106667,GREAT PLAINS +06085800,47.50162778,-111.9319139,GREAT PLAINS +06040000,45.2331333,-111.7516333,NORTHWESTERN FORESTED MOUNTAINS +06035000,45.7230583,-111.741025,NORTHWESTERN FORESTED MOUNTAINS +06041000,45.49023056,-111.6345056,NORTHWESTERN FORESTED MOUNTAINS +06006000,44.61579167,-111.6256694,NORTHWESTERN FORESTED MOUNTAINS +06036650,45.8971361,-111.5956722,NORTHWESTERN FORESTED MOUNTAINS +06038800,44.88865556,-111.580886,NORTHWESTERN FORESTED MOUNTAINS +06089000,47.52577778,-111.511036,GREAT PLAINS +06052500,45.88535556,-111.438286,NORTHWESTERN FORESTED MOUNTAINS +06054500,46.1465722,-111.4202778,NORTHWESTERN FORESTED MOUNTAINS +06090650,47.70790556,-111.40915,GREAT PLAINS +06077500,47.18929167,-111.3862389,GREAT PLAINS +06038500,44.86639167,-111.3387806,NORTHWESTERN FORESTED MOUNTAINS +06043500,45.4973,-111.2707083,NORTHWESTERN FORESTED MOUNTAINS +06043120,45.29727778,-111.2113917,NORTHWESTERN FORESTED MOUNTAINS +06077200,46.82798056,-111.1922389,NORTHWESTERN FORESTED MOUNTAINS +06048700,45.725425,-111.0685917,NORTHWESTERN FORESTED MOUNTAINS +06037500,44.6570722,-111.0679639,NORTHWESTERN FORESTED MOUNTAINS +06101630,48.26,-110.8916667,GREAT PLAINS +06191500,45.1121194,-110.7936667,NORTHWESTERN FORESTED MOUNTAINS +06191000,44.9923444,-110.690975,NORTHWESTERN FORESTED MOUNTAINS +06102050,47.94590278,-110.5808389,GREAT PLAINS +06192500,45.5972111,-110.5664972,NORTHWESTERN FORESTED MOUNTAINS +06192980,46.1671611,-110.5542861,GREAT PLAINS +06108800,47.9327194,-110.5144333,GREAT PLAINS +06195600,45.7383611,-110.4794694,GREAT PLAINS +06192900,46.18480556,-110.3796389,NORTHWESTERN FORESTED MOUNTAINS +06195750,45.74632347,-110.2324168,GREAT PLAINS +06187915,45.00283056,-110.0018722,NORTHWESTERN FORESTED MOUNTAINS +06195950,45.84716219,-109.9407423,GREAT PLAINS +06200000,45.8337944,-109.9387056,GREAT PLAINS +06120500,46.4288,-109.8411944,GREAT PLAINS +06204070,45.25438735,-109.6998945,NORTHWESTERN FORESTED MOUNTAINS +06114700,47.6651583,-109.6520139,GREAT PLAINS +06205000,45.53674167,-109.4220556,GREAT PLAINS +06209500,45.0861472,-109.3291889,NORTHWESTERN FORESTED MOUNTAINS +06115200,47.63143056,-108.6877444,GREAT PLAINS +06214500,45.8001194,-108.4680306,GREAT PLAINS +06287000,45.31690278,-107.9188889,GREAT PLAINS +06130500,46.99469167,-107.8891639,GREAT PLAINS +06294500,46.1244722,-107.4687917,GREAT PLAINS +06306300,45.0091361,-106.8359444,GREAT PLAINS +06174500,48.13005278,-106.3643139,GREAT PLAINS +06307830,45.8403861,-106.2234333,GREAT PLAINS +06308500,46.3845944,-105.8455222,GREAT PLAINS +06177000,48.067325,-105.5330972,GREAT PLAINS +06181000,48.11791667,-105.1928167,GREAT PLAINS +06185500,48.1235,-104.4733,GREAT PLAINS +06329500,47.67741389,-104.1554111,GREAT PLAINS +06454100,42.4236111,-103.7922222,GREAT PLAINS +06775900,41.7786111,-100.5252778,GREAT PLAINS +06461500,42.90207778,-100.3625278,GREAT PLAINS +06781600,41.42277778,-100.2033778,GREAT PLAINS +06775500,41.83091667,-100.0995278,GREAT PLAINS +06785500,41.94166667,-99.8602778,GREAT PLAINS +06768000,40.6825,-99.5405556,GREAT PLAINS +06786000,41.77694444,-99.3791667,GREAT PLAINS +06784000,41.0325,-98.7405556,GREAT PLAINS +06465500,42.7397222,-98.2227778,GREAT PLAINS +06795500,41.52596389,-97.2815972,GREAT PLAINS +06478522,42.76527778,-97.1725667,GREAT PLAINS +06799350,41.8394441,-96.7275324,GREAT PLAINS +06479097,42.57499688,-96.6836468,GREAT PLAINS +06803197,40.7694453,-96.6347371,GREAT PLAINS +404824096380001,40.80655556,-96.6333889,GREAT PLAINS +06486000,42.48619444,-96.4130833,GREAT PLAINS +06796550,41.19797778,-96.3394861,GREAT PLAINS +06805000,41.05166667,-96.3386111,GREAT PLAINS +410536096194801,41.0933611,-96.3301667,GREAT PLAINS +06801000,41.06225556,-96.3245139,GREAT PLAINS +06800500,41.2933333,-96.2838889,GREAT PLAINS +412126095565201,41.3574722,-95.9477778,GREAT PLAINS +06610000,41.25905556,-95.92325,GREAT PLAINS +410333095530101,41.05935278,-95.8836694,GREAT PLAINS +06813500,40.05205556,-95.42175,GREAT PLAINS +10347310,39.5243537,-119.9954782,NORTHWESTERN FORESTED MOUNTAINS +10336698,39.24046325,-119.9465774,NORTHWESTERN FORESTED MOUNTAINS +10336700,39.2401855,-119.9449106,NORTHWESTERN FORESTED MOUNTAINS +10336730,39.08740806,-119.9399057,NORTHWESTERN FORESTED MOUNTAINS +10347460,39.50713218,-119.931864,NORTH AMERICAN DESERTS +10347620,39.50352144,-119.890473,NORTH AMERICAN DESERTS +10348000,39.53018865,-119.7954684,NORTH AMERICAN DESERTS +10348200,39.51761667,-119.7416444,NORTH AMERICAN DESERTS +10349980,39.5129672,-119.712409,NORTH AMERICAN DESERTS +10348300,39.52657819,-119.7093535,NORTH AMERICAN DESERTS +10309000,38.84519444,-119.7060833,NORTH AMERICAN DESERTS +10349995,39.51852275,-119.7040754,NORTH AMERICAN DESERTS +10350000,39.5204672,-119.7010198,NORTH AMERICAN DESERTS +10350390,39.5660232,-119.5304575,NORTH AMERICAN DESERTS +10350400,39.5645,-119.5203778,NORTH AMERICAN DESERTS +10350405,39.56435665,-119.5182348,NORTH AMERICAN DESERTS +10350500,39.56545278,-119.486186,NORTH AMERICAN DESERTS +10351600,39.58463448,-119.4412872,NORTH AMERICAN DESERTS +10351700,39.7773722,-119.3375222,NORTH AMERICAN DESERTS +10312000,39.29166667,-119.311111,NORTH AMERICAN DESERTS +10351650,39.63213447,-119.2832254,NORTH AMERICAN DESERTS +10301500,39.1524611,-119.0988889,NORTH AMERICAN DESERTS +10302002,38.94019785,-118.8037557,NORTH AMERICAN DESERTS +10312180,39.3432525,-118.7443152,NORTH AMERICAN DESERTS +10302025,38.79103038,-118.727085,NORTH AMERICAN DESERTS +10312275,39.55880594,-118.7259842,NORTH AMERICAN DESERTS +10312185,39.35853047,-118.6879242,NORTH AMERICAN DESERTS +10312210,39.47330278,-118.5986278,NORTH AMERICAN DESERTS +10336035,40.08352067,-118.5795939,NORTH AMERICAN DESERTS +10336039,40.0424101,-118.5529258,NORTH AMERICAN DESERTS +10312218,39.5213079,-118.5473653,NORTH AMERICAN DESERTS +1031221902,39.53353015,-118.5193087,NORTH AMERICAN DESERTS +10336000,40.0521327,-118.46709,NORTH AMERICAN DESERTS +10335000,40.4674063,-118.3076469,NORTH AMERICAN DESERTS +10333000,40.6924048,-118.204312,NORTH AMERICAN DESERTS +10353500,41.77489345,-117.8051426,NORTH AMERICAN DESERTS +10249300,38.8874302,-117.2453673,NORTH AMERICAN DESERTS +10321000,40.72769715,-116.009242,NORTH AMERICAN DESERTS +10317480,41.3297222,-115.5719444,NORTH AMERICAN DESERTS +10313400,41.54991275,-115.3067288,NORTH AMERICAN DESERTS +10315600,41.15436386,-115.2711684,NORTH AMERICAN DESERTS +094196783,36.13969527,-115.0477755,NORTH AMERICAN DESERTS +09419679,36.10805,-115.0219944,NORTH AMERICAN DESERTS +09419700,36.08747539,-114.9858276,NORTH AMERICAN DESERTS +09419755,36.10219804,-114.9386039,NORTH AMERICAN DESERTS +09419800,36.12219816,-114.904992,NORTH AMERICAN DESERTS +09421500,36.01525847,-114.7385936,NORTH AMERICAN DESERTS +09416000,36.7110817,-114.6952715,NORTH AMERICAN DESERTS +09418700,36.8382,-114.6580556,NORTH AMERICAN DESERTS +09419507,36.53527778,-114.4283333,NORTH AMERICAN DESERTS +10243640,39.0055011,-114.3602768,NORTH AMERICAN DESERTS +10243630,38.94522439,-114.3588869,NORTH AMERICAN DESERTS +09415250,36.51325,-114.3359806,NORTH AMERICAN DESERTS +10243280,39.06441767,-114.258691,NORTH AMERICAN DESERTS +10243230,38.9216143,-114.2244382,NORTH AMERICAN DESERTS +10243260,39.0116129,-114.2144392,NORTH AMERICAN DESERTS +10243265,39.0085574,-114.2077723,NORTH AMERICAN DESERTS +10243240,38.9907799,-114.2066609,NORTH AMERICAN DESERTS +10243228,38.8835319,-114.1882697,NORTH AMERICAN DESERTS +10243233,38.91844855,-114.101073,NORTH AMERICAN DESERTS +10243234,38.92961537,-114.049377,NORTH AMERICAN DESERTS +01154950,43.14944444,-72.3616667,NORTHERN FORESTS +01157000,43.03924586,-72.2700858,NORTHERN FORESTS +01160000,42.8720265,-72.2136952,NORTHERN FORESTS +01093852,42.8425858,-71.7067399,EASTERN TEMPERATE FORESTS +01091000,43.01480519,-71.64146129,NORTHERN FORESTS +01129500,44.74977166,-71.63120018,NORTHERN FORESTS +01129200,45.04032368,-71.4439704,NORTHERN FORESTS +010642505,44.08388889,-71.2855556,NORTHERN FORESTS +01073319,43.04138889,-71.2016667,EASTERN TEMPERATE FORESTS +01072870,43.23480487,-70.9564507,EASTERN TEMPERATE FORESTS +01477120,39.74055556,-75.2591667,EASTERN TEMPERATE FORESTS +01412800,39.4725,-75.2555556,EASTERN TEMPERATE FORESTS +01457500,40.5947222,-75.1897222,NORTHERN FORESTS +01477070,39.6861111,-75.1844444,EASTERN TEMPERATE FORESTS +01455290,40.6354722,-75.16863889,EASTERN TEMPERATE FORESTS +01475001,39.73888889,-75.1144444,EASTERN TEMPERATE FORESTS +01446500,40.82638889,-75.0825,EASTERN TEMPERATE FORESTS +01411500,39.49555556,-75.0769444,EASTERN TEMPERATE FORESTS +01458500,40.5261111,-75.065,EASTERN TEMPERATE FORESTS +01467150,39.90305556,-75.02138889,EASTERN TEMPERATE FORESTS +01467059,40.01513889,-75.0176944,EASTERN TEMPERATE FORESTS +01467081,39.94166667,-75.0011111,EASTERN TEMPERATE FORESTS +01460860,40.51694444,-74.9916667,EASTERN TEMPERATE FORESTS +01412000,39.41916667,-74.9658333,EASTERN TEMPERATE FORESTS +01440000,41.1061111,-74.9525,EASTERN TEMPERATE FORESTS +01410784,39.7336111,-74.9511111,EASTERN TEMPERATE FORESTS +01462000,40.3647222,-74.94888889,EASTERN TEMPERATE FORESTS +01412080,39.37305556,-74.9447222,EASTERN TEMPERATE FORESTS +01467024,40.02916667,-74.9316667,EASTERN TEMPERATE FORESTS +01467016,40.00888889,-74.8891667,EASTERN TEMPERATE FORESTS +01396500,40.67777778,-74.8791667,NORTHERN FORESTS +01397000,40.5722222,-74.8680556,EASTERN TEMPERATE FORESTS +01460380,40.29666667,-74.8669444,EASTERN TEMPERATE FORESTS +01411000,39.5947222,-74.8516667,EASTERN TEMPERATE FORESTS +0146587310,39.8677222,-74.84175,EASTERN TEMPERATE FORESTS +01398000,40.4733333,-74.82777778,EASTERN TEMPERATE FORESTS +01465880,39.89527778,-74.8236111,EASTERN TEMPERATE FORESTS +01460400,40.2447222,-74.8191667,EASTERN TEMPERATE FORESTS +01465905,39.96116667,-74.8075833,EASTERN TEMPERATE FORESTS +01467005,39.99305556,-74.78138889,EASTERN TEMPERATE FORESTS +01399690,40.6233333,-74.7666667,EASTERN TEMPERATE FORESTS +01465850,39.94,-74.7630556,EASTERN TEMPERATE FORESTS +01464040,40.18916667,-74.7558333,EASTERN TEMPERATE FORESTS +01396085,40.86277778,-74.7547222,NORTHERN FORESTS +01399700,40.63027778,-74.7361111,EASTERN TEMPERATE FORESTS +0146700255,39.98188889,-74.7076667,EASTERN TEMPERATE FORESTS +01465806,39.86194444,-74.69888889,EASTERN TEMPERATE FORESTS +01460440,40.30444444,-74.685,EASTERN TEMPERATE FORESTS +01467000,39.97,-74.6844444,EASTERN TEMPERATE FORESTS +01401000,40.33305556,-74.6819444,EASTERN TEMPERATE FORESTS +01464504,40.1672222,-74.6775,EASTERN TEMPERATE FORESTS +01401600,40.41444444,-74.65027778,EASTERN TEMPERATE FORESTS +01466900,39.9561111,-74.62777778,EASTERN TEMPERATE FORESTS +01464500,40.1372222,-74.6,EASTERN TEMPERATE FORESTS +01465963,39.98769444,-74.5926944,EASTERN TEMPERATE FORESTS +01379790,40.91777778,-74.5836111,NORTHERN FORESTS +01400500,40.55555556,-74.58277778,EASTERN TEMPERATE FORESTS +01465965,39.97638889,-74.5766667,EASTERN TEMPERATE FORESTS +01402000,40.475,-74.5758333,EASTERN TEMPERATE FORESTS +01379680,40.95388889,-74.5711111,NORTHERN FORESTS +01460565,40.5408333,-74.5686111,EASTERN TEMPERATE FORESTS +01402900,40.5422222,-74.56777778,EASTERN TEMPERATE FORESTS +01400510,40.54277778,-74.5672222,EASTERN TEMPERATE FORESTS +01409810,39.68805556,-74.5480556,EASTERN TEMPERATE FORESTS +01379773,40.96,-74.5397222,NORTHERN FORESTS +01464290,40.0361111,-74.5361111,EASTERN TEMPERATE FORESTS +01466100,39.92888889,-74.5311111,EASTERN TEMPERATE FORESTS +01464330,40.0472222,-74.5308333,EASTERN TEMPERATE FORESTS +01379000,40.68,-74.52888889,EASTERN TEMPERATE FORESTS +01466196,39.9565833,-74.5239444,EASTERN TEMPERATE FORESTS +01404100,40.54056667,-74.5138083,EASTERN TEMPERATE FORESTS +01466500,39.885,-74.50527778,EASTERN TEMPERATE FORESTS +01382210,41.0397222,-74.5016667,NORTHERN FORESTS +01382170,41.07777778,-74.4897222,NORTHERN FORESTS +01466081,39.9223611,-74.4783611,EASTERN TEMPERATE FORESTS +01465987,39.88994444,-74.47527778,EASTERN TEMPERATE FORESTS +01460595,40.50777778,-74.4641667,EASTERN TEMPERATE FORESTS +01460600,40.5075,-74.4591667,EASTERN TEMPERATE FORESTS +01382310,41.0597222,-74.44027778,NORTHERN FORESTS +01382381,41.02666667,-74.4244444,NORTHERN FORESTS +01382385,41.0247222,-74.4083333,NORTHERN FORESTS +01382500,41.0183333,-74.4011111,NORTHERN FORESTS +01388000,40.99194444,-74.28,EASTERN TEMPERATE FORESTS +01382000,40.8972222,-74.27277778,EASTERN TEMPERATE FORESTS +01389000,40.89777778,-74.2725,EASTERN TEMPERATE FORESTS +01389005,40.89638889,-74.2691667,EASTERN TEMPERATE FORESTS +01389500,40.8847222,-74.2261111,EASTERN TEMPERATE FORESTS +01408500,39.98638889,-74.2233333,EASTERN TEMPERATE FORESTS +01408000,40.16138889,-74.1547222,EASTERN TEMPERATE FORESTS +01408029,40.14666667,-74.1222222,EASTERN TEMPERATE FORESTS +01390500,40.985,-74.0905556,EASTERN TEMPERATE FORESTS +09368000,36.77666667,-108.6830556,NORTH AMERICAN DESERTS +09365000,36.72301667,-108.2255889,NORTH AMERICAN DESERTS +09364500,36.7225,-108.20175,NORTH AMERICAN DESERTS +09364010,36.81836667,-108.0229944,NORTH AMERICAN DESERTS +09355500,36.80188889,-107.6986389,NORTH AMERICAN DESERTS +08363510,32.47731016,-106.920566,NORTH AMERICAN DESERTS +08329928,35.182,-106.6519444,NORTH AMERICAN DESERTS +08329918,35.1977222,-106.6427778,NORTH AMERICAN DESERTS +08317400,35.618,-106.3239444,NORTH AMERICAN DESERTS +08377900,35.77711389,-105.6580278,NORTHWESTERN FORESTED MOUNTAINS +08405200,32.409275,-104.2149722,NORTH AMERICAN DESERTS +08405400,32.2359472,-104.1966472,NORTH AMERICAN DESERTS +08407500,32.07519167,-104.0394361,NORTH AMERICAN DESERTS +08406500,32.20754167,-104.023875,NORTH AMERICAN DESERTS +04213500,42.46344444,-78.9345278,EASTERN TEMPERATE FORESTS +03011020,42.1568333,-78.7155556,NORTHERN FORESTS +04219768,43.31380556,-78.7154167,EASTERN TEMPERATE FORESTS +04218601,43.17469444,-78.6890556,EASTERN TEMPERATE FORESTS +04220045,43.17430556,-78.38638889,EASTERN TEMPERATE FORESTS +0422016550,43.301,-78.3104444,EASTERN TEMPERATE FORESTS +04219915,43.3608333,-78.2645278,EASTERN TEMPERATE FORESTS +0422018610,43.35330556,-78.1930556,EASTERN TEMPERATE FORESTS +04220223,43.3390833,-77.9152222,EASTERN TEMPERATE FORESTS +04226000,42.6824722,-77.8286944,EASTERN TEMPERATE FORESTS +0422026250,43.2538611,-77.7420833,EASTERN TEMPERATE FORESTS +04218700,43.1256111,-77.6501111,EASTERN TEMPERATE FORESTS +04231600,43.1417222,-77.6163056,EASTERN TEMPERATE FORESTS +04232050,43.12802778,-77.527,EASTERN TEMPERATE FORESTS +0423205010,43.145,-77.5119444,EASTERN TEMPERATE FORESTS +04232034,43.0278333,-77.4787222,EASTERN TEMPERATE FORESTS +04249000,43.45166667,-76.50527778,EASTERN TEMPERATE FORESTS +01503000,42.03555556,-75.80227778,EASTERN TEMPERATE FORESTS +01425805,42.04869444,-75.4851944,EASTERN TEMPERATE FORESTS +01425000,42.07491667,-75.3958056,EASTERN TEMPERATE FORESTS +01426500,42.00302778,-75.38352778,EASTERN TEMPERATE FORESTS +01427000,41.95216667,-75.2909444,EASTERN TEMPERATE FORESTS +01421000,41.97327778,-75.1747222,EASTERN TEMPERATE FORESTS +01423000,42.1661111,-75.14002778,EASTERN TEMPERATE FORESTS +01417500,42.0245833,-75.11927778,EASTERN TEMPERATE FORESTS +01427301,41.82369918,-75.1129467,EASTERN TEMPERATE FORESTS +01427500,41.76055556,-75.04838889,EASTERN TEMPERATE FORESTS +01342732,43.01975,-75.0284722,EASTERN TEMPERATE FORESTS +01428000,41.56388889,-75.0144444,NORTHERN FORESTS +01428500,41.50875,-74.9860556,NORTHERN FORESTS +01420500,41.94641667,-74.9796667,EASTERN TEMPERATE FORESTS +01417000,42.07502778,-74.97627778,EASTERN TEMPERATE FORESTS +01415460,42.1471111,-74.9052222,EASTERN TEMPERATE FORESTS +0134277112,43.53380556,-74.8618333,NORTHERN FORESTS +0134277114,43.53138889,-74.8529167,NORTHERN FORESTS +01415000,42.12,-74.8186111,EASTERN TEMPERATE FORESTS +0134277123,43.5115,-74.8148611,NORTHERN FORESTS +01419500,41.9033333,-74.81277778,EASTERN TEMPERATE FORESTS +0134277119,43.52105556,-74.8011111,NORTHERN FORESTS +0134277121,43.51430556,-74.7988611,NORTHERN FORESTS +01433005,41.56727778,-74.78327778,NORTHERN FORESTS +01433500,41.4612222,-74.75877778,NORTHERN FORESTS +01414500,42.1061111,-74.7305556,NORTHERN FORESTS +04253296,43.7439541,-74.7218348,NORTHERN FORESTS +01413500,42.1447222,-74.6536111,EASTERN TEMPERATE FORESTS +01436000,41.82,-74.6355556,EASTERN TEMPERATE FORESTS +01436655,41.66780556,-74.62302778,EASTERN TEMPERATE FORESTS +01436690,41.63805556,-74.61688889,NORTHERN FORESTS +01437500,41.4413611,-74.60188889,EASTERN TEMPERATE FORESTS +01434498,41.92041667,-74.57438889,NORTHERN FORESTS +01437349,41.49963889,-74.5522222,EASTERN TEMPERATE FORESTS +01434017,41.92527778,-74.54027778,NORTHERN FORESTS +01365550,41.8490833,-74.5318333,NORTHERN FORESTS +01365100,41.8521111,-74.51302778,NORTHERN FORESTS +01434025,41.9960833,-74.5002222,NORTHERN FORESTS +01437100,41.59594444,-74.4681944,NORTHERN FORESTS +0143400680,41.96694444,-74.4480556,NORTHERN FORESTS +01434021,42.0111111,-74.4144444,NORTHERN FORESTS +01364959,41.93694444,-74.3747222,NORTHERN FORESTS +01349527,42.95044444,-74.371,EASTERN TEMPERATE FORESTS +01362230,42.11453416,-74.3637599,NORTHERN FORESTS +01353995,42.93729628,-74.2801324,EASTERN TEMPERATE FORESTS +01362500,42.0144722,-74.2701944,NORTHERN FORESTS +0135403025,42.95319444,-74.2381111,EASTERN TEMPERATE FORESTS +01354083,42.934,-74.1918611,EASTERN TEMPERATE FORESTS +01354230,42.87827778,-74.04075,EASTERN TEMPERATE FORESTS +01376520,40.72152778,-74.0156111,EASTERN TEMPERATE FORESTS +01376515,40.76463889,-74.0031944,EASTERN TEMPERATE FORESTS +01354330,42.8281583,-73.9903722,EASTERN TEMPERATE FORESTS +01376307,40.93625,-73.9043056,EASTERN TEMPERATE FORESTS +01355475,42.8511111,-73.88725,EASTERN TEMPERATE FORESTS +01302020,40.86230556,-73.87438889,EASTERN TEMPERATE FORESTS +0135980207,42.4996111,-73.7768056,EASTERN TEMPERATE FORESTS +01359165,42.61952778,-73.7589167,EASTERN TEMPERATE FORESTS +01359133,42.67138889,-73.7555556,EASTERN TEMPERATE FORESTS +01359139,42.64788889,-73.7475,EASTERN TEMPERATE FORESTS +0135749950,42.78569444,-73.7104167,EASTERN TEMPERATE FORESTS +01309500,40.689,-73.45538889,EASTERN TEMPERATE FORESTS +0351706800,35.4383333,-83.91888889,EASTERN TEMPERATE FORESTS +03501500,35.18592846,-83.3712647,EASTERN TEMPERATE FORESTS +03512000,35.46138889,-83.3536111,EASTERN TEMPERATE FORESTS +03460795,35.7836111,-83.1119444,EASTERN TEMPERATE FORESTS +03460000,35.6672222,-83.0727778,EASTERN TEMPERATE FORESTS +03456991,35.52194444,-82.8480556,EASTERN TEMPERATE FORESTS +0344878100,35.56138889,-82.5969444,EASTERN TEMPERATE FORESTS +03446000,35.39805556,-82.595,EASTERN TEMPERATE FORESTS +03447890,35.4997222,-82.5927778,EASTERN TEMPERATE FORESTS +03451500,35.60888889,-82.5780556,EASTERN TEMPERATE FORESTS +03448050,35.5122222,-82.5772222,EASTERN TEMPERATE FORESTS +03451200,35.585,-82.5686111,EASTERN TEMPERATE FORESTS +03447687,35.42916667,-82.5525,EASTERN TEMPERATE FORESTS +02137727,35.6858333,-82.0602778,EASTERN TEMPERATE FORESTS +02138520,35.7403611,-81.8346667,EASTERN TEMPERATE FORESTS +02111000,35.9908333,-81.5583333,EASTERN TEMPERATE FORESTS +02141500,35.77262778,-81.4306556,EASTERN TEMPERATE FORESTS +0214196125,35.82246667,-81.1905361,EASTERN TEMPERATE FORESTS +0214244102,35.75719444,-81.08915,EASTERN TEMPERATE FORESTS +0214267602,35.33400556,-80.9864083,EASTERN TEMPERATE FORESTS +0214264790,35.4277333,-80.9573417,EASTERN TEMPERATE FORESTS +02146409,35.2036111,-80.8369444,EASTERN TEMPERATE FORESTS +02124692,35.1536111,-80.5352778,EASTERN TEMPERATE FORESTS +0212378405,35.20066667,-80.0618056,EASTERN TEMPERATE FORESTS +02099238,35.99805556,-79.9266667,EASTERN TEMPERATE FORESTS +0212880025,34.9834833,-79.8775806,EASTERN TEMPERATE FORESTS +0209517912,36.08916667,-79.82888889,EASTERN TEMPERATE FORESTS +02100634,35.65916667,-79.7769444,EASTERN TEMPERATE FORESTS +0207428225,36.37388889,-79.6836111,EASTERN TEMPERATE FORESTS +0209665940,36.065,-79.5994444,EASTERN TEMPERATE FORESTS +0209665990,36.0658333,-79.5994444,EASTERN TEMPERATE FORESTS +02101726,35.73514055,-79.4230754,EASTERN TEMPERATE FORESTS +0209679804,36.0361111,-79.4102778,EASTERN TEMPERATE FORESTS +0209647295,36.10888889,-79.4033333,EASTERN TEMPERATE FORESTS +0209647280,36.10944444,-79.4025,EASTERN TEMPERATE FORESTS +02077200,36.39777778,-79.1966667,EASTERN TEMPERATE FORESTS +02096842,36.0259733,-79.17473658,EASTERN TEMPERATE FORESTS +0209695780,35.7761111,-79.1677778,EASTERN TEMPERATE FORESTS +0209697900,35.77444444,-79.1202778,EASTERN TEMPERATE FORESTS +02097464,35.9236111,-79.115,EASTERN TEMPERATE FORESTS +0208500600,36.06527778,-79.0872222,EASTERN TEMPERATE FORESTS +0208501535,36.0875,-79.0647222,EASTERN TEMPERATE FORESTS +0209750881,35.89166667,-79.0611111,EASTERN TEMPERATE FORESTS +02097517,35.8933333,-79.0197222,EASTERN TEMPERATE FORESTS +02077303,36.5227222,-78.9970556,EASTERN TEMPERATE FORESTS +02105500,34.83555556,-78.8236111,EASTERN TEMPERATE FORESTS +0208725055,35.83,-78.7861111,EASTERN TEMPERATE FORESTS +0208794555,35.6622222,-78.77,EASTERN TEMPERATE FORESTS +02087580,35.71888889,-78.7522222,EASTERN TEMPERATE FORESTS +0208758440,35.6922222,-78.7352778,EASTERN TEMPERATE FORESTS +0208726370,35.8132222,-78.73213889,EASTERN TEMPERATE FORESTS +0208726995,35.86202778,-78.6957222,EASTERN TEMPERATE FORESTS +0208762750,35.73194444,-78.6761111,EASTERN TEMPERATE FORESTS +0208732610,35.80694444,-78.61388889,EASTERN TEMPERATE FORESTS +02107544,34.43166667,-78.1436111,EASTERN TEMPERATE FORESTS +0210782005,35.0268324,-78.011098,EASTERN TEMPERATE FORESTS +0210788875,34.96488839,-77.9733184,EASTERN TEMPERATE FORESTS +0210789100,34.97044378,-77.9585957,EASTERN TEMPERATE FORESTS +02108690,34.2588333,-77.9481944,EASTERN TEMPERATE FORESTS +02108820,34.07644444,-77.9314444,EASTERN TEMPERATE FORESTS +02108566,34.5983333,-77.8752778,EASTERN TEMPERATE FORESTS +02091500,35.42888889,-77.5825,EASTERN TEMPERATE FORESTS +0208062765,36.3311111,-77.58027778,EASTERN TEMPERATE FORESTS +0209173200,35.5315503,-77.55858148,EASTERN TEMPERATE FORESTS +02083500,35.89444444,-77.5330556,EASTERN TEMPERATE FORESTS +0209303205,34.74888889,-77.43777778,NA +0209318667,34.69766385,-77.4038513,NA +02084160,35.56166667,-77.2308333,EASTERN TEMPERATE FORESTS +02081022,36.0136111,-77.21527778,EASTERN TEMPERATE FORESTS +0208102855,35.9443861,-77.0694444,EASTERN TEMPERATE FORESTS +02081054,35.8597222,-77.04027778,EASTERN TEMPERATE FORESTS +02092162,35.10944444,-77.03277778,NA +0209262905,34.99916667,-76.9430556,NA +02081094,35.81305556,-76.89277778,EASTERN TEMPERATE FORESTS +02084557,35.7308333,-76.7461111,EASTERN TEMPERATE FORESTS +0208114150,35.915,-76.72277778,EASTERN TEMPERATE FORESTS +0208455145,35.287114,-76.686595,EASTERN TEMPERATE FORESTS +0208457125,35.5026658,-76.5935408,NA +0204385315,36.3343226,-76.2182673,EASTERN TEMPERATE FORESTS +02043410,36.5122222,-76.0866667,EASTERN TEMPERATE FORESTS +02043415,36.49638889,-76.0841667,EASTERN TEMPERATE FORESTS +0204330010,36.5459866,-76.0304843,NA +06329597,47.85085328,-103.7940907,GREAT PLAINS +06329595,47.79335226,-103.7374219,GREAT PLAINS +06330000,48.1080792,-103.7146446,GREAT PLAINS +06331000,48.2844683,-103.5729718,GREAT PLAINS +06336000,46.9180722,-103.5303444,GREAT PLAINS +06332515,47.7872369,-102.7685256,GREAT PLAINS +05114000,48.9900156,-101.9582209,GREAT PLAINS +05116000,48.3722357,-101.5054414,GREAT PLAINS +06340590,47.3580547,-101.3976595,GREAT PLAINS +05117500,48.2458428,-101.3712745,GREAT PLAINS +05124000,48.9964079,-100.9584889,GREAT PLAINS +06342500,46.81416667,-100.8213889,GREAT PLAINS +05120000,48.15972928,-100.7295863,GREAT PLAINS +06467600,47.64605556,-99.8295278,GREAT PLAINS +05055170,47.9022288,-99.6192958,GREAT PLAINS +05055300,47.90777778,-99.4155556,GREAT PLAINS +05055400,47.82138889,-99.2761111,GREAT PLAINS +05056400,48.1777762,-99.2212455,GREAT PLAINS +05056410,48.1666675,-98.9801277,GREAT PLAINS +05056000,47.8055534,-98.7162172,GREAT PLAINS +05056678,47.8608333,-98.4944444,GREAT PLAINS +06470500,46.35552489,-98.3045433,GREAT PLAINS +06470875,45.94774725,-98.1751025,GREAT PLAINS +05057200,47.2291562,-98.1248189,GREAT PLAINS +06470830,46.13885667,-98.1156571,GREAT PLAINS +05058000,47.0338718,-98.0837077,GREAT PLAINS +05057000,47.43277097,-98.0275954,GREAT PLAINS +05082625,47.9319336,-97.5145305,GREAT PLAINS +05060100,46.9052487,-97.052587,GREAT PLAINS +05082500,47.9269234,-97.0292435,GREAT PLAINS +05059000,46.63163288,-97.000643,GREAT PLAINS +05059300,46.74638889,-96.9269444,GREAT PLAINS +05064500,47.351918,-96.843691,GREAT PLAINS +05054200,46.9769096,-96.8209139,GREAT PLAINS +05051522,46.65968548,-96.7959154,GREAT PLAINS +05054000,46.861075,-96.7836924,GREAT PLAINS +04183500,41.19893889,-84.7444033,EASTERN TEMPERATE FORESTS +03259757,39.16305556,-84.5575,EASTERN TEMPERATE FORESTS +03259813,39.15,-84.5475,EASTERN TEMPERATE FORESTS +03255349,39.26944444,-84.4319444,EASTERN TEMPERATE FORESTS +03272100,39.5198861,-84.4126778,EASTERN TEMPERATE FORESTS +03265000,40.05782925,-84.3560589,EASTERN TEMPERATE FORESTS +03271510,39.63728058,-84.2924416,EASTERN TEMPERATE FORESTS +04192500,41.2919928,-84.2810573,EASTERN TEMPERATE FORESTS +04193490,41.47616368,-83.7388261,EASTERN TEMPERATE FORESTS +04188496,40.9792203,-83.6532653,EASTERN TEMPERATE FORESTS +04195500,41.449496,-83.3613156,EASTERN TEMPERATE FORESTS +03232470,39.25228728,-83.3493577,EASTERN TEMPERATE FORESTS +395339083130100,39.89416667,-83.2169444,EASTERN TEMPERATE FORESTS +03219500,40.4195042,-83.1971372,EASTERN TEMPERATE FORESTS +03220510,40.15311775,-83.1263,EASTERN TEMPERATE FORESTS +03228039,39.8397222,-83.0094444,EASTERN TEMPERATE FORESTS +03234300,39.3203421,-82.9782349,EASTERN TEMPERATE FORESTS +03231500,39.34145297,-82.9710126,EASTERN TEMPERATE FORESTS +03228805,40.18228495,-82.9615711,EASTERN TEMPERATE FORESTS +03234500,39.21228934,-82.8637854,EASTERN TEMPERATE FORESTS +03228300,40.2361735,-82.8512892,EASTERN TEMPERATE FORESTS +03216070,38.53205556,-82.6859444,EASTERN TEMPERATE FORESTS +04199000,41.3008852,-82.6082326,EASTERN TEMPERATE FORESTS +04199500,41.38199,-82.3168273,EASTERN TEMPERATE FORESTS +03158200,39.43534835,-82.1915365,EASTERN TEMPERATE FORESTS +04200500,41.38032368,-82.10459279,EASTERN TEMPERATE FORESTS +03159246,39.42979358,-82.1009782,EASTERN TEMPERATE FORESTS +04201500,41.4075483,-81.88263759,EASTERN TEMPERATE FORESTS +04208506,41.4881068,-81.6851303,EASTERN TEMPERATE FORESTS +04208504,41.46255164,-81.680963,EASTERN TEMPERATE FORESTS +04208000,41.39533087,-81.6298478,EASTERN TEMPERATE FORESTS +04206425,41.28894396,-81.56511929,EASTERN TEMPERATE FORESTS +03117100,40.72672535,-81.5295657,EASTERN TEMPERATE FORESTS +03121850,40.59728465,-81.3590012,EASTERN TEMPERATE FORESTS +03140900,39.85277778,-81.3286111,EASTERN TEMPERATE FORESTS +03140853,39.86388889,-81.3208333,EASTERN TEMPERATE FORESTS +03140950,39.90138889,-81.3194444,EASTERN TEMPERATE FORESTS +03120961,40.56805556,-81.2572222,EASTERN TEMPERATE FORESTS +04212100,41.7189339,-81.2278789,EASTERN TEMPERATE FORESTS +03092090,41.16144549,-81.1970453,EASTERN TEMPERATE FORESTS +03120869,40.57805556,-81.1927778,EASTERN TEMPERATE FORESTS +03120820,40.5536111,-81.1847222,EASTERN TEMPERATE FORESTS +03126395,40.24777778,-81.1483333,EASTERN TEMPERATE FORESTS +03119979,40.52888889,-81.1369444,EASTERN TEMPERATE FORESTS +03125338,40.08416667,-81.1272222,EASTERN TEMPERATE FORESTS +03127989,40.34694444,-81.1266667,EASTERN TEMPERATE FORESTS +03119341,40.46166667,-81.1255556,EASTERN TEMPERATE FORESTS +03127986,40.31166667,-81.1152778,EASTERN TEMPERATE FORESTS +03127980,40.3386111,-81.11388889,EASTERN TEMPERATE FORESTS +03119971,40.5133333,-81.1127778,EASTERN TEMPERATE FORESTS +03086500,40.93283615,-81.0945413,EASTERN TEMPERATE FORESTS +03092460,41.15700127,-81.0717621,EASTERN TEMPERATE FORESTS +03091500,41.1314461,-80.9712018,EASTERN TEMPERATE FORESTS +03094000,41.23922335,-80.880642,EASTERN TEMPERATE FORESTS +411402080492400,41.23388889,-80.8233333,EASTERN TEMPERATE FORESTS +04212680,41.8933863,-80.7925871,EASTERN TEMPERATE FORESTS +03095500,41.29977898,-80.7584141,EASTERN TEMPERATE FORESTS +03094704,41.48305556,-80.7461111,EASTERN TEMPERATE FORESTS +03098600,41.10505807,-80.6625755,EASTERN TEMPERATE FORESTS +03102950,41.44283235,-80.58812999,EASTERN TEMPERATE FORESTS +03099500,41.03672598,-80.5361815,EASTERN TEMPERATE FORESTS +03201980,39.0106303,-82.452102,EASTERN TEMPERATE FORESTS +03090500,41.0483912,-81.0012032,EASTERN TEMPERATE FORESTS +07303400,35.01172,-99.9037143,GREAT PLAINS +07301500,35.16810838,-99.5073128,GREAT PLAINS +07239000,36.07698408,-98.59675,GREAT PLAINS +07150500,36.75252938,-98.1289547,GREAT PLAINS +07239450,35.6169933,-98.0653316,GREAT PLAINS +07239500,35.56310656,-97.9575498,GREAT PLAINS +07160350,36.3761449,-97.8003332,GREAT PLAINS +07239700,35.5394985,-97.7425442,GREAT PLAINS +07241000,35.47866848,-97.6633752,GREAT PLAINS +07241520,35.5656147,-97.367258,GREAT PLAINS +07151000,36.6719792,-97.3094887,GREAT PLAINS +07241550,35.5003412,-97.1939194,GREAT PLAINS +07316000,33.7278833,-97.1600129,GREAT PLAINS +07331000,34.23342725,-96.9758447,GREAT PLAINS +07152500,36.50421677,-96.7283672,GREAT PLAINS +07332390,34.383426,-96.6005579,GREAT PLAINS +07176950,36.4736793,-96.3789064,GREAT PLAINS +07164500,36.14064807,-96.0063866,GREAT PLAINS +07244100,35.45288179,-95.9558309,GREAT PLAINS +07177500,36.27842534,-95.954162,GREAT PLAINS +07178000,36.24870534,-95.867213,GREAT PLAINS +07178200,36.2231514,-95.8194322,GREAT PLAINS +07178520,36.27870806,-95.6113677,GREAT PLAINS +07335500,33.8751049,-95.5019023,EASTERN TEMPERATE FORESTS +07198000,35.5731511,-95.0688458,EASTERN TEMPERATE FORESTS +07185095,36.90006955,-94.8682878,GREAT PLAINS +07185090,36.94367956,-94.8532862,GREAT PLAINS +07191222,36.35535924,-94.7763388,EASTERN TEMPERATE FORESTS +07188007,36.9325,-94.7505556,EASTERN TEMPERATE FORESTS +07338905,34.13760816,-94.6879943,EASTERN TEMPERATE FORESTS +071912213,36.3225808,-94.6852238,EASTERN TEMPERATE FORESTS +07338920,34.0826099,-94.6349367,EASTERN TEMPERATE FORESTS +07338960,34.07261019,-94.6285476,EASTERN TEMPERATE FORESTS +07339000,34.04177757,-94.6199358,EASTERN TEMPERATE FORESTS +07335700,34.63843685,-94.6127236,EASTERN TEMPERATE FORESTS +07195500,36.13008185,-94.5721645,EASTERN TEMPERATE FORESTS +14306085,44.52055556,-124.07,MARINE WEST COAST FOREST +14372300,42.5784422,-124.0581443,NORTHWESTERN FORESTED MOUNTAINS +14306080,44.51027778,-124.0519444,MARINE WEST COAST FOREST +14306065,44.50305556,-124.0227778,MARINE WEST COAST FOREST +14372250,42.7137225,-123.887307,NORTHWESTERN FORESTED MOUNTAINS +14307620,44.06234317,-123.8831659,MARINE WEST COAST FOREST +14301000,45.7039986,-123.755405,MARINE WEST COAST FOREST +14301500,45.47593996,-123.7251209,MARINE WEST COAST FOREST +14302480,45.4462181,-123.7103974,MARINE WEST COAST FOREST +14320934,43.43122665,-123.5867573,MARINE WEST COAST FOREST +14321000,43.5859502,-123.5553727,MARINE WEST COAST FOREST +14370400,42.49650398,-123.4886759,NORTHWESTERN FORESTED MOUNTAINS +14312260,43.22289327,-123.4145199,NORTHWESTERN FORESTED MOUNTAINS +14319500,43.27205997,-123.4122993,NORTHWESTERN FORESTED MOUNTAINS +14369500,42.3540058,-123.4067276,NORTHWESTERN FORESTED MOUNTAINS +460923123235800,46.15622146,-123.4006829,NA +14361500,42.43039607,-123.3178365,NORTHWESTERN FORESTED MOUNTAINS +14169000,44.12345657,-123.2998173,MARINE WEST COAST FOREST +14170000,44.31290047,-123.2964859,MARINE WEST COAST FOREST +14202980,45.46927968,-123.200109,MARINE WEST COAST FOREST +14246900,46.18122136,-123.1834539,MARINE WEST COAST FOREST +14166000,44.27040126,-123.1737036,MARINE WEST COAST FOREST +14361700,42.02595759,-123.1706051,NORTHWESTERN FORESTED MOUNTAINS +452731123092100,45.4586111,-123.1559167,MARINE WEST COAST FOREST +14366000,42.2415113,-123.1400485,NORTHWESTERN FORESTED MOUNTAINS +14173500,44.62067728,-123.1289843,MARINE WEST COAST FOREST +14202650,45.44064167,-123.125,MARINE WEST COAST FOREST +14203500,45.4748365,-123.124274,MARINE WEST COAST FOREST +14171750,44.6415105,-123.117873,MARINE WEST COAST FOREST +14158100,44.09166667,-123.116111,MARINE WEST COAST FOREST +453040123065201,45.510878,-123.115666,MARINE WEST COAST FOREST +14362000,42.0637361,-123.1114358,NORTHWESTERN FORESTED MOUNTAINS +14174000,44.6387328,-123.1067616,MARINE WEST COAST FOREST +14152500,43.64151015,-123.0859089,NORTHWESTERN FORESTED MOUNTAINS +14205350,45.69385556,-123.0700194,MARINE WEST COAST FOREST +14205400,45.68233568,-123.069553,MARINE WEST COAST FOREST +14189050,44.7387325,-123.0498164,MARINE WEST COAST FOREST +14165500,44.11305556,-123.0469722,MARINE WEST COAST FOREST +14191000,44.9442863,-123.0428742,MARINE WEST COAST FOREST +14318000,43.2526179,-123.0261716,NORTHWESTERN FORESTED MOUNTAINS +14189000,44.7147222,-123.01425,MARINE WEST COAST FOREST +453113123003501,45.52022699,-123.0110247,MARINE WEST COAST FOREST +14317500,43.33067418,-123.0031172,NORTHWESTERN FORESTED MOUNTAINS +14317450,43.324563,-122.9997836,NORTHWESTERN FORESTED MOUNTAINS +14317600,43.34666389,-122.9925917,NORTHWESTERN FORESTED MOUNTAINS +14155500,43.7929012,-122.9914655,MARINE WEST COAST FOREST +14206241,45.50011635,-122.9912157,MARINE WEST COAST FOREST +14359000,42.43734597,-122.9872678,NORTHWESTERN FORESTED MOUNTAINS +14184100,44.70789976,-122.9728698,MARINE WEST COAST FOREST +14157500,43.98040324,-122.96647,MARINE WEST COAST FOREST +14164900,44.0712365,-122.9645273,MARINE WEST COAST FOREST +14197900,45.2845625,-122.9614893,MARINE WEST COAST FOREST +14245295,46.1003901,-122.9559447,MARINE WEST COAST FOREST +453030122560101,45.5081944,-122.9335,MARINE WEST COAST FOREST +453104122551201,45.51761657,-122.9212139,MARINE WEST COAST FOREST +14164700,44.059348,-122.9196644,MARINE WEST COAST FOREST +14152000,43.99818166,-122.9059126,MARINE WEST COAST FOREST +14206694,45.40150659,-122.8951003,MARINE WEST COAST FOREST +14164550,44.07066667,-122.8846667,MARINE WEST COAST FOREST +14154500,43.7359565,-122.8734019,NORTHWESTERN FORESTED MOUNTAINS +452230122512201,45.3748654,-122.8572543,MARINE WEST COAST FOREST +453004122510301,45.5009505,-122.852045,MARINE WEST COAST FOREST +14339000,42.5248471,-122.8428203,NORTHWESTERN FORESTED MOUNTAINS +14150000,43.9456815,-122.8372967,MARINE WEST COAST FOREST +453250122494501,45.5473472,-122.8291417,MARINE WEST COAST FOREST +14187500,44.4984564,-122.8234214,MARINE WEST COAST FOREST +14201300,45.10039816,-122.8217596,MARINE WEST COAST FOREST +453302122491600,45.5504861,-122.821075,MARINE WEST COAST FOREST +453312122485800,45.55334167,-122.8162278,MARINE WEST COAST FOREST +14338100,42.6473471,-122.8061552,NORTHWESTERN FORESTED MOUNTAINS +452727122474801,45.4576722,-122.7966556,MARINE WEST COAST FOREST +452718122474700,45.4551222,-122.7963056,MARINE WEST COAST FOREST +452738122474100,45.4606083,-122.7947806,MARINE WEST COAST FOREST +452559122472401,45.43284038,-122.7911617,MARINE WEST COAST FOREST +14172000,44.3512362,-122.7873068,MARINE WEST COAST FOREST +14151000,43.94429299,-122.774794,MARINE WEST COAST FOREST +14163900,44.0698492,-122.7711874,MARINE WEST COAST FOREST +452348122454701,45.3966131,-122.7629714,MARINE WEST COAST FOREST +14206950,45.403452,-122.7548185,MARINE WEST COAST FOREST +444728122450000,44.79095556,-122.7511989,MARINE WEST COAST FOREST +14202000,45.23317586,-122.7500933,MARINE WEST COAST FOREST +14337870,42.7109584,-122.7497655,NORTHWESTERN FORESTED MOUNTAINS +14338000,42.6787364,-122.7419867,NORTHWESTERN FORESTED MOUNTAINS +14337600,42.6554035,-122.7150408,NORTHWESTERN FORESTED MOUNTAINS +14337830,42.73040316,-122.7114313,NORTHWESTERN FORESTED MOUNTAINS +14335075,42.65957046,-122.6928179,NORTHWESTERN FORESTED MOUNTAINS +14337500,42.6512372,-122.6914288,NORTHWESTERN FORESTED MOUNTAINS +14187200,44.4123468,-122.6886956,MARINE WEST COAST FOREST +14150800,43.9142924,-122.6886762,MARINE WEST COAST FOREST +14335072,42.6658333,-122.6863889,NORTHWESTERN FORESTED MOUNTAINS +14207200,45.35650877,-122.6850937,MARINE WEST COAST FOREST +14183020,44.7782222,-122.6777222,MARINE WEST COAST FOREST +14207500,45.35067559,-122.6762044,MARINE WEST COAST FOREST +14337800,42.7734586,-122.6719864,NORTHWESTERN FORESTED MOUNTAINS +14211720,45.5175,-122.6691667,MARINE WEST COAST FOREST +14211550,45.452897,-122.6431496,MARINE WEST COAST FOREST +14211546,45.4606747,-122.642872,MARINE WEST COAST FOREST +14211542,45.47402778,-122.6417222,MARINE WEST COAST FOREST +14150300,43.97068174,-122.638674,NORTHWESTERN FORESTED MOUNTAINS +14183010,44.78805556,-122.636111,MARINE WEST COAST FOREST +14150290,43.9672222,-122.6297222,NORTHWESTERN FORESTED MOUNTAINS +14200400,44.95567759,-122.6284199,NORTHWESTERN FORESTED MOUNTAINS +14163150,44.123738,-122.6275715,NORTHWESTERN FORESTED MOUNTAINS +14207740,45.348454,-122.6200918,MARINE WEST COAST FOREST +14183000,44.7890109,-122.6186967,MARINE WEST COAST FOREST +14182500,44.7915108,-122.5789738,MARINE WEST COAST FOREST +14211010,45.3792874,-122.5773134,MARINE WEST COAST FOREST +14163000,44.1460861,-122.5730333,NORTHWESTERN FORESTED MOUNTAINS +14148000,43.80123517,-122.5608879,NORTHWESTERN FORESTED MOUNTAINS +14186200,44.44818005,-122.5503613,NORTHWESTERN FORESTED MOUNTAINS +14316500,43.29595427,-122.5367127,NORTHWESTERN FORESTED MOUNTAINS +14316495,43.3034543,-122.5303237,NORTHWESTERN FORESTED MOUNTAINS +14330000,42.72957187,-122.516147,NORTHWESTERN FORESTED MOUNTAINS +14316460,43.3059544,-122.5128232,NORTHWESTERN FORESTED MOUNTAINS +14211500,45.47745556,-122.5080194,MARINE WEST COAST FOREST +14334700,42.71234995,-122.5067018,NORTHWESTERN FORESTED MOUNTAINS +14147500,43.7567902,-122.5053292,NORTHWESTERN FORESTED MOUNTAINS +14211499,45.4767869,-122.4984239,MARINE WEST COAST FOREST +14185000,44.39179225,-122.4975817,NORTHWESTERN FORESTED MOUNTAINS +14182400,44.79345516,-122.4925835,NORTHWESTERN FORESTED MOUNTAINS +14162500,44.1248487,-122.47062,NORTHWESTERN FORESTED MOUNTAINS +14144800,43.60178867,-122.4575474,NORTHWESTERN FORESTED MOUNTAINS +14145500,43.72095655,-122.4378256,NORTHWESTERN FORESTED MOUNTAINS +14185900,44.54012357,-122.4359155,NORTHWESTERN FORESTED MOUNTAINS +14181750,44.7120665,-122.4275818,NORTHWESTERN FORESTED MOUNTAINS +14211400,45.4865092,-122.421757,MARINE WEST COAST FOREST +444516122243900,44.75452778,-122.4107222,NORTHWESTERN FORESTED MOUNTAINS +14314010,43.27151107,-122.4064305,NORTHWESTERN FORESTED MOUNTAINS +14162400,44.12818136,-122.3803393,NORTHWESTERN FORESTED MOUNTAINS +14185800,44.5151239,-122.3720249,NORTHWESTERN FORESTED MOUNTAINS +14144900,43.6804006,-122.3705999,NORTHWESTERN FORESTED MOUNTAINS +14181900,44.8356775,-122.354803,NORTHWESTERN FORESTED MOUNTAINS +14210000,45.29984346,-122.3539746,MARINE WEST COAST FOREST +14162200,44.16234819,-122.3331192,NORTHWESTERN FORESTED MOUNTAINS +14159800,44.15290358,-122.3317292,NORTHWESTERN FORESTED MOUNTAINS +14162050,44.1845,-122.3148056,NORTHWESTERN FORESTED MOUNTAINS +14181500,44.75377778,-122.2974444,NORTHWESTERN FORESTED MOUNTAINS +14161100,44.2179043,-122.2650676,NORTHWESTERN FORESTED MOUNTAINS +14161500,44.2095708,-122.256733,NORTHWESTERN FORESTED MOUNTAINS +14159110,44.1663755,-122.2565336,NORTHWESTERN FORESTED MOUNTAINS +14159500,44.13595817,-122.248391,NORTHWESTERN FORESTED MOUNTAINS +14142500,45.4490094,-122.2450885,NORTHWESTERN FORESTED MOUNTAINS +14159200,44.047067,-122.2178245,NORTHWESTERN FORESTED MOUNTAINS +14140020,45.43175906,-122.19542,NORTHWESTERN FORESTED MOUNTAINS +14140000,45.4373,-122.1796556,NORTHWESTERN FORESTED MOUNTAINS +14141500,45.41539777,-122.1714746,NORTHWESTERN FORESTED MOUNTAINS +14312600,43.25762536,-122.1705889,NORTHWESTERN FORESTED MOUNTAINS +14179100,44.76039965,-122.1684099,NORTHWESTERN FORESTED MOUNTAINS +14209710,45.16706506,-122.1561923,NORTHWESTERN FORESTED MOUNTAINS +14209700,45.14762079,-122.1531366,NORTHWESTERN FORESTED MOUNTAINS +14180300,44.65289999,-122.130908,NORTHWESTERN FORESTED MOUNTAINS +14179000,44.75262179,-122.1289648,NORTHWESTERN FORESTED MOUNTAINS +14139800,45.444564,-122.1095292,NORTHWESTERN FORESTED MOUNTAINS +14178000,44.7067885,-122.1011859,NORTHWESTERN FORESTED MOUNTAINS +11510700,42.0845877,-122.0733453,NORTHWESTERN FORESTED MOUNTAINS +14158980,44.1840106,-122.0600545,NORTHWESTERN FORESTED MOUNTAINS +14158850,44.2679001,-122.0497826,NORTHWESTERN FORESTED MOUNTAINS +14158798,44.28988889,-122.0485833,NORTHWESTERN FORESTED MOUNTAINS +14158790,44.3345666,-122.0470074,NORTHWESTERN FORESTED MOUNTAINS +453630122021400,45.60817305,-122.0384174,NORTHWESTERN FORESTED MOUNTAINS +14158740,44.28638889,-122.0368056,NORTHWESTERN FORESTED MOUNTAINS +14138900,45.4942856,-122.0359167,NORTHWESTERN FORESTED MOUNTAINS +14128910,45.6123396,-122.0275838,NORTHWESTERN FORESTED MOUNTAINS +14138870,45.48011889,-122.0256385,NORTHWESTERN FORESTED MOUNTAINS +14138850,45.4981743,-122.0123049,NORTHWESTERN FORESTED MOUNTAINS +14158500,44.3609545,-121.9956172,NORTHWESTERN FORESTED MOUNTAINS +11509500,42.13319946,-121.9622313,NORTHWESTERN FORESTED MOUNTAINS +11504115,42.58155556,-121.9417028,NORTHWESTERN FORESTED MOUNTAINS +11509370,42.12792225,-121.9288964,NORTHWESTERN FORESTED MOUNTAINS +420741121554001,42.12805556,-121.9277778,NORTHWESTERN FORESTED MOUNTAINS +11502500,42.564375,-121.8797139,NORTHWESTERN FORESTED MOUNTAINS +14138720,45.4709515,-121.8653567,NORTHWESTERN FORESTED MOUNTAINS +420451121510000,42.0808333,-121.85,NORTHWESTERN FORESTED MOUNTAINS +11501000,42.58430556,-121.8483333,NORTHWESTERN FORESTED MOUNTAINS +420448121503100,42.07988889,-121.8419444,NORTHWESTERN FORESTED MOUNTAINS +420732121501100,42.12555278,-121.8363667,NORTHWESTERN FORESTED MOUNTAINS +421401121480900,42.2336111,-121.8025,NORTHWESTERN FORESTED MOUNTAINS +421330121474700,42.22502778,-121.7964722,NORTHWESTERN FORESTED MOUNTAINS +11507500,42.22347795,-121.7941708,NORTHWESTERN FORESTED MOUNTAINS +11507501,42.2193114,-121.7902816,NORTHWESTERN FORESTED MOUNTAINS +421015121471800,42.1708333,-121.7883333,NORTHWESTERN FORESTED MOUNTAINS +14070615,44.03711389,-121.6327694,NORTHWESTERN FORESTED MOUNTAINS +14070621,44.03706667,-121.6325889,NORTHWESTERN FORESTED MOUNTAINS +14070624,44.03722778,-121.6325639,NORTHWESTERN FORESTED MOUNTAINS +14070900,44.0310833,-121.5678333,NORTHWESTERN FORESTED MOUNTAINS +14091500,44.6262275,-121.4839433,NORTHWESTERN FORESTED MOUNTAINS +14076500,44.4987293,-121.3211558,NORTHWESTERN FORESTED MOUNTAINS +14087400,44.4923407,-121.298377,NORTHWESTERN FORESTED MOUNTAINS +14063300,43.71289877,-121.278633,NORTHWESTERN FORESTED MOUNTAINS +14092500,44.72595225,-121.2469939,NORTHWESTERN FORESTED MOUNTAINS +11497500,42.44775,-121.2385278,NORTHWESTERN FORESTED MOUNTAINS +14087380,44.4268972,-121.2328728,NORTHWESTERN FORESTED MOUNTAINS +14105700,45.60827778,-121.1899167,NORTH AMERICAN DESERTS +14103000,45.6220678,-120.9056203,NORTH AMERICAN DESERTS +14046890,44.91040697,-120.4408632,NORTHWESTERN FORESTED MOUNTAINS +14046778,44.7267988,-120.301965,NORTHWESTERN FORESTED MOUNTAINS +14034500,45.3504062,-119.5500218,NORTH AMERICAN DESERTS +14034470,45.34068289,-119.5158544,NORTH AMERICAN DESERTS +10396000,42.7908333,-118.8675,NORTH AMERICAN DESERTS +424547118503500,42.76296389,-118.843111,NORTH AMERICAN DESERTS +424551118503200,42.7640722,-118.8423167,NORTH AMERICAN DESERTS +424325118495900,42.72374167,-118.8330667,NORTH AMERICAN DESERTS +14043840,44.692625,-118.7943083,NORTHWESTERN FORESTED MOUNTAINS +423815118453900,42.637425,-118.7607722,NORTH AMERICAN DESERTS +424003118453700,42.66755,-118.76015,NORTH AMERICAN DESERTS +423830118453200,42.64180278,-118.7589944,NORTH AMERICAN DESERTS +14012995,45.988425,-118.0919,NORTHWESTERN FORESTED MOUNTAINS +13324300,45.73180826,-117.8649308,NORTHWESTERN FORESTED MOUNTAINS +13331500,45.6198669,-117.7265892,NORTHWESTERN FORESTED MOUNTAINS +13173600,43.7309932,-117.0718258,NORTH AMERICAN DESERTS +14153500,43.72067785,-123.0497994,MARINE WEST COAST FOREST +420615121533601,42.10416667,-121.8933333,NORTHWESTERN FORESTED MOUNTAINS +420615121533600,42.10416667,-121.8933333,NORTHWESTERN FORESTED MOUNTAINS +420853121505501,42.14805556,-121.848611,NORTHWESTERN FORESTED MOUNTAINS +420853121505500,42.14805556,-121.848611,NORTHWESTERN FORESTED MOUNTAINS +421209121463001,42.2025,-121.775,NORTHWESTERN FORESTED MOUNTAINS +421209121463000,42.2025,-121.775,NORTHWESTERN FORESTED MOUNTAINS +03103500,41.2661668,-80.4725697,EASTERN TEMPERATE FORESTS +03102850,41.3536663,-80.3978453,EASTERN TEMPERATE FORESTS +03108490,40.6489546,-80.3833975,EASTERN TEMPERATE FORESTS +03104490,41.01813889,-80.3632778,EASTERN TEMPERATE FORESTS +03105500,40.88867389,-80.3370083,EASTERN TEMPERATE FORESTS +03106000,40.8170092,-80.2422837,EASTERN TEMPERATE FORESTS +04213152,42.07388889,-80.2347222,EASTERN TEMPERATE FORESTS +03022554,41.69588905,-80.1081133,EASTERN TEMPERATE FORESTS +03073000,39.92313056,-80.072558,EASTERN TEMPERATE FORESTS +03022540,41.6906115,-80.04811219,EASTERN TEMPERATE FORESTS +03024000,41.43755525,-79.9558912,NORTHERN FORESTS +03072655,39.82507696,-79.9228329,EASTERN TEMPERATE FORESTS +03075070,40.26229225,-79.9011597,EASTERN TEMPERATE FORESTS +03071690,39.73166667,-79.8902778,EASTERN TEMPERATE FORESTS +03085002,40.3925,-79.8602778,EASTERN TEMPERATE FORESTS +03071605,39.72233056,-79.858925,EASTERN TEMPERATE FORESTS +03085000,40.39118024,-79.8581042,EASTERN TEMPERATE FORESTS +03025500,41.3895027,-79.8203322,NORTHERN FORESTS +03049640,40.5361788,-79.8147714,EASTERN TEMPERATE FORESTS +03083500,40.2402222,-79.8066944,EASTERN TEMPERATE FORESTS +03049625,40.5645116,-79.7725485,EASTERN TEMPERATE FORESTS +03039041,40.68555556,-79.6686111,EASTERN TEMPERATE FORESTS +03039040,40.6847222,-79.6675,EASTERN TEMPERATE FORESTS +03070455,39.76896528,-79.6092109,EASTERN TEMPERATE FORESTS +03082500,40.01752778,-79.5932222,EASTERN TEMPERATE FORESTS +03070420,39.76424306,-79.58698789,EASTERN TEMPERATE FORESTS +03039036,40.715,-79.5811111,EASTERN TEMPERATE FORESTS +03039035,40.71666667,-79.5811111,EASTERN TEMPERATE FORESTS +03039000,40.7203422,-79.5114332,EASTERN TEMPERATE FORESTS +03047000,40.45888889,-79.4494444,EASTERN TEMPERATE FORESTS +03020000,41.47784,-79.4439351,NORTHERN FORESTS +03044000,40.4545117,-79.3908724,EASTERN TEMPERATE FORESTS +03045010,40.3161111,-79.3908333,EASTERN TEMPERATE FORESTS +03081000,39.8275767,-79.3725353,EASTERN TEMPERATE FORESTS +03077100,39.80138889,-79.3686111,EASTERN TEMPERATE FORESTS +03043810,40.46756718,-79.3672609,EASTERN TEMPERATE FORESTS +03077500,39.80535485,-79.3642019,EASTERN TEMPERATE FORESTS +03038000,40.6547875,-79.3486511,EASTERN TEMPERATE FORESTS +03015795,41.64200548,-79.3381018,NORTHERN FORESTS +03036000,40.9275653,-79.2911508,EASTERN TEMPERATE FORESTS +03037525,40.7189537,-79.2364269,EASTERN TEMPERATE FORESTS +03079000,39.85991667,-79.2288333,EASTERN TEMPERATE FORESTS +03042000,40.4770127,-79.1867009,EASTERN TEMPERATE FORESTS +03034500,40.8361756,-79.1100356,EASTERN TEMPERATE FORESTS +03017500,41.60200599,-79.0500392,NORTHERN FORESTS +03041500,40.4192377,-79.0261404,EASTERN TEMPERATE FORESTS +03012550,41.84144917,-79.0119846,NORTHERN FORESTS +03034000,40.93923105,-79.00836738,EASTERN TEMPERATE FORESTS +03011800,41.76645099,-78.71863999,NORTHERN FORESTS +03028000,41.57533955,-78.69224919,NORTHERN FORESTS +03028500,41.48617269,-78.6783595,NORTHERN FORESTS +01559795,40.2725763,-78.5983506,EASTERN TEMPERATE FORESTS +03027500,41.5531176,-78.5961347,NORTHERN FORESTS +03026480,41.64405556,-78.5314444,NORTHERN FORESTS +03007800,41.81867578,-78.29279129,NORTHERN FORESTS +01542500,41.11755906,-78.108896,EASTERN TEMPERATE FORESTS +01563200,40.42896398,-77.9911135,EASTERN TEMPERATE FORESTS +01544500,41.4758994,-77.8258251,NORTHERN FORESTS +01547400,40.97533846,-77.7427797,EASTERN TEMPERATE FORESTS +01547950,41.1117307,-77.7022159,EASTERN TEMPERATE FORESTS +01545600,41.38951168,-77.6908191,NORTHERN FORESTS +01547500,41.05173127,-77.6044379,EASTERN TEMPERATE FORESTS +01564997,40.66173647,-77.5999947,EASTERN TEMPERATE FORESTS +01548303,41.78479405,-77.4019232,NORTHERN FORESTS +01549700,41.273683,-77.32414028,EASTERN TEMPERATE FORESTS +01549500,41.47368336,-77.230809,NORTHERN FORESTS +01549350,41.49424019,-77.1505286,NORTHERN FORESTS +01549300,41.4953513,-77.1502508,NORTHERN FORESTS +01520000,41.99674048,-77.1399724,EASTERN TEMPERATE FORESTS +01567000,40.47841677,-77.1291484,EASTERN TEMPERATE FORESTS +01518700,41.95257385,-77.1152486,EASTERN TEMPERATE FORESTS +01549100,41.56785194,-77.1013593,EASTERN TEMPERATE FORESTS +01551500,41.23618985,-76.996634,EASTERN TEMPERATE FORESTS +01571490,40.2250901,-76.90636279,EASTERN TEMPERATE FORESTS +01573660,40.1533333,-76.7555556,EASTERN TEMPERATE FORESTS +01574000,40.0809008,-76.7180813,EASTERN TEMPERATE FORESTS +01555400,40.6634186,-76.69135408,EASTERN TEMPERATE FORESTS +01573710,40.14930556,-76.68775,EASTERN TEMPERATE FORESTS +01575598,40.0522222,-76.6544444,EASTERN TEMPERATE FORESTS +01540500,40.95814218,-76.6191222,EASTERN TEMPERATE FORESTS +01573695,40.19527778,-76.56777778,EASTERN TEMPERATE FORESTS +01576007,40.01416667,-76.5480556,EASTERN TEMPERATE FORESTS +01576000,40.0545413,-76.5307992,EASTERN TEMPERATE FORESTS +01575900,40.0628745,-76.5155214,EASTERN TEMPERATE FORESTS +01576045,39.94194444,-76.50027778,EASTERN TEMPERATE FORESTS +01577300,39.80760259,-76.47579759,EASTERN TEMPERATE FORESTS +01571774,40.5922222,-76.4394444,EASTERN TEMPERATE FORESTS +01571778,40.5875889,-76.4260683,EASTERN TEMPERATE FORESTS +01571820,40.58064485,-76.4046785,EASTERN TEMPERATE FORESTS +01576980,39.82788027,-76.33329279,EASTERN TEMPERATE FORESTS +01577500,39.77260378,-76.3157919,EASTERN TEMPERATE FORESTS +01576540,40.0100985,-76.2771806,EASTERN TEMPERATE FORESTS +015765195,39.9959361,-76.26403889,EASTERN TEMPERATE FORESTS +015765185,39.99119167,-76.26395278,EASTERN TEMPERATE FORESTS +01576516,39.99154444,-76.2609306,EASTERN TEMPERATE FORESTS +01467688,40.70422839,-76.2493078,EASTERN TEMPERATE FORESTS +01467861,40.6687722,-76.2379444,EASTERN TEMPERATE FORESTS +01467752,40.6686861,-76.2364222,EASTERN TEMPERATE FORESTS +01470779,40.4134258,-76.1716128,EASTERN TEMPERATE FORESTS +01467492,40.69381944,-76.1649556,EASTERN TEMPERATE FORESTS +01467471,40.6937472,-76.1647722,EASTERN TEMPERATE FORESTS +01470960,40.3706482,-76.0252159,EASTERN TEMPERATE FORESTS +01469700,40.77314556,-75.9565925,EASTERN TEMPERATE FORESTS +01478185,39.8325833,-75.8450833,EASTERN TEMPERATE FORESTS +01480400,40.0273261,-75.8449449,EASTERN TEMPERATE FORESTS +01480500,39.98566144,-75.8274467,EASTERN TEMPERATE FORESTS +01480629,39.9295515,-75.82300028,EASTERN TEMPERATE FORESTS +01480617,39.9617734,-75.8013341,EASTERN TEMPERATE FORESTS +01478220,39.76566619,-75.7960492,EASTERN TEMPERATE FORESTS +01478100,39.8584423,-75.7832743,EASTERN TEMPERATE FORESTS +01478120,39.8284429,-75.780773,EASTERN TEMPERATE FORESTS +01478137,39.8217764,-75.7791061,EASTERN TEMPERATE FORESTS +01478245,39.7475,-75.7708333,EASTERN TEMPERATE FORESTS +01471875,40.339538,-75.7421359,EASTERN TEMPERATE FORESTS +01447800,41.1048062,-75.7321362,NORTHERN FORESTS +01480685,40.05538195,-75.71632459,EASTERN TEMPERATE FORESTS +01480870,39.9687191,-75.6732715,EASTERN TEMPERATE FORESTS +01449800,40.84564756,-75.6457437,EASTERN TEMPERATE FORESTS +01447500,41.1303626,-75.625467,NORTHERN FORESTS +01447720,41.0848082,-75.6054666,NORTHERN FORESTS +01451400,40.5340833,-75.6014722,EASTERN TEMPERATE FORESTS +01472157,40.15149064,-75.601305,EASTERN TEMPERATE FORESTS +01451380,40.53120755,-75.60046519,EASTERN TEMPERATE FORESTS +01481000,39.8698328,-75.5932623,EASTERN TEMPERATE FORESTS +01472104,40.20621166,-75.5654631,EASTERN TEMPERATE FORESTS +01451467,40.5216111,-75.5083333,NORTHERN FORESTS +01449360,40.8975919,-75.5024077,EASTERN TEMPERATE FORESTS +01451630,40.5875,-75.4968056,EASTERN TEMPERATE FORESTS +01451500,40.5823197,-75.48296088,EASTERN TEMPERATE FORESTS +01451650,40.59648637,-75.4740717,EASTERN TEMPERATE FORESTS +01473169,40.07927367,-75.46074808,EASTERN TEMPERATE FORESTS +01473000,40.22954725,-75.451567,EASTERN TEMPERATE FORESTS +01428750,41.67452998,-75.37601299,EASTERN TEMPERATE FORESTS +01477050,39.83677934,-75.36630199,EASTERN TEMPERATE FORESTS +01473500,40.11555556,-75.3561111,EASTERN TEMPERATE FORESTS +01473470,40.12733007,-75.3449047,EASTERN TEMPERATE FORESTS +01429000,41.58730898,-75.3268449,EASTERN TEMPERATE FORESTS +01475530,39.97483455,-75.2799067,EASTERN TEMPERATE FORESTS +01427195,41.84027778,-75.2383333,EASTERN TEMPERATE FORESTS +01454700,40.6692656,-75.23628808,EASTERN TEMPERATE FORESTS +01440400,41.0848148,-75.2146251,NORTHERN FORESTS +01427207,41.86727778,-75.21375,EASTERN TEMPERATE FORESTS +01454720,40.68676549,-75.2085098,EASTERN TEMPERATE FORESTS +01474703,39.8792798,-75.20268029,EASTERN TEMPERATE FORESTS +01446700,40.7120429,-75.1962874,EASTERN TEMPERATE FORESTS +01431500,41.4762002,-75.1721186,NORTHERN FORESTS +01464907,40.22927456,-75.119616,EASTERN TEMPERATE FORESTS +01432055,41.46941667,-75.1089444,NORTHERN FORESTS +01467087,40.0159454,-75.0968411,EASTERN TEMPERATE FORESTS +01460200,40.41843797,-75.0612817,EASTERN TEMPERATE FORESTS +01427510,41.75675,-75.0574167,EASTERN TEMPERATE FORESTS +01439500,41.08815078,-75.03767469,NORTHERN FORESTS +01432110,41.4759228,-75.036281,NORTHERN FORESTS +01440090,41.0445405,-75.0279524,EASTERN TEMPERATE FORESTS +014670261,40.0385,-74.9936111,EASTERN TEMPERATE FORESTS +01465500,40.1739982,-74.9568342,EASTERN TEMPERATE FORESTS +01432495,41.45,-74.9216667,NORTHERN FORESTS +01432160,41.47536824,-74.91238898,NORTHERN FORESTS +01464600,40.0820552,-74.8657206,EASTERN TEMPERATE FORESTS +01432805,41.43875,-74.81913889,NORTHERN FORESTS +01438500,41.30916667,-74.79527778,EASTERN TEMPERATE FORESTS +01434000,41.3706493,-74.6973853,EASTERN TEMPERATE FORESTS +394533079581501,39.7592449,-79.9706152,EASTERN TEMPERATE FORESTS +394337079544201,39.72702308,-79.9114471,EASTERN TEMPERATE FORESTS +0157155010,40.65953336,-76.3468965,EASTERN TEMPERATE FORESTS +0157155014,40.65786674,-76.344952,EASTERN TEMPERATE FORESTS +01115187,41.8187102,-71.7050677,EASTERN TEMPERATE FORESTS +01115190,41.8223213,-71.70034528,EASTERN TEMPERATE FORESTS +01115265,41.7906548,-71.6986785,EASTERN TEMPERATE FORESTS +01115275,41.7825994,-71.67478879,EASTERN TEMPERATE FORESTS +01115276,41.7853772,-71.6672885,EASTERN TEMPERATE FORESTS +01115280,41.80398827,-71.6497879,EASTERN TEMPERATE FORESTS +01115297,41.7648219,-71.6356207,EASTERN TEMPERATE FORESTS +01115184,41.7887107,-71.6200647,EASTERN TEMPERATE FORESTS +01115114,41.83759929,-71.6120089,EASTERN TEMPERATE FORESTS +01115110,41.8456548,-71.6095088,EASTERN TEMPERATE FORESTS +01115120,41.8314882,-71.6089532,EASTERN TEMPERATE FORESTS +01115098,41.8525992,-71.6061754,EASTERN TEMPERATE FORESTS +01115183,41.79759966,-71.5847857,EASTERN TEMPERATE FORESTS +01115170,41.84093269,-71.584508,EASTERN TEMPERATE FORESTS +02163001,34.6148366,-82.44401468,EASTERN TEMPERATE FORESTS +02197320,33.21709215,-81.7676135,EASTERN TEMPERATE FORESTS +02197342,33.24459134,-81.6956676,EASTERN TEMPERATE FORESTS +02197348,33.15959449,-81.6853896,EASTERN TEMPERATE FORESTS +021973455,33.2126481,-81.6751116,EASTERN TEMPERATE FORESTS +021973426,33.239036,-81.6734449,EASTERN TEMPERATE FORESTS +021973471,33.2034818,-81.6473333,EASTERN TEMPERATE FORESTS +02197353,33.16181667,-81.6323329,EASTERN TEMPERATE FORESTS +02172300,33.75347736,-81.6017714,EASTERN TEMPERATE FORESTS +02160700,34.5093039,-81.5981594,EASTERN TEMPERATE FORESTS +02197351,33.23153644,-81.584832,EASTERN TEMPERATE FORESTS +02197362,33.2351474,-81.5831653,EASTERN TEMPERATE FORESTS +02167600,34.09930647,-81.5684382,EASTERN TEMPERATE FORESTS +02167716,34.0795843,-81.5617714,EASTERN TEMPERATE FORESTS +02160105,34.5354163,-81.548158,EASTERN TEMPERATE FORESTS +02197380,33.2354253,-81.5164973,EASTERN TEMPERATE FORESTS +021973537,33.5626463,-81.4831609,EASTERN TEMPERATE FORESTS +02156500,34.5951393,-81.4212089,EASTERN TEMPERATE FORESTS +02160991,34.26070285,-81.3303747,EASTERN TEMPERATE FORESTS +02168504,34.0509822,-81.2095418,EASTERN TEMPERATE FORESTS +02198744,32.35227778,-81.1605556,EASTERN TEMPERATE FORESTS +021989784,32.18575747,-81.11789,EASTERN TEMPERATE FORESTS +02169000,34.0140416,-81.0878717,EASTERN TEMPERATE FORESTS +02162035,34.0483333,-81.0733333,EASTERN TEMPERATE FORESTS +021473428,34.88927778,-81.0686944,EASTERN TEMPERATE FORESTS +021473423,34.944032,-81.0678556,EASTERN TEMPERATE FORESTS +0219897993,32.10305556,-81.0069444,EASTERN TEMPERATE FORESTS +02145910,35.01641944,-81.00156389,EASTERN TEMPERATE FORESTS +02176711,32.2236111,-80.9202778,EASTERN TEMPERATE FORESTS +021474095,34.5579783,-80.8931627,EASTERN TEMPERATE FORESTS +02147310,34.59805556,-80.8905556,EASTERN TEMPERATE FORESTS +02147505,34.5411111,-80.8752778,EASTERN TEMPERATE FORESTS +02176720,32.23166667,-80.8694444,EASTERN TEMPERATE FORESTS +02176735,32.21305556,-80.8333333,EASTERN TEMPERATE FORESTS +02176560,32.38725,-80.7795278,NA +02176635,32.3771401,-80.7145514,EASTERN TEMPERATE FORESTS +02147801,34.33542657,-80.7020242,EASTERN TEMPERATE FORESTS +02176587,32.45324693,-80.7017729,EASTERN TEMPERATE FORESTS +02176585,32.47407909,-80.692606,NA +02176589,32.45408014,-80.6817728,NA +02176611,32.39463887,-80.6753845,NA +02176603,32.42741485,-80.669273,NA +02176640,32.35019676,-80.668996,EASTERN TEMPERATE FORESTS +02148000,34.24459385,-80.6539697,EASTERN TEMPERATE FORESTS +02148315,33.82848933,-80.6203645,EASTERN TEMPERATE FORESTS +02175000,33.02794645,-80.3914876,EASTERN TEMPERATE FORESTS +02172076,33.08655693,-80.2650951,EASTERN TEMPERATE FORESTS +02172080,32.9685046,-80.2528745,EASTERN TEMPERATE FORESTS +02172081,32.95878299,-80.2009279,EASTERN TEMPERATE FORESTS +021720816,32.95239446,-80.1700934,EASTERN TEMPERATE FORESTS +021720812,32.94878346,-80.1662044,EASTERN TEMPERATE FORESTS +021720817,32.9507279,-80.15925959,EASTERN TEMPERATE FORESTS +021720825,32.92583333,-80.1516667,EASTERN TEMPERATE FORESTS +021720813,33.0354483,-80.1453686,EASTERN TEMPERATE FORESTS +02171500,33.45377778,-80.1413611,EASTERN TEMPERATE FORESTS +02172002,33.21491667,-79.9749167,EASTERN TEMPERATE FORESTS +021720677,32.89045228,-79.9628645,EASTERN TEMPERATE FORESTS +02172040,33.0569722,-79.9584722,EASTERN TEMPERATE FORESTS +0217206935,32.85569444,-79.9526667,EASTERN TEMPERATE FORESTS +02172020,33.0935042,-79.9489708,EASTERN TEMPERATE FORESTS +0217206110,32.97988889,-79.9413056,EASTERN TEMPERATE FORESTS +02172050,33.05766667,-79.9357778,EASTERN TEMPERATE FORESTS +02172053,32.9835058,-79.9228612,EASTERN TEMPERATE FORESTS +02171645,33.4275,-79.915,EASTERN TEMPERATE FORESTS +021720508,33.01577778,-79.90675,EASTERN TEMPERATE FORESTS +0217206962,32.92130556,-79.82438889,EASTERN TEMPERATE FORESTS +02131221,33.88544254,-79.4103316,EASTERN TEMPERATE FORESTS +02171905,33.15433435,-79.3542237,EASTERN TEMPERATE FORESTS +02135000,34.05675,-79.2477222,EASTERN TEMPERATE FORESTS +02135060,33.9734987,-79.2406007,EASTERN TEMPERATE FORESTS +02110815,33.44461245,-79.1739341,EASTERN TEMPERATE FORESTS +02135200,33.6610024,-79.1544874,EASTERN TEMPERATE FORESTS +021108125,33.50655724,-79.1269867,EASTERN TEMPERATE FORESTS +02110802,33.64905837,-79.09420639,EASTERN TEMPERATE FORESTS +02110809,33.56211324,-79.08587299,EASTERN TEMPERATE FORESTS +02110704,33.8326111,-79.0437222,EASTERN TEMPERATE FORESTS +02110701,33.86100349,-79.0411471,EASTERN TEMPERATE FORESTS +02110725,33.6871151,-79.0047569,EASTERN TEMPERATE FORESTS +02110550,33.8508333,-78.8972222,EASTERN TEMPERATE FORESTS +02110760,33.74072759,-78.8666928,EASTERN TEMPERATE FORESTS +02110755,33.7985057,-78.75307469,EASTERN TEMPERATE FORESTS +02110400,33.953505,-78.71973988,EASTERN TEMPERATE FORESTS +02110770,33.82128347,-78.7186287,EASTERN TEMPERATE FORESTS +02110500,33.9126719,-78.7150175,EASTERN TEMPERATE FORESTS +02110777,33.8515612,-78.6558483,EASTERN TEMPERATE FORESTS +06436760,44.65265259,-103.366697,GREAT PLAINS +06402600,43.5019636,-103.0744103,GREAT PLAINS +06408650,43.8980449,-102.6440611,GREAT PLAINS +06473000,44.99830768,-98.480927,GREAT PLAINS +06471000,45.6035795,-98.3103756,GREAT PLAINS +06466700,42.85583236,-97.885346,GREAT PLAINS +06478500,43.1858255,-97.635622,GREAT PLAINS +06467500,42.86610887,-97.3939479,GREAT PLAINS +06480000,44.1802473,-96.749496,GREAT PLAINS +06481000,43.79044595,-96.7456623,GREAT PLAINS +06482020,43.56700265,-96.7113274,GREAT PLAINS +07030392,35.03258978,-89.246736,EASTERN TEMPERATE FORESTS +03604000,35.49590598,-87.8328037,EASTERN TEMPERATE FORESTS +03434870,36.3147222,-87.2161111,EASTERN TEMPERATE FORESTS +03601630,35.87201008,-87.103895,EASTERN TEMPERATE FORESTS +03433640,35.9053426,-87.0988948,EASTERN TEMPERATE FORESTS +03434500,36.1220032,-87.09889379,EASTERN TEMPERATE FORESTS +03433641,35.9053426,-87.0977837,EASTERN TEMPERATE FORESTS +03584600,35.0142361,-86.9946574,EASTERN TEMPERATE FORESTS +03432550,35.9253419,-86.9694474,EASTERN TEMPERATE FORESTS +03433500,36.0545633,-86.9285102,EASTERN TEMPERATE FORESTS +034324146,35.9581186,-86.88972369,EASTERN TEMPERATE FORESTS +0343233905,35.89984185,-86.8428894,EASTERN TEMPERATE FORESTS +03431514,36.1831118,-86.8322218,EASTERN TEMPERATE FORESTS +03431091,36.1653343,-86.7213866,EASTERN TEMPERATE FORESTS +03431083,36.16394545,-86.699164,EASTERN TEMPERATE FORESTS +03432100,35.83256495,-86.6988861,EASTERN TEMPERATE FORESTS +03430200,36.1864446,-86.6327739,EASTERN TEMPERATE FORESTS +03582000,35.1345274,-86.5397166,EASTERN TEMPERATE FORESTS +03598000,35.48035,-86.4991609,EASTERN TEMPERATE FORESTS +03597860,35.48290044,-86.4625967,EASTERN TEMPERATE FORESTS +03428200,35.90284234,-86.4299923,EASTERN TEMPERATE FORESTS +03428180,35.8989535,-86.42554779,EASTERN TEMPERATE FORESTS +03571850,35.011469,-85.6974703,EASTERN TEMPERATE FORESTS +361341084253900,36.2281343,-84.4274356,EASTERN TEMPERATE FORESTS +361240084245800,36.21118975,-84.4160458,EASTERN TEMPERATE FORESTS +03407876,36.23960664,-84.4129769,EASTERN TEMPERATE FORESTS +03407875,36.21100366,-84.4051509,EASTERN TEMPERATE FORESTS +03560110,34.99341344,-84.3818677,EASTERN TEMPERATE FORESTS +03403718,36.45702424,-84.1582614,EASTERN TEMPERATE FORESTS +03495500,36.0156395,-83.8315703,EASTERN TEMPERATE FORESTS +03497300,35.66453328,-83.7112821,EASTERN TEMPERATE FORESTS +08364000,31.80288488,-106.5408218,NORTH AMERICAN DESERTS +08374550,29.13798,-103.5249033,NORTH AMERICAN DESERTS +07227500,35.4703261,-101.879628,GREAT PLAINS +08123800,32.1992913,-101.0140029,GREAT PLAINS +08120700,32.47733745,-100.9498382,GREAT PLAINS +08121000,32.39261865,-100.8787246,GREAT PLAINS +08123850,32.05374399,-100.762052,GREAT PLAINS +07299890,34.93560669,-100.6965246,GREAT PLAINS +07299540,34.56922728,-100.1940023,GREAT PLAINS +07307800,34.2275718,-100.0737179,GREAT PLAINS +08126380,31.71542973,-100.0264755,GREAT PLAINS +08127000,31.74931697,-99.9478636,GREAT PLAINS +08136500,31.5159908,-99.9195226,GREAT PLAINS +07311800,33.644257,-99.8009252,GREAT PLAINS +07311700,33.82064216,-99.7864822,GREAT PLAINS +08195000,29.48856496,-99.7047756,GREAT PLAINS +07311900,33.70036966,-99.3886905,GREAT PLAINS +08138000,31.46793807,-99.1622726,GREAT PLAINS +07312100,33.7600934,-99.1428495,GREAT PLAINS +08086212,32.73289717,-99.1406299,GREAT PLAINS +08086290,32.64845613,-99.0045146,GREAT PLAINS +07312200,33.90592785,-98.9050666,GREAT PLAINS +07312130,33.86926267,-98.839231,GREAT PLAINS +08180700,29.33495798,-98.689744,GREAT PLAINS +08180850,29.24685278,-98.5487944,GREAT PLAINS +07312500,33.90954178,-98.5336663,GREAT PLAINS +07308500,34.11009327,-98.5317234,GREAT PLAINS +08181500,29.2641276,-98.4908493,GREAT PLAINS +08177825,29.46163889,-98.4684167,GREAT PLAINS +08178800,29.35718017,-98.4127925,GREAT PLAINS +08181800,29.2221853,-98.3558463,EASTERN TEMPERATE FORESTS +07312700,34.0531504,-98.2967139,GREAT PLAINS +08169000,29.70640833,-98.1222083,GREAT PLAINS +08171000,29.9943808,-98.088898,GREAT PLAINS +08171290,30.00555556,-97.9525,GREAT PLAINS +08211200,27.93779594,-97.7758308,GREAT PLAINS +08188060,28.84869444,-97.7371389,EASTERN TEMPERATE FORESTS +08211450,27.86527778,-97.6386111,GREAT PLAINS +08211503,27.8969652,-97.6255509,GREAT PLAINS +08048000,32.76096337,-97.3325167,GREAT PLAINS +08159200,30.10466154,-97.3194368,EASTERN TEMPERATE FORESTS +08048543,32.7517972,-97.2894598,GREAT PLAINS +08048980,32.64124563,-97.2422358,GREAT PLAINS +08049553,32.8947222,-97.0822222,GREAT PLAINS +08049565,32.86734948,-97.039175,GREAT PLAINS +08049569,32.83555556,-97.0358333,GREAT PLAINS +08049500,32.7625,-96.9944444,GREAT PLAINS +08052700,33.28344977,-96.8927805,GREAT PLAINS +08052745,33.2192846,-96.8919475,GREAT PLAINS +08057000,32.7748517,-96.8219464,GREAT PLAINS +08057055,32.7521361,-96.7825528,GREAT PLAINS +08057410,32.70763139,-96.7358319,GREAT PLAINS +08057448,32.6176342,-96.6222148,GREAT PLAINS +08064100,32.1984823,-96.5202639,GREAT PLAINS +08062500,32.42652988,-96.4630415,EASTERN TEMPERATE FORESTS +08062700,32.14765255,-96.1024708,EASTERN TEMPERATE FORESTS +07332620,33.6822222,-95.9844444,EASTERN TEMPERATE FORESTS +07332622,33.74416667,-95.9611111,EASTERN TEMPERATE FORESTS +08065350,31.33851319,-95.6563407,EASTERN TEMPERATE FORESTS +08068275,30.11993899,-95.6460559,EASTERN TEMPERATE FORESTS +08067900,30.25377778,-95.579,EASTERN TEMPERATE FORESTS +08068400,30.192159,-95.4838288,EASTERN TEMPERATE FORESTS +08068000,30.24465738,-95.4571616,EASTERN TEMPERATE FORESTS +08068500,30.11049517,-95.4363275,EASTERN TEMPERATE FORESTS +08074000,29.76022829,-95.4085505,GREAT PLAINS +08074598,29.76661676,-95.358549,GREAT PLAINS +08074710,29.74939477,-95.2910473,GREAT PLAINS +08075500,29.67439687,-95.2893807,GREAT PLAINS +08069500,30.02716385,-95.2579888,EASTERN TEMPERATE FORESTS +08070200,30.14523056,-95.1246139,EASTERN TEMPERATE FORESTS +295524095072701,29.92369393,-95.1242915,EASTERN TEMPERATE FORESTS +08067074,29.80674444,-95.0323972,GREAT PLAINS +08067071,29.95027778,-94.8433333,GREAT PLAINS +08067100,29.9418847,-94.774366,EASTERN TEMPERATE FORESTS +08067215,29.90160798,-94.7699213,EASTERN TEMPERATE FORESTS +08067252,29.8124434,-94.7313087,GREAT PLAINS +07336820,33.68400005,-94.6943774,EASTERN TEMPERATE FORESTS +07346080,32.7386111,-94.2325,EASTERN TEMPERATE FORESTS +08030500,30.30381684,-93.7437784,EASTERN TEMPERATE FORESTS +07311782,33.62203029,-100.2089951,GREAT PLAINS +09408175,37.11498228,-113.440785,NORTH AMERICAN DESERTS +09408150,37.16276007,-113.3952285,NORTH AMERICAN DESERTS +09408135,37.19248238,-113.3532832,NORTH AMERICAN DESERTS +09406100,37.1969272,-113.285226,NORTH AMERICAN DESERTS +09406000,37.2041494,-113.1807789,NORTH AMERICAN DESERTS +10224000,39.48189754,-112.3938338,NORTH AMERICAN DESERTS +10126000,41.5763213,-112.100782,NORTH AMERICAN DESERTS +10172630,40.81661107,-112.1007767,NORTH AMERICAN DESERTS +10141000,41.2782765,-112.0918866,NORTH AMERICAN DESERTS +10168000,40.66430556,-111.898861,NORTH AMERICAN DESERTS +10172200,40.77994627,-111.806045,NORTHWESTERN FORESTED MOUNTAINS +10133980,40.8695861,-111.5866222,NORTHWESTERN FORESTED MOUNTAINS +10133800,40.75966979,-111.5640912,NORTHWESTERN FORESTED MOUNTAINS +10133650,40.7238375,-111.5196438,NORTHWESTERN FORESTED MOUNTAINS +10129900,40.73522634,-111.4760313,NORTHWESTERN FORESTED MOUNTAINS +09326500,39.10413724,-111.2165589,NORTH AMERICAN DESERTS +385202111121601,38.86719775,-111.2051692,NORTH AMERICAN DESERTS +09314280,39.4210793,-110.6462682,NORTH AMERICAN DESERTS +09328500,38.8583081,-110.3701469,NORTH AMERICAN DESERTS +09314500,39.26444444,-110.3427778,NORTH AMERICAN DESERTS +09315000,38.9860831,-110.1512475,NORTH AMERICAN DESERTS +09379500,37.15067778,-109.8666889,NORTH AMERICAN DESERTS +09302000,40.21027778,-109.7813889,NORTH AMERICAN DESERTS +09306900,40.0649641,-109.6356923,NORTH AMERICAN DESERTS +09271400,40.43357206,-109.4662456,NORTH AMERICAN DESERTS +09271450,40.39801727,-109.4295774,NORTH AMERICAN DESERTS +09234500,40.90829296,-109.422914,NORTHWESTERN FORESTED MOUNTAINS +09183600,38.48571796,-109.4111044,NORTH AMERICAN DESERTS +09180500,38.81054095,-109.2934493,NORTH AMERICAN DESERTS +09306700,39.9255223,-109.2923418,NORTH AMERICAN DESERTS +09306600,39.9541333,-109.2584518,NORTH AMERICAN DESERTS +09180000,38.79720805,-109.1951142,NORTH AMERICAN DESERTS +09306500,39.97885629,-109.1787269,NORTH AMERICAN DESERTS +09306430,39.9521902,-109.1592813,NORTH AMERICAN DESERTS +09306420,39.88274659,-109.1573358,NORTH AMERICAN DESERTS +09306395,40.01385727,-109.0806682,NORTH AMERICAN DESERTS +09306410,39.79774877,-109.074554,NORTH AMERICAN DESERTS +09261000,40.40940757,-109.2354043,NORTH AMERICAN DESERTS +01139830,44.0639538,-72.30148518,NORTHERN FORESTS +01139838,44.05339875,-72.25287248,NORTHERN FORESTS +03531500,36.66203367,-83.0948928,EASTERN TEMPERATE FORESTS +03526990,36.6553752,-82.7432159,EASTERN TEMPERATE FORESTS +03490000,36.60871119,-82.567931,EASTERN TEMPERATE FORESTS +03526000,36.67398838,-82.5657099,EASTERN TEMPERATE FORESTS +03524500,36.92926938,-82.4562619,EASTERN TEMPERATE FORESTS +03524550,36.87871389,-82.4059814,EASTERN TEMPERATE FORESTS +03208500,37.20705367,-82.2956993,EASTERN TEMPERATE FORESTS +03207800,37.35371995,-82.1956935,EASTERN TEMPERATE FORESTS +03524000,36.9448295,-82.1548569,EASTERN TEMPERATE FORESTS +03208040,37.07816537,-82.0654084,EASTERN TEMPERATE FORESTS +03488445,36.8559427,-82.0451291,EASTERN TEMPERATE FORESTS +03208034,37.07872129,-82.0401293,EASTERN TEMPERATE FORESTS +03208036,37.0770546,-82.0390181,EASTERN TEMPERATE FORESTS +03488450,36.79177655,-82.0192947,EASTERN TEMPERATE FORESTS +03475000,36.7131694,-81.8187334,EASTERN TEMPERATE FORESTS +03165500,36.83484534,-80.9525807,EASTERN TEMPERATE FORESTS +03167000,36.93900995,-80.8872997,EASTERN TEMPERATE FORESTS +03175500,37.30567654,-80.8497993,EASTERN TEMPERATE FORESTS +03168000,36.93762235,-80.7456257,EASTERN TEMPERATE FORESTS +03173000,37.26817845,-80.7095125,EASTERN TEMPERATE FORESTS +03171000,37.14179254,-80.56922499,EASTERN TEMPERATE FORESTS +02053800,37.1401323,-80.2664328,EASTERN TEMPERATE FORESTS +02017500,37.5062397,-80.106715,EASTERN TEMPERATE FORESTS +02013000,37.8029022,-80.0470043,EASTERN TEMPERATE FORESTS +02014000,37.72901408,-80.0422802,EASTERN TEMPERATE FORESTS +02012800,37.8109585,-79.9883907,EASTERN TEMPERATE FORESTS +02070000,36.56819358,-79.98726539,EASTERN TEMPERATE FORESTS +02011800,37.94845825,-79.94922369,EASTERN TEMPERATE FORESTS +02055379,37.31405556,-79.9324444,EASTERN TEMPERATE FORESTS +02018000,37.66596174,-79.9114388,EASTERN TEMPERATE FORESTS +02011500,38.0695688,-79.8970003,EASTERN TEMPERATE FORESTS +02011400,38.04234707,-79.8814439,EASTERN TEMPERATE FORESTS +02073000,36.6612486,-79.8805946,EASTERN TEMPERATE FORESTS +02056000,37.2551384,-79.87142539,EASTERN TEMPERATE FORESTS +02011490,38.21456767,-79.8375546,EASTERN TEMPERATE FORESTS +02011470,38.19040156,-79.81172,EASTERN TEMPERATE FORESTS +02016500,37.77374009,-79.7844925,EASTERN TEMPERATE FORESTS +02011460,38.24540129,-79.76866328,EASTERN TEMPERATE FORESTS +02016000,37.79179587,-79.7594917,EASTERN TEMPERATE FORESTS +02059485,37.26638889,-79.5877778,EASTERN TEMPERATE FORESTS +02015700,38.19540308,-79.57032338,EASTERN TEMPERATE FORESTS +02059500,37.1731995,-79.5203076,EASTERN TEMPERATE FORESTS +02074500,36.6195825,-79.5041932,EASTERN TEMPERATE FORESTS +02020500,37.98790619,-79.49365288,EASTERN TEMPERATE FORESTS +02021500,37.90735266,-79.42198289,EASTERN TEMPERATE FORESTS +02061000,37.36403026,-79.41919689,EASTERN TEMPERATE FORESTS +02024000,37.76263275,-79.3914251,EASTERN TEMPERATE FORESTS +02075045,36.56263889,-79.369744,EASTERN TEMPERATE FORESTS +02061500,37.20847738,-79.3036357,EASTERN TEMPERATE FORESTS +02025500,37.5012508,-79.2625287,EASTERN TEMPERATE FORESTS +01621050,38.48679008,-78.96030749,EASTERN TEMPERATE FORESTS +02064000,37.12680956,-78.9597374,EASTERN TEMPERATE FORESTS +02077000,36.7765267,-78.9158438,EASTERN TEMPERATE FORESTS +01622000,38.3404051,-78.9136385,EASTERN TEMPERATE FORESTS +01625000,38.26179616,-78.8619703,EASTERN TEMPERATE FORESTS +01632000,38.63706254,-78.852803,EASTERN TEMPERATE FORESTS +02026000,37.5362539,-78.8294611,EASTERN TEMPERATE FORESTS +01632082,38.60678588,-78.803357,EASTERN TEMPERATE FORESTS +01633000,38.74567048,-78.6389042,EASTERN TEMPERATE FORESTS +02030000,37.81264259,-78.4552862,EASTERN TEMPERATE FORESTS +02032640,38.1634674,-78.4247323,EASTERN TEMPERATE FORESTS +02039500,37.3070965,-78.388607,EASTERN TEMPERATE FORESTS +01665500,38.28068606,-78.340007,EASTERN TEMPERATE FORESTS +01634500,39.0812176,-78.3294486,EASTERN TEMPERATE FORESTS +02079640,36.67958589,-78.326664,EASTERN TEMPERATE FORESTS +01635090,39.00677495,-78.3163924,EASTERN TEMPERATE FORESTS +02079500,36.60319824,-78.2977743,EASTERN TEMPERATE FORESTS +01613900,39.2145479,-78.2880592,EASTERN TEMPERATE FORESTS +01635500,38.95816564,-78.2666685,EASTERN TEMPERATE FORESTS +01630700,38.83511474,-78.2319454,EASTERN TEMPERATE FORESTS +01631000,38.91400059,-78.21083388,EASTERN TEMPERATE FORESTS +01614830,39.1089948,-78.2050011,EASTERN TEMPERATE FORESTS +01636242,38.9551101,-78.1972225,EASTERN TEMPERATE FORESTS +0163626650,38.93416667,-78.1280556,EASTERN TEMPERATE FORESTS +01666500,38.32513047,-78.0955557,EASTERN TEMPERATE FORESTS +01615000,39.1747222,-78.0783333,EASTERN TEMPERATE FORESTS +01616100,39.19259167,-78.0686306,EASTERN TEMPERATE FORESTS +01636316,39.067025,-78.0037528,EASTERN TEMPERATE FORESTS +01667500,38.35040774,-77.9749972,EASTERN TEMPERATE FORESTS +01661977,38.7244722,-77.9105278,EASTERN TEMPERATE FORESTS +02041000,37.28320595,-77.869722,EASTERN TEMPERATE FORESTS +02040000,37.42153845,-77.8588876,EASTERN TEMPERATE FORESTS +02051500,36.71681395,-77.8316582,EASTERN TEMPERATE FORESTS +02044500,36.9834822,-77.7997188,EASTERN TEMPERATE FORESTS +01643700,38.98649818,-77.7966614,EASTERN TEMPERATE FORESTS +01655794,38.67577778,-77.7475556,EASTERN TEMPERATE FORESTS +01656000,38.63678689,-77.6249897,EASTERN TEMPERATE FORESTS +01671100,37.8726401,-77.5130392,EASTERN TEMPERATE FORESTS +01660400,38.49040138,-77.4335942,EASTERN TEMPERATE FORESTS +01644280,39.04641667,-77.43238889,EASTERN TEMPERATE FORESTS +01656903,38.8823899,-77.4319047,EASTERN TEMPERATE FORESTS +01671020,37.85014024,-77.42775949,EASTERN TEMPERATE FORESTS +01674000,38.061801,-77.3858142,EASTERN TEMPERATE FORESTS +01645762,38.90888916,-77.3382627,EASTERN TEMPERATE FORESTS +01645704,38.88469518,-77.3324293,EASTERN TEMPERATE FORESTS +0165389205,38.86624167,-77.2863833,EASTERN TEMPERATE FORESTS +01646000,38.97594346,-77.24581439,EASTERN TEMPERATE FORESTS +01654500,38.81358508,-77.2364549,EASTERN TEMPERATE FORESTS +0166818623,38.1296111,-77.2321667,EASTERN TEMPERATE FORESTS +01654000,38.81289066,-77.2283158,EASTERN TEMPERATE FORESTS +0166818985,38.12894444,-77.2235,EASTERN TEMPERATE FORESTS +01646305,38.95977716,-77.1756743,EASTERN TEMPERATE FORESTS +02042500,37.43625765,-77.0608027,EASTERN TEMPERATE FORESTS +01673638,37.6268101,-76.962467,EASTERN TEMPERATE FORESTS +01669000,37.8770819,-76.900521,EASTERN TEMPERATE FORESTS +02047500,37.0251499,-76.8746824,EASTERN TEMPERATE FORESTS +0204309906,36.69064444,-76.2123167,EASTERN TEMPERATE FORESTS +02043120,36.71792779,-76.100211,EASTERN TEMPERATE FORESTS +02043190,36.75570539,-76.0407649,EASTERN TEMPERATE FORESTS +02043210,36.6959841,-76.0407643,EASTERN TEMPERATE FORESTS +02043200,36.72126155,-76.03381988,EASTERN TEMPERATE FORESTS +02043016,36.6175,-75.942,NA +12043000,47.96007697,-124.3929872,MARINE WEST COAST FOREST +12042800,47.8944194,-124.3570889,MARINE WEST COAST FOREST +12039518,47.33215278,-124.2510778,MARINE WEST COAST FOREST +1203951610,47.35777778,-124.1844444,MARINE WEST COAST FOREST +12039516,47.3606472,-124.1752389,MARINE WEST COAST FOREST +12039511,47.37111667,-124.0828778,MARINE WEST COAST FOREST +12039507,47.42260278,-124.0039667,MARINE WEST COAST FOREST +12039504,47.43086667,-123.9493806,MARINE WEST COAST FOREST +12039503,47.4324,-123.9103972,MARINE WEST COAST FOREST +12039500,47.4575863,-123.8893446,MARINE WEST COAST FOREST +12037400,47.0114831,-123.6554417,MARINE WEST COAST FOREST +460939123201600,46.1608333,-123.3378333,MARINE WEST COAST FOREST +12056500,47.51425666,-123.3298868,MARINE WEST COAST FOREST +12058800,47.3906475,-123.209602,MARINE WEST COAST FOREST +454705122451400,45.7847222,-122.7540278,MARINE WEST COAST FOREST +14144700,45.62067265,-122.6734306,MARINE WEST COAST FOREST +12213100,48.84483249,-122.5893389,MARINE WEST COAST FOREST +12212430,48.9981716,-122.5012748,MARINE WEST COAST FOREST +12212050,48.9387257,-122.4790532,MARINE WEST COAST FOREST +453439122223900,45.57734108,-122.3787027,MARINE WEST COAST FOREST +12210900,48.8326141,-122.3390502,MARINE WEST COAST FOREST +12200500,48.4448278,-122.3354369,MARINE WEST COAST FOREST +12210700,48.84178209,-122.2943258,MARINE WEST COAST FOREST +12113390,47.4789861,-122.2587333,MARINE WEST COAST FOREST +12101102,47.23555556,-122.236111,MARINE WEST COAST FOREST +12113375,47.4656553,-122.2326218,MARINE WEST COAST FOREST +12101100,47.2381564,-122.2281746,MARINE WEST COAST FOREST +12100490,47.27482295,-122.2078967,MARINE WEST COAST FOREST +12119000,47.4825999,-122.2034547,MARINE WEST COAST FOREST +12210000,48.67761256,-122.1665454,NORTHWESTERN FORESTED MOUNTAINS +12209490,48.6715016,-122.1396,NORTHWESTERN FORESTED MOUNTAINS +12209000,48.6642793,-122.1334886,NORTHWESTERN FORESTED MOUNTAINS +12206900,48.88484196,-122.1332075,NORTHWESTERN FORESTED MOUNTAINS +12208000,48.7792828,-122.1065434,NORTHWESTERN FORESTED MOUNTAINS +453604122060000,45.6011833,-122.1000028,NORTHWESTERN FORESTED MOUNTAINS +12207850,48.788451,-122.0229292,NORTHWESTERN FORESTED MOUNTAINS +12098700,47.169824,-122.0026114,MARINE WEST COAST FOREST +12117600,47.3795458,-121.983448,MARINE WEST COAST FOREST +12117500,47.3937127,-121.9545585,MARINE WEST COAST FOREST +453845121564001,45.6456726,-121.945637,NORTHWESTERN FORESTED MOUNTAINS +453845121562000,45.6456726,-121.9400813,NORTHWESTERN FORESTED MOUNTAINS +12117000,47.3864913,-121.8462217,NORTHWESTERN FORESTED MOUNTAINS +12205000,48.90595739,-121.8443104,NORTHWESTERN FORESTED MOUNTAINS +12148500,47.69565678,-121.8240056,MARINE WEST COAST FOREST +12138160,47.90732356,-121.8153994,MARINE WEST COAST FOREST +12137800,47.95926837,-121.7973447,NORTHWESTERN FORESTED MOUNTAINS +12116500,47.41704715,-121.792054,NORTHWESTERN FORESTED MOUNTAINS +12147500,47.71232365,-121.7887272,NORTHWESTERN FORESTED MOUNTAINS +12148300,47.69676817,-121.7873379,NORTHWESTERN FORESTED MOUNTAINS +12116400,47.41871388,-121.781498,NORTHWESTERN FORESTED MOUNTAINS +12116100,47.4195473,-121.7664977,NORTHWESTERN FORESTED MOUNTAINS +12147470,47.7197222,-121.7431972,NORTHWESTERN FORESTED MOUNTAINS +12148000,47.68926929,-121.7134457,NORTHWESTERN FORESTED MOUNTAINS +12115500,47.35066169,-121.6631582,NORTHWESTERN FORESTED MOUNTAINS +12137290,47.94732637,-121.6267826,NORTHWESTERN FORESTED MOUNTAINS +12115000,47.3701073,-121.6251009,NORTHWESTERN FORESTED MOUNTAINS +12147600,47.7067714,-121.6001069,NORTHWESTERN FORESTED MOUNTAINS +12187500,48.2498311,-121.5845688,NORTHWESTERN FORESTED MOUNTAINS +12189500,48.42455859,-121.5684634,NORTHWESTERN FORESTED MOUNTAINS +12114500,47.34205417,-121.5489858,NORTHWESTERN FORESTED MOUNTAINS +12186000,48.16872009,-121.4706723,NORTHWESTERN FORESTED MOUNTAINS +12181000,48.5337306,-121.4298499,NORTHWESTERN FORESTED MOUNTAINS +12182500,48.5262307,-121.4154046,NORTHWESTERN FORESTED MOUNTAINS +12179900,48.6045662,-121.3995727,NORTHWESTERN FORESTED MOUNTAINS +12473980,47.3917792,-121.381483,NORTHWESTERN FORESTED MOUNTAINS +12178100,48.66012536,-121.2476233,NORTHWESTERN FORESTED MOUNTAINS +12178000,48.67179229,-121.2462348,NORTHWESTERN FORESTED MOUNTAINS +12488500,46.97761606,-121.168696,NORTHWESTERN FORESTED MOUNTAINS +453712121071200,45.61984338,-121.1211812,NORTH AMERICAN DESERTS +12172000,48.77763,-121.0734549,NORTHWESTERN FORESTED MOUNTAINS +12173500,48.7081863,-120.9773389,NORTHWESTERN FORESTED MOUNTAINS +12493005,46.7275,-120.809861,NORTH AMERICAN DESERTS +454249120423500,45.7134579,-120.710893,NORTH AMERICAN DESERTS +454314120413701,45.7204025,-120.6947814,NORTH AMERICAN DESERTS +12498986,46.62707045,-120.5811787,NORTH AMERICAN DESERTS +12500447,46.53873815,-120.4739524,NORTH AMERICAN DESERTS +12500450,46.53429376,-120.4672855,NORTH AMERICAN DESERTS +12462500,47.49929148,-120.4245223,NORTH AMERICAN DESERTS +12505350,46.36762907,-120.2511647,NORTH AMERICAN DESERTS +12505410,46.3362404,-120.2311634,NORTH AMERICAN DESERTS +12505330,46.3731848,-120.2250525,NORTH AMERICAN DESERTS +12505510,46.3309629,-120.1994953,NORTH AMERICAN DESERTS +12507508,46.31429626,-120.1992173,NORTH AMERICAN DESERTS +12505450,46.34346299,-120.186995,NORTH AMERICAN DESERTS +12507560,46.2967967,-120.1461593,NORTH AMERICAN DESERTS +12447390,48.8229245,-120.1459245,NORTHWESTERN FORESTED MOUNTAINS +1250862050,46.2754079,-120.1389365,NORTH AMERICAN DESERTS +12508630,46.2595746,-120.1336583,NORTH AMERICAN DESERTS +12508670,46.25888889,-120.0655556,NORTH AMERICAN DESERTS +12450480,48.05130556,-119.9265556,NORTH AMERICAN DESERTS +12450650,47.9476409,-119.8636742,NORTH AMERICAN DESERTS +12447302,48.2077222,-119.7122778,NORTH AMERICAN DESERTS +12447200,48.2812606,-119.7045047,NORTH AMERICAN DESERTS +12438000,48.0065333,-119.6653303,NORTH AMERICAN DESERTS +12442500,48.98460109,-119.6184098,NORTH AMERICAN DESERTS +12510500,46.25346748,-119.4780794,NORTH AMERICAN DESERTS +12445000,48.632375,-119.4617229,NORTH AMERICAN DESERTS +12438900,48.9698886,-119.4056188,NORTH AMERICAN DESERTS +14019240,45.93345486,-119.3263758,NORTH AMERICAN DESERTS +14019220,45.9412437,-119.2930719,NORTH AMERICAN DESERTS +12473503,46.5365222,-119.2800694,NORTH AMERICAN DESERTS +12514400,46.2240236,-119.1163997,NORTH AMERICAN DESERTS +13353010,46.2421853,-118.9401224,NORTH AMERICAN DESERTS +14018500,46.0276341,-118.7297112,NORTH AMERICAN DESERTS +13352600,46.5537292,-118.5488527,NORTH AMERICAN DESERTS +12433561,47.8968272,-118.1358112,NORTHWESTERN FORESTED MOUNTAINS +13343860,46.5830522,-118.0430329,NORTH AMERICAN DESERTS +13343595,46.66606178,-117.4423834,NORTH AMERICAN DESERTS +12398600,48.99881409,-117.3535794,NORTHWESTERN FORESTED MOUNTAINS +13334300,46.0970994,-116.9776495,NORTHWESTERN FORESTED MOUNTAINS +03214500,37.83731869,-82.4087578,EASTERN TEMPERATE FORESTS +03201300,38.52564467,-81.9109681,EASTERN TEMPERATE FORESTS +03178000,37.4334722,-81.11,EASTERN TEMPERATE FORESTS +03185400,37.95511285,-81.07648838,EASTERN TEMPERATE FORESTS +03191500,38.2646111,-81.0231111,EASTERN TEMPERATE FORESTS +03184500,37.6703969,-80.8925874,EASTERN TEMPERATE FORESTS +03183500,37.7242874,-80.641468,EASTERN TEMPERATE FORESTS +03189100,38.29094494,-80.6409242,EASTERN TEMPERATE FORESTS +03187500,38.2953903,-80.5264749,EASTERN TEMPERATE FORESTS +03186500,38.37899915,-80.4839737,EASTERN TEMPERATE FORESTS +03058000,39.00452778,-80.4733611,EASTERN TEMPERATE FORESTS +03183000,37.6845833,-80.4561111,EASTERN TEMPERATE FORESTS +03061000,39.42230818,-80.2759187,EASTERN TEMPERATE FORESTS +03057000,39.4350866,-80.1325789,EASTERN TEMPERATE FORESTS +03054500,39.15037545,-80.038691,EASTERN TEMPERATE FORESTS +03056000,39.31981459,-80.0250779,EASTERN TEMPERATE FORESTS +03062245,39.58174955,-80.0095122,EASTERN TEMPERATE FORESTS +03062445,39.6198041,-79.9695089,EASTERN TEMPERATE FORESTS +03067510,38.6170576,-79.8697849,EASTERN TEMPERATE FORESTS +03069500,39.12155556,-79.6755278,EASTERN TEMPERATE FORESTS +03066000,39.1270524,-79.4683852,EASTERN TEMPERATE FORESTS +03065400,39.14010775,-79.4197715,EASTERN TEMPERATE FORESTS +01595800,39.4451111,-79.1108056,EASTERN TEMPERATE FORESTS +01600000,39.56680556,-78.8395556,EASTERN TEMPERATE FORESTS +01610400,39.0427222,-78.5983333,EASTERN TEMPERATE FORESTS +01611500,39.5823158,-78.3097312,EASTERN TEMPERATE FORESTS +01636500,39.28204576,-77.7891606,EASTERN TEMPERATE FORESTS +03200500,38.33898309,-81.841518,EASTERN TEMPERATE FORESTS +03198350,37.9662186,-81.524278,EASTERN TEMPERATE FORESTS +03057300,38.86870938,-80.4578658,EASTERN TEMPERATE FORESTS +01595200,39.26954905,-79.2622625,EASTERN TEMPERATE FORESTS +01608500,39.44703879,-78.6541817,EASTERN TEMPERATE FORESTS +05340500,45.4069444,-92.6469444,EASTERN TEMPERATE FORESTS +053416972,45.12002778,-92.4363056,EASTERN TEMPERATE FORESTS +05369900,44.9049651,-92.2643532,GREAT PLAINS +05369945,44.8671875,-92.2521299,GREAT PLAINS +05333500,46.0761111,-92.2466667,NORTHERN FORESTS +05370000,44.85277778,-92.2383333,GREAT PLAINS +053674464,45.39523615,-91.8301731,EASTERN TEMPERATE FORESTS +05378185,44.20940798,-91.6784864,EASTERN TEMPERATE FORESTS +05378183,44.2146857,-91.6651532,EASTERN TEMPERATE FORESTS +053674967,45.0994444,-91.6511111,EASTERN TEMPERATE FORESTS +053674962,45.12713889,-91.6044444,EASTERN TEMPERATE FORESTS +053793306,44.39552038,-91.5537666,EASTERN TEMPERATE FORESTS +053793305,44.39857598,-91.5515444,EASTERN TEMPERATE FORESTS +05364422,45.1104333,-91.5382467,EASTERN TEMPERATE FORESTS +05364850,44.9888497,-91.447937,EASTERN TEMPERATE FORESTS +05331833,46.1713687,-91.3293778,NORTHERN FORESTS +05364128,44.9622,-91.230175,EASTERN TEMPERATE FORESTS +04026160,46.8547222,-91.0913889,NORTHERN FORESTS +054134435,42.7908243,-90.9573495,EASTERN TEMPERATE FORESTS +05413449,42.78026908,-90.9423494,EASTERN TEMPERATE FORESTS +05413451,42.7672139,-90.929016,EASTERN TEMPERATE FORESTS +05409860,43.3599773,-90.9087394,EASTERN TEMPERATE FORESTS +05409842,43.3599773,-90.9084616,EASTERN TEMPERATE FORESTS +05409870,43.35831077,-90.8970728,EASTERN TEMPERATE FORESTS +05381392,44.18051789,-90.786805,EASTERN TEMPERATE FORESTS +05382284,43.9672222,-90.765,EASTERN TEMPERATE FORESTS +05382267,44.00027778,-90.7244444,EASTERN TEMPERATE FORESTS +05381389,44.15635176,-90.7126365,EASTERN TEMPERATE FORESTS +04027000,46.4866144,-90.696297,NORTHERN FORESTS +04027595,46.61022045,-90.6871285,NORTHERN FORESTS +05382257,44.00055556,-90.6811111,EASTERN TEMPERATE FORESTS +05382255,43.99388889,-90.6572222,EASTERN TEMPERATE FORESTS +05408000,43.57414037,-90.6431861,EASTERN TEMPERATE FORESTS +05381381,44.21107316,-90.6151347,EASTERN TEMPERATE FORESTS +04026561,46.3947222,-90.59,NORTHERN FORESTS +05407500,43.71441508,-90.5870755,EASTERN TEMPERATE FORESTS +05414213,42.7230489,-90.5281842,EASTERN TEMPERATE FORESTS +05414800,42.53389075,-90.481517,EASTERN TEMPERATE FORESTS +05407000,43.19805556,-90.4433333,EASTERN TEMPERATE FORESTS +05432055,42.9002711,-90.3731813,EASTERN TEMPERATE FORESTS +05414894,42.68277495,-90.3670724,EASTERN TEMPERATE FORESTS +05414920,42.6458321,-90.3437388,EASTERN TEMPERATE FORESTS +05414915,42.66749825,-90.3292943,EASTERN TEMPERATE FORESTS +05418731,42.5227823,-90.1340143,EASTERN TEMPERATE FORESTS +054322655,42.8736111,-90.1336111,EASTERN TEMPERATE FORESTS +054322653,42.88166667,-90.1308333,EASTERN TEMPERATE FORESTS +05433510,42.77583445,-89.9984581,EASTERN TEMPERATE FORESTS +05406500,43.13416667,-89.7322222,EASTERN TEMPERATE FORESTS +05406497,43.125,-89.7097222,EASTERN TEMPERATE FORESTS +05357245,46.03555556,-89.7055556,NORTHERN FORESTS +05406491,43.11027186,-89.6795668,EASTERN TEMPERATE FORESTS +05357230,46.0786111,-89.6672222,NORTHERN FORESTS +054064785,43.11166078,-89.6645666,EASTERN TEMPERATE FORESTS +05406479,43.1147222,-89.6641667,EASTERN TEMPERATE FORESTS +05357215,46.02388889,-89.6527778,NORTHERN FORESTS +05406476,43.11332746,-89.650122,EASTERN TEMPERATE FORESTS +05394500,45.2358333,-89.6497222,EASTERN TEMPERATE FORESTS +05357225,46.06138889,-89.6472222,NORTHERN FORESTS +05406460,43.11054978,-89.6456776,EASTERN TEMPERATE FORESTS +05406457,43.1097222,-89.6408333,EASTERN TEMPERATE FORESTS +05406470,43.11916068,-89.6403997,EASTERN TEMPERATE FORESTS +05406469,43.12527778,-89.635,EASTERN TEMPERATE FORESTS +05357205,46.0308444,-89.5993944,NORTHERN FORESTS +05435950,42.94916667,-89.5441667,EASTERN TEMPERATE FORESTS +05435943,42.97694444,-89.5394444,EASTERN TEMPERATE FORESTS +05427943,43.1111111,-89.5361111,EASTERN TEMPERATE FORESTS +05427948,43.1033333,-89.5116667,EASTERN TEMPERATE FORESTS +05435934,43.00110855,-89.4990104,EASTERN TEMPERATE FORESTS +05435935,42.9986086,-89.4987326,EASTERN TEMPERATE FORESTS +05427880,43.1922222,-89.4728889,EASTERN TEMPERATE FORESTS +05427930,43.14027778,-89.4423056,EASTERN TEMPERATE FORESTS +05429369,42.99951944,-89.3615417,EASTERN TEMPERATE FORESTS +05427718,43.20888889,-89.3525,EASTERN TEMPERATE FORESTS +04080798,44.5244444,-89.3377778,EASTERN TEMPERATE FORESTS +0407809265,44.8252512,-89.1181668,EASTERN TEMPERATE FORESTS +05427570,42.80416667,-89.09,EASTERN TEMPERATE FORESTS +05430500,42.6136111,-89.0716667,EASTERN TEMPERATE FORESTS +04081000,44.32916667,-88.9958333,EASTERN TEMPERATE FORESTS +04073500,43.95388889,-88.9525,EASTERN TEMPERATE FORESTS +04077630,44.8980311,-88.8442729,EASTERN TEMPERATE FORESTS +04079000,44.3922026,-88.7403812,EASTERN TEMPERATE FORESTS +05431017,42.6211265,-88.5826011,EASTERN TEMPERATE FORESTS +05431016,42.6408333,-88.5608333,EASTERN TEMPERATE FORESTS +04082400,44.013595,-88.5409472,EASTERN TEMPERATE FORESTS +05545131,42.5791831,-88.538711,EASTERN TEMPERATE FORESTS +05545133,42.5600171,-88.4875986,EASTERN TEMPERATE FORESTS +04083425,43.69721258,-88.475383,EASTERN TEMPERATE FORESTS +04083420,43.6933238,-88.4720495,EASTERN TEMPERATE FORESTS +04063700,45.7636111,-88.4636111,NORTHERN FORESTS +04084445,44.24805556,-88.4230556,EASTERN TEMPERATE FORESTS +04084927,44.29925,-88.1918333,EASTERN TEMPERATE FORESTS +04072150,44.53338889,-88.1296944,EASTERN TEMPERATE FORESTS +04085395,44.02471398,-88.1181548,EASTERN TEMPERATE FORESTS +04087030,43.17277778,-88.10388889,EASTERN TEMPERATE FORESTS +04085108,44.37194444,-88.0922222,EASTERN TEMPERATE FORESTS +04085746,43.7775,-88.0852778,EASTERN TEMPERATE FORESTS +04087088,43.0547222,-88.0461111,EASTERN TEMPERATE FORESTS +04087070,43.1236111,-88.0436111,EASTERN TEMPERATE FORESTS +04087050,43.20667408,-88.0384231,EASTERN TEMPERATE FORESTS +040851385,44.5286111,-88.01,EASTERN TEMPERATE FORESTS +04085139,44.53915916,-88.0057984,EASTERN TEMPERATE FORESTS +04087119,43.0438333,-88.0051111,EASTERN TEMPERATE FORESTS +04087120,43.04555556,-87.9997222,EASTERN TEMPERATE FORESTS +04071765,44.86055556,-87.98388889,EASTERN TEMPERATE FORESTS +040869415,43.09695587,-87.9723094,EASTERN TEMPERATE FORESTS +040869416,43.09713889,-87.96725,EASTERN TEMPERATE FORESTS +040871488,42.9897222,-87.9519444,EASTERN TEMPERATE FORESTS +04085119,44.42249308,-87.9400994,EASTERN TEMPERATE FORESTS +04087142,43.03390256,-87.934252,EASTERN TEMPERATE FORESTS +040857005,43.78888889,-87.92138889,EASTERN TEMPERATE FORESTS +040871476,42.94444444,-87.9102778,EASTERN TEMPERATE FORESTS +04087000,43.10001159,-87.9089745,EASTERN TEMPERATE FORESTS +040871475,42.95666667,-87.9069444,EASTERN TEMPERATE FORESTS +04085813,43.63832977,-87.898424,EASTERN TEMPERATE FORESTS +04087170,43.02444444,-87.8983333,EASTERN TEMPERATE FORESTS +040871473,42.945,-87.8861111,EASTERN TEMPERATE FORESTS +04087204,42.925,-87.87,EASTERN TEMPERATE FORESTS +04085845,43.6966622,-87.820922,EASTERN TEMPERATE FORESTS +04069500,45.0475,-87.7444444,NORTHERN FORESTS +04085427,44.10616667,-87.7160278,EASTERN TEMPERATE FORESTS +04067500,45.3258333,-87.6633333,NORTHERN FORESTS +10038000,42.12604658,-110.9737986,NORTH AMERICAN DESERTS +13016450,43.50076005,-110.8716,NORTHWESTERN FORESTED MOUNTAINS +06036905,44.6201833,-110.8635028,NORTHWESTERN FORESTED MOUNTAINS +06036805,44.4593333,-110.8222722,NORTHWESTERN FORESTED MOUNTAINS +13018350,43.4583611,-110.7970278,NORTHWESTERN FORESTED MOUNTAINS +06037000,44.64910556,-110.7847361,NORTHWESTERN FORESTED MOUNTAINS +13013650,43.65405556,-110.7154722,NORTHWESTERN FORESTED MOUNTAINS +06036940,44.732725,-110.7132528,NORTHWESTERN FORESTED MOUNTAINS +13018300,43.45215258,-110.7040913,NORTHWESTERN FORESTED MOUNTAINS +06190540,44.9851333,-110.6893444,NORTHWESTERN FORESTED MOUNTAINS +06187550,44.92041667,-110.4044389,NORTHWESTERN FORESTED MOUNTAINS +06188000,44.92817778,-110.3942694,NORTHWESTERN FORESTED MOUNTAINS +06186500,44.56709167,-110.3804056,NORTHWESTERN FORESTED MOUNTAINS +13012475,43.7634833,-110.3237861,NORTHWESTERN FORESTED MOUNTAINS +13012465,43.7331083,-110.3145611,NORTHWESTERN FORESTED MOUNTAINS +09219200,41.39415,-110.2059583,NORTH AMERICAN DESERTS +13011820,43.8071111,-110.1787222,NORTHWESTERN FORESTED MOUNTAINS +06187950,44.86898889,-110.164775,NORTHWESTERN FORESTED MOUNTAINS +09209400,42.19272157,-110.163214,NORTH AMERICAN DESERTS +442754110082301,44.468,-110.1392222,NORTHWESTERN FORESTED MOUNTAINS +442726110064101,44.4572222,-110.1113889,NORTHWESTERN FORESTED MOUNTAINS +442725110064001,44.4569444,-110.1111111,NORTHWESTERN FORESTED MOUNTAINS +442725110063501,44.4569444,-110.1097222,NORTHWESTERN FORESTED MOUNTAINS +09211200,42.0209722,-110.0498056,NORTH AMERICAN DESERTS +06279795,44.51327817,-109.9735188,NORTHWESTERN FORESTED MOUNTAINS +09205000,42.56716598,-109.930151,NORTH AMERICAN DESERTS +09196500,43.02705556,-109.7735278,NORTHWESTERN FORESTED MOUNTAINS +09216050,41.94745505,-109.6881939,NORTH AMERICAN DESERTS +09217000,41.51635366,-109.4490234,NORTH AMERICAN DESERTS +06227600,43.14277778,-108.7088889,NORTH AMERICAN DESERTS +09258980,41.06815856,-107.6315964,NORTH AMERICAN DESERTS +09258050,41.4783333,-107.6025,NORTH AMERICAN DESERTS +06306250,44.98386286,-106.8397892,GREAT PLAINS +06623800,41.0235791,-106.824766,NORTHWESTERN FORESTED MOUNTAINS +06313500,43.6970861,-106.3061944,GREAT PLAINS +06316400,44.4910905,-106.1778075,GREAT PLAINS +06324000,44.8716522,-106.0828016,GREAT PLAINS +06324970,44.9269288,-105.3533268,GREAT PLAINS +06427850,44.5894282,-104.7038545,NORTHWESTERN FORESTED MOUNTAINS +06670500,42.20052277,-104.5382908,GREAT PLAINS +06386500,43.42108409,-104.1316022,GREAT PLAINS diff --git a/tests/data/test_resource_metadata_files/ecoregions_meta.xml b/tests/data/test_resource_metadata_files/ecoregions_meta.xml new file mode 100644 index 0000000..8272441 --- /dev/null +++ b/tests/data/test_resource_metadata_files/ecoregions_meta.xml @@ -0,0 +1,61 @@ + + + + CSV Content: One CSV file with specific metadata + + + + + + + This resource is shared under the Creative Commons Attribution CC BY. + + + + eng + ecoregions + + + 2923 + , + + + + + number + 1 + id + + + + + lon + number + 3 + + + + + 4 + ecoregion + string + + + + + number + 2 + lat + + + + + + + + diff --git a/tests/data/test_resource_metadata_files/ecoregions_resmap.xml b/tests/data/test_resource_metadata_files/ecoregions_resmap.xml new file mode 100644 index 0000000..39e65a1 --- /dev/null +++ b/tests/data/test_resource_metadata_files/ecoregions_resmap.xml @@ -0,0 +1,53 @@ + + + + foresite@googlegroups.com + Foresite Toolkit (Python) + + + + + + application/rdf+xml + 2024-09-13T14:01:58Z + 2024-09-13T14:01:58Z + + + + http://localhost:8000/resource/ec6b089c7e8949c3afc6de07e9f3b603/data/contents/ecoregions_resmap.xml + + ecoregions + + http://localhost:8000/resource/ec6b089c7e8949c3afc6de07e9f3b603/data/contents/ecoregions_meta.xml + + + + http://localhost:8000/resource/ec6b089c7e8949c3afc6de07e9f3b603/data/contents/ecoregions_resmap.xml#aggregation + http://localhost:8000/resource/ec6b089c7e8949c3afc6de07e9f3b603/data/contents/ecoregions_resmap.xml#aggregation + application/rdf+xml + + + http://www.openarchives.org/ore/terms/ + ResourceMap + + + text/csv + http://localhost:8000/resource/ec6b089c7e8949c3afc6de07e9f3b603/data/contents/ecoregions_resmap.xml#aggregation + + + CSV File Aggregation + http://localhost:8000/terms + + + Aggregation + http://www.openarchives.org/ore/terms/ + + diff --git a/tests/test_data_objects.py b/tests/test_data_objects.py index 49af289..37cda41 100644 --- a/tests/test_data_objects.py +++ b/tests/test_data_objects.py @@ -9,7 +9,13 @@ from hsmodels.schemas.enums import AggregationType from rasterio.windows import Window -from hsclient import GeoFeatureAggregation, GeoRasterAggregation, NetCDFAggregation, TimeseriesAggregation +from hsclient import ( + GeoFeatureAggregation, + GeoRasterAggregation, + NetCDFAggregation, + TimeseriesAggregation, + CSVAggregation, +) @pytest.mark.parametrize("search_by", ["type", "file_path"]) @@ -318,3 +324,75 @@ def test_geofeature_save_data_object(resource_with_geofeature_aggr, as_new_aggr) assert ft_dict['properties']['Id'] < 5 # need to close the data object so that the tmp directory can be cleaned up fn_collection.close() + + +@pytest.mark.parametrize("search_by", ["type", "file_path"]) +def test_csv_as_data_object(resource_with_csv_aggr, search_by): + resource_with_csv_aggr.refresh() + if search_by == "type": + aggr = resource_with_csv_aggr.aggregation(type=AggregationType.CSVFileAggregation) + else: + file_path = "ecoregions.csv" + aggr = resource_with_csv_aggr.aggregation(file__path=file_path) + assert aggr is not None + assert type(aggr) is CSVAggregation + with tempfile.TemporaryDirectory() as tmp: + # download + unzip_to = os.path.join(tmp, "unzipped_aggr") + os.makedirs(unzip_to) + agg_path = resource_with_csv_aggr.aggregation_download(aggregation=aggr, save_path=tmp, unzip_to=unzip_to) + # load csv data to data object as pandas dataframe + pd_df = aggr.as_data_object(agg_path=agg_path) + # test number of rows in pandas dataframe + assert len(pd_df) == 2923 + # test number of columns + assert len(pd_df.columns) == 4 + + +@pytest.mark.parametrize("as_new_aggr", [False, True]) +def test_csv_save_data_object(resource_with_csv_aggr, as_new_aggr): + resource_with_csv_aggr.refresh() + file_path = "ecoregions.csv" + aggr = resource_with_csv_aggr.aggregation(file__path=file_path) + assert aggr is not None + assert type(aggr) is CSVAggregation + with tempfile.TemporaryDirectory() as tmp: + # download + unzip_to = os.path.join(tmp, "unzipped_aggr") + os.makedirs(unzip_to) + agg_path = resource_with_csv_aggr.aggregation_download(aggregation=aggr, save_path=tmp, unzip_to=unzip_to) + # load csv data to data object as pandas dataframe + pd_df = aggr.as_data_object(agg_path=agg_path) + # test number of rows in pandas dataframe + assert len(pd_df) == 2923 + # test number of columns + assert len(pd_df.columns) == 4 + # edit the dataframe - remove the last column in the dataframe + pd_df.drop(pd_df.columns[-1], axis=1, inplace=True) + assert len(pd_df.columns) == 3 + dst_path = "" + if as_new_aggr: + dst_path = "csv_aggr_folder" + resource_with_csv_aggr.folder_create(dst_path) + # save the dataframe to a new csv file + aggr = aggr.save_data_object(resource=resource_with_csv_aggr, agg_path=agg_path, as_new_aggr=as_new_aggr, + destination_path=dst_path) + assert aggr is not None + assert type(aggr) is CSVAggregation + if as_new_aggr: + assert aggr.data_object is None + else: + assert aggr.data_object is not None + + # check the updated csv aggregation + with tempfile.TemporaryDirectory() as tmp: + # download + unzip_to = os.path.join(tmp, "unzipped_aggr") + os.makedirs(unzip_to) + agg_path = resource_with_csv_aggr.aggregation_download(aggregation=aggr, save_path=tmp, unzip_to=unzip_to) + # load csv data to data object as pandas dataframe + pd_df = aggr.as_data_object(agg_path=agg_path) + # test number of rows in pandas dataframe + assert len(pd_df) == 2923 + # test number of columns + assert len(pd_df.columns) == 3 From 63de432b87a20cecb3ea13f5e52a6e157820118f Mon Sep 17 00:00:00 2001 From: pkdash Date: Tue, 17 Sep 2024 23:49:08 -0400 Subject: [PATCH 03/18] [#71] updating helper get data object function to pass kwargs --- hsclient/hydroshare.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hsclient/hydroshare.py b/hsclient/hydroshare.py index 57fd622..9f64fc6 100644 --- a/hsclient/hydroshare.py +++ b/hsclient/hydroshare.py @@ -428,14 +428,14 @@ def _get_file_path(self, agg_path): def _validate_aggregation_path(self, agg_path: str, for_save_data: bool = False) -> str: return self._get_file_path(agg_path) - def _get_data_object(self, agg_path: str, func: Callable) -> \ + def _get_data_object(self, agg_path: str, func: Callable, **func_kwargs) -> \ Union['pandas.DataFrame', 'fiona.Collection', 'rasterio.DatasetReader', 'xarray.Dataset']: if self._data_object is not None and self.metadata.type != AggregationType.TimeSeriesAggregation: return self._data_object file_path = self._validate_aggregation_path(agg_path) - data_object = func(file_path) + data_object = func(file_path, **func_kwargs) if self.metadata.type == AggregationType.MultidimensionalAggregation: data_object.load() data_object.close() @@ -875,7 +875,7 @@ def as_data_object(self, agg_path: str) -> 'pandas.DataFrame': if pandas is None: raise Exception("pandas package not found") - return self._get_data_object(agg_path=agg_path, func=pandas.read_csv) + return self._get_data_object(agg_path=agg_path, func=pandas.read_csv, comment="#") def save_data_object(self, resource: 'Resource', agg_path: str, as_new_aggr: bool = False, destination_path: str = "") -> 'Aggregation': From 3e1c4b238d24653f42d0c34f2c70e83defa0e300 Mon Sep 17 00:00:00 2001 From: pkdash Date: Tue, 17 Sep 2024 23:55:02 -0400 Subject: [PATCH 04/18] [#71] adding new example text files --- docs/examples/Example_Files/Data_File1.csv | 2 +- docs/examples/Example_Files/Data_File1.txt | 53 ++++++++++++++++++++ docs/examples/Example_Files/Data_File2.csv | 2 +- docs/examples/Example_Files/Data_File2.txt | 56 ++++++++++++++++++++++ 4 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 docs/examples/Example_Files/Data_File1.txt create mode 100644 docs/examples/Example_Files/Data_File2.txt diff --git a/docs/examples/Example_Files/Data_File1.csv b/docs/examples/Example_Files/Data_File1.csv index 28ecb0b..bd80c1b 100644 --- a/docs/examples/Example_Files/Data_File1.csv +++ b/docs/examples/Example_Files/Data_File1.csv @@ -1,4 +1,4 @@ -"Campus Meter Data Log for Valley_View_Tower" +# Campus Meter Data Log for Valley_View_Tower "Date","RecordNumber","SensorVoltage","FlowRate","AvgFlowRate","IncrementalVolume","TotalizedVolume" "2017-03-02 16:23:23",1,0.806,0.9375,0.9375,0.0156250149012,0.0156250149012 "2017-03-02 16:23:24",2,0.806,0.9375,0.9375,0.015625,0.0312500149012 diff --git a/docs/examples/Example_Files/Data_File1.txt b/docs/examples/Example_Files/Data_File1.txt new file mode 100644 index 0000000..71dd8f9 --- /dev/null +++ b/docs/examples/Example_Files/Data_File1.txt @@ -0,0 +1,53 @@ +"Campus Meter Data Log for Valley_View_Tower" +"Date","RecordNumber","SensorVoltage","FlowRate","AvgFlowRate","IncrementalVolume","TotalizedVolume" +"2017-03-02 16:23:23",1,0.806,0.9375,0.9375,0.0156250149012,0.0156250149012 +"2017-03-02 16:23:24",2,0.806,0.9375,0.9375,0.015625,0.0312500149012 +"2017-03-02 16:23:25",3,0.806,0.9375,0.9375,0.015625,0.0468750149012 +"2017-03-02 16:23:26",4,0.806,0.9375,0.9375,0.0156250149012,0.0625000298023 +"2017-03-02 16:23:27",5,0.806,0.9375,0.9375,0.015625,0.0781250298023 +"2017-03-02 16:23:28",6,0.806,0.9375,0.9375,0.0156250149012,0.0937500447035 +"2017-03-02 16:23:29",7,0.806,0.9375,0.9375,0.0156250149012,0.109375059605 +"2017-03-02 16:23:30",8,0.806,0.9375,0.9375,0.0156250186265,0.125000078231 +"2017-03-02 16:23:31",9,0.806,0.9375,0.9375,0.0156250149012,0.140625093132 +"2017-03-02 16:23:32",10,0.808,1.25,1.25,0.0208333532015,0.161458446334 +"2017-03-02 16:23:33",11,0.806,0.9375,0.9375,0.0156250149012,0.177083461235 +"2017-03-02 16:23:34",12,0.804,0.625,0.625,0.0104166666667,0.187500127902 +"2017-03-02 16:23:35",13,0.804,0.625,0.625,0.0104166666667,0.197916794568 +"2017-03-02 16:23:36",14,0.804,0.625,0.625,0.0104166766008,0.208333471169 +"2017-03-02 16:23:37",15,0.806,0.9375,0.9375,0.015625,0.223958471169 +"2017-03-02 16:23:38",16,0.806,0.9375,0.9375,0.015625,0.239583471169 +"2017-03-02 16:23:39",17,0.806,0.9375,0.9375,0.0156250149012,0.25520848607 +"2017-03-02 16:23:40",18,0.806,0.9375,0.9375,0.015625,0.27083348607 +"2017-03-02 16:23:41",19,0.806,0.9375,0.9375,0.015625,0.28645848607 +"2017-03-02 16:23:42",20,0.806,0.9375,0.9375,0.0156250186265,0.302083504697 +"2017-03-02 16:23:43",21,0.808,1.25,1.25,0.0208333532015,0.322916857898 +"2017-03-02 16:23:44",22,0.806,0.9375,0.9375,0.015625,0.338541857898 +"2017-03-02 16:23:45",23,0.806,0.9375,0.9375,0.015625,0.354166857898 +"2017-03-02 16:23:46",24,0.806,0.9375,0.9375,0.015625,0.369791857898 +"2017-03-02 16:23:47",25,0.806,0.9375,0.9375,0.0156250149012,0.385416872799 +"2017-03-02 16:23:48",26,0.808,1.25,1.25,0.0208333532015,0.406250226001 +"2017-03-02 16:23:49",27,0.806,0.9375,0.9375,0.0156250149012,0.421875240902 +"2017-03-02 16:23:50",28,0.806,0.9375,0.9375,0.0156250186265,0.437500259529 +"2017-03-02 16:23:51",29,0.806,0.9375,0.9375,0.0156250149012,0.45312527443 +"2017-03-02 16:23:52",30,0.806,0.9375,0.9375,0.0156250149012,0.468750289331 +"2017-03-02 16:23:53",31,0.806,0.9375,0.9375,0.0156250149012,0.484375304232 +"2017-03-02 16:23:54",32,0.806,0.9375,0.9375,0.015625,0.500000304232 +"2017-03-02 16:23:55",33,0.806,0.9375,0.9375,0.015625,0.515625304232 +"2017-03-02 16:23:56",34,0.806,0.9375,0.9375,0.015625,0.531250304232 +"2017-03-02 16:23:57",35,0.806,0.9375,0.9375,0.0156250149012,0.546875319133 +"2017-03-02 16:23:58",36,0.806,0.9375,0.9375,0.015625,0.562500319133 +"2017-03-02 16:23:59",37,0.806,0.9375,0.9375,0.0156250186265,0.57812533776 +"2017-03-02 16:24:00",38,0.806,0.9375,0.9375,0.0156250149012,0.593750352661 +"2017-03-02 16:24:01",39,0.806,0.9375,0.9375,0.015625,0.609375352661 +"2017-03-02 16:24:02",40,0.806,0.9375,0.9375,0.015625,0.625000352661 +"2017-03-02 16:24:03",41,0.808,1.25,1.25,0.0208333333333,0.645833685994 +"2017-03-02 16:24:04",42,0.806,0.9375,0.9375,0.015625,0.661458685994 +"2017-03-02 16:24:05",43,0.806,0.9375,0.9375,0.0156250149012,0.677083700895 +"2017-03-02 16:24:06",44,0.806,0.9375,0.9375,0.0156250149012,0.692708715796 +"2017-03-02 16:24:07",45,0.806,0.9375,0.9375,0.015625,0.708333715796 +"2017-03-02 16:24:08",46,0.806,0.9375,0.9375,0.0156250335276,0.723958749324 +"2017-03-02 16:24:09",47,0.806,0.9375,0.9375,0.0156250149012,0.739583764225 +"2017-03-02 16:24:10",48,0.806,0.9375,0.9375,0.0156250149012,0.755208779126 +"2017-03-02 16:24:11",49,0.808,1.25,1.25,0.0208333333333,0.77604211246 +"2017-03-02 16:24:12",50,0.81,1.5625,1.5625,0.0260416915019,0.802083803962 +"2017-03-02 16:24:13",51,1.044,38.125,38.125,0.635416666667,1.43750047063 \ No newline at end of file diff --git a/docs/examples/Example_Files/Data_File2.csv b/docs/examples/Example_Files/Data_File2.csv index 108f79a..997621e 100644 --- a/docs/examples/Example_Files/Data_File2.csv +++ b/docs/examples/Example_Files/Data_File2.csv @@ -1,4 +1,4 @@ -"Campus Meter Data Log for Valley_View_Tower" +# Campus Meter Data Log for Valley_View_Tower "Date","RecordNumber","SensorVoltage","FlowRate","AvgFlowRate","IncrementalVolume","TotalizedVolume" "2017-03-02 16:25:27",125,0.808,1.25,1.25,0.0208333333333,7.43229428555 "2017-03-02 16:25:28",126,0.808,1.25,1.25,0.0208333333333,7.45312761888 diff --git a/docs/examples/Example_Files/Data_File2.txt b/docs/examples/Example_Files/Data_File2.txt new file mode 100644 index 0000000..cb44cd1 --- /dev/null +++ b/docs/examples/Example_Files/Data_File2.txt @@ -0,0 +1,56 @@ +"Campus Meter Data Log for Valley_View_Tower" +"Date","RecordNumber","SensorVoltage","FlowRate","AvgFlowRate","IncrementalVolume","TotalizedVolume" +"2017-03-02 16:25:27",125,0.808,1.25,1.25,0.0208333333333,7.43229428555 +"2017-03-02 16:25:28",126,0.808,1.25,1.25,0.0208333333333,7.45312761888 +"2017-03-02 16:25:29",127,0.808,1.25,1.25,0.0208333532015,7.47396097208 +"2017-03-02 16:25:30",128,0.806,0.9375,0.9375,0.015625,7.48958597208 +"2017-03-02 16:25:31",129,0.806,0.9375,0.9375,0.0156250186265,7.50521099071 +"2017-03-02 16:25:32",130,0.806,0.9375,0.9375,0.0156250149012,7.52083600561 +"2017-03-02 16:25:33",131,0.806,0.9375,0.9375,0.0156250149012,7.53646102051 +"2017-03-02 16:25:34",132,0.806,0.9375,0.9375,0.015625,7.55208602051 +"2017-03-02 16:25:35",133,0.806,0.9375,0.9375,0.015625,7.56771102051 +"2017-03-02 16:25:36",134,0.806,0.9375,0.9375,0.015625,7.58333602051 +"2017-03-02 16:25:37",135,0.804,0.625,0.625,0.0104166766008,7.59375269711 +"2017-03-02 16:25:38",136,0.806,0.9375,0.9375,0.0156250149012,7.60937771201 +"2017-03-02 16:25:39",137,0.804,0.625,0.625,0.0104166790843,7.6197943911 +"2017-03-02 16:25:40",138,0.806,0.9375,0.9375,0.0156250149012,7.635419406 +"2017-03-02 16:25:41",139,0.804,0.625,0.625,0.0104166666667,7.64583607266 +"2017-03-02 16:25:42",140,0.806,0.9375,0.9375,0.015625,7.66146107266 +"2017-03-02 16:25:43",141,0.806,0.9375,0.9375,0.015625,7.67708607266 +"2017-03-02 16:25:44",142,0.806,0.9375,0.9375,0.0156250149012,7.69271108756 +"2017-03-02 16:25:45",143,0.806,0.9375,0.9375,0.015625,7.70833608756 +"2017-03-02 16:25:46",144,0.806,0.9375,0.9375,0.0156250149012,7.72396110247 +"2017-03-02 16:25:47",145,0.806,0.9375,0.9375,0.015625,7.73958610247 +"2017-03-02 16:25:48",146,0.806,0.9375,0.9375,0.0156250149012,7.75521111737 +"2017-03-02 16:25:49",147,0.806,0.9375,0.9375,0.0156250186265,7.77083613599 +"2017-03-02 16:25:50",148,0.806,0.9375,0.9375,0.015625,7.78646113599 +"2017-03-02 16:25:51",149,0.806,0.9375,0.9375,0.0156250149012,7.80208615089 +"2017-03-02 16:25:52",150,0.806,0.9375,0.9375,0.0156250149012,7.8177111658 +"2017-03-02 16:25:53",151,0.806,0.9375,0.9375,0.015625,7.8333361658 +"2017-03-02 16:25:54",152,0.804,0.625,0.625,0.0104166766008,7.8437528424 +"2017-03-02 16:25:55",153,0.804,0.625,0.625,0.0104166766008,7.854169519 +"2017-03-02 16:25:56",154,0.804,0.625,0.625,0.0104166666667,7.86458618566 +"2017-03-02 16:25:57",155,0.806,0.9375,0.9375,0.0156250149012,7.88021120057 +"2017-03-02 16:25:58",156,0.808,1.25,1.25,0.0208333333333,7.9010445339 +"2017-03-02 16:25:59",157,0.81,1.5625,1.5625,0.0260416977108,7.92708623161 +"2017-03-02 16:26:00",158,0.81,1.5625,1.5625,0.0260416915019,7.95312792311 +"2017-03-02 16:26:01",159,1.08,43.75,43.75,0.729167362054,8.68229528517 +"2017-03-02 16:26:02",160,1.08,43.75,43.75,0.729166666667,9.41146195183 +"2017-03-02 16:26:03",161,1.024,35.0,35.0,0.583333333333,9.99479528517 +"2017-03-02 16:26:04",162,0.878,12.1875,12.1875,0.203125,10.1979202852 +"2017-03-02 16:26:05",163,0.854,8.4375,8.4375,0.14062513411,10.3385454193 +"2017-03-02 16:26:06",164,0.854,8.4375,8.4375,0.14062513411,10.4791705534 +"2017-03-02 16:26:07",165,0.854,8.4375,8.4375,0.140625301749,10.6197958551 +"2017-03-02 16:26:08",166,0.804,0.625,0.625,0.0104166666667,10.6302125218 +"2017-03-02 16:26:09",167,0.804,0.625,0.625,0.0104166766008,10.6406291984 +"2017-03-02 16:26:10",168,0.804,0.625,0.625,0.0104166666667,10.6510458651 +"2017-03-02 16:26:11",169,0.806,0.9375,0.9375,0.0156250149012,10.66667088 +"2017-03-02 16:26:12",170,0.806,0.9375,0.9375,0.0156250149012,10.6822958949 +"2017-03-02 16:26:13",171,0.806,0.9375,0.9375,0.015625,10.6979208949 +"2017-03-02 16:26:14",172,0.806,0.9375,0.9375,0.0156250186265,10.7135459135 +"2017-03-02 16:26:15",173,0.806,0.9375,0.9375,0.0156250149012,10.7291709284 +"2017-03-02 16:26:16",174,0.808,1.25,1.25,0.0208333532015,10.7500042816 +"2017-03-02 16:26:17",175,0.81,1.5625,1.5625,0.0260416666667,10.7760459483 +"2017-03-02 16:26:18",176,0.808,1.25,1.25,0.0208333333333,10.7968792816 +"2017-03-02 16:26:19",177,0.808,1.25,1.25,0.0208333532015,10.8177126348 +"2017-03-02 16:26:20",178,0.808,1.25,1.25,0.0208333333333,10.8385459681 \ No newline at end of file From d69f2f937a132b0cce781d7568cd232ec81594d4 Mon Sep 17 00:00:00 2001 From: pkdash Date: Tue, 17 Sep 2024 23:56:21 -0400 Subject: [PATCH 05/18] [#71] updating aggregation operations notebook to include csv metadata editing --- docs/examples/Aggregation_Operations.ipynb | 67 +++++++++++++++++++--- 1 file changed, 60 insertions(+), 7 deletions(-) diff --git a/docs/examples/Aggregation_Operations.ipynb b/docs/examples/Aggregation_Operations.ipynb index 94f025b..e712921 100644 --- a/docs/examples/Aggregation_Operations.ipynb +++ b/docs/examples/Aggregation_Operations.ipynb @@ -107,6 +107,7 @@ "* Multidimensional NetCDF\n", "* Single file\n", "* File set\n", + "* CSV\n", "\n", "The general process for creating an aggregation within a resource requires adding files to the resource and then applying the appropriate aggregation type. For some of the aggregation types, some of the aggregation metadata fields will be automatically extracted from the files you upload. You can then set the values of the other aggregation-level metadata elements. " ], @@ -134,12 +135,11 @@ "# Import the aggregation types\n", "from hsmodels.schemas.enums import AggregationType\n", "\n", - "# Upload a single content file to the resource. This is a generic sample comma separated\n", - "# values (CSV) data file with some tabular data\n", - "new_resource.file_upload('Example_Files/Data_File1.csv')\n", + "# Upload a single content file to the resource. This is a generic text file.\n", + "new_resource.file_upload('Example_Files/Data_File1.txt')\n", "\n", "# Specify the file you want to add the aggregation to\n", - "file = new_resource.file(path='Data_File1.csv')\n", + "file = new_resource.file(path='Data_File1.txt')\n", "\n", "# Create a single file aggregation on the file and refresh the resource\n", "agg = new_resource.file_aggregate(file, AggregationType.SingleFileAggregation)\n", @@ -180,8 +180,8 @@ "metadata": {}, "source": [ "# Set the title and subject keywords for the aggregation\n", - "agg.metadata.title = 'A CSV Data File Single File Aggregation'\n", - "agg.metadata.subjects = ['CSV', 'Aggregation', 'Single File', 'Data']\n", + "agg.metadata.title = 'A Single File Aggregation'\n", + "agg.metadata.subjects = ['Aggregation', 'Single File', 'Text']\n", "\n", "# Print the title and keywords for the aggregation\n", "print(f'Aggregation Title: {agg.metadata.title}')\n", @@ -471,7 +471,7 @@ "new_resource.folder_create('Fileset_Aggregation')\n", "\n", "# Add some files to the folder\n", - "new_resource.file_upload('Example_Files/Data_File1.csv', 'Example_Files/Data_File2.csv',\n", + "new_resource.file_upload('Example_Files/Data_File1.txt', 'Example_Files/Data_File2.txt',\n", " destination_path='Fileset_Aggregation')\n", "\n", "# TODO: How to set a fileset aggregation on a folder containing files?" @@ -479,6 +479,32 @@ "outputs": [], "execution_count": null }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "## CSV Aggregation\n", + "\n", + "CSV aggregations are created in HydroShare from a CSV file. When you upload a csv file, HydroShare automatically creates a CSV aggregation and extracts metadata from the uploaded CSV file. " + ] + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# Upload a CSV file to the resource\n", + "new_resource.file_upload('Example_Files/Data_File1.csv')\n", + "\n", + "# Get the aggregation by searching for the CSV file\n", + "agg = new_resource.aggregation(file__name='Data_File1.csv')\n", + "\n", + "# Print the title for the aggregation that was added to the resource\n", + "print(f\"The following aggregation was added to the resource: {agg.metadata.title}\")\n", + "print(f\"Aggregation type: {agg.metadata.type}\")" + ], + "outputs": [], + "execution_count": null + }, { "cell_type": "markdown", "source": [ @@ -512,6 +538,33 @@ "outputs": [], "execution_count": null }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "***Example of editing extracted metadata for CSV aggregation***" + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# Get the CSV aggregation you created above\n", + "agg = new_resource.aggregation(type=\"CSV\")\n", + "\n", + "# we can edit any extracted column properties (like 'title', 'description', 'datatype')\n", + "table = agg.metadata.tableSchema.table\n", + "\n", + "# here is an example of editing the 'title' property of the 1st column\n", + "table.columns[0].title = \"Date of Observation\"\n", + "\n", + "# here is an example of editing the 'description' of the 7th column\n", + "table.columns[6].description = \"Total Volume over time\"\n", + "\n", + "# save the updated metadata\n", + "agg.save()" + ], + "outputs": [], + "execution_count": null + }, { "cell_type": "markdown", "metadata": {}, From a22bbedb49477350f63bfd0ba390fff2ff565c84 Mon Sep 17 00:00:00 2001 From: pkdash Date: Tue, 17 Sep 2024 23:58:28 -0400 Subject: [PATCH 06/18] [#71] updating aggregation data object operations notebook to include csv data object access --- .../Aggregation_Data_Object_Operations.ipynb | 167 +++++++++++++++++- 1 file changed, 165 insertions(+), 2 deletions(-) diff --git a/docs/examples/Aggregation_Data_Object_Operations.ipynb b/docs/examples/Aggregation_Data_Object_Operations.ipynb index 6cd3395..655571b 100644 --- a/docs/examples/Aggregation_Data_Object_Operations.ipynb +++ b/docs/examples/Aggregation_Data_Object_Operations.ipynb @@ -14,7 +14,8 @@ " * Time series\n", " * Geographic feature\n", " * Geographic raster\n", - " * Multidimensional NetCDF" + " * Multidimensional NetCDF\n", + " * CSV" ], "metadata": { "collapsed": false @@ -84,8 +85,9 @@ "* Geographic feature : fiona.Collection\n", "* Geographic raster : rasterio.DatasetReader\n", "* Multidimensional NetCDF : xarray.Dataset\n", + "* CSV : pandas.DataFrame\n", "\n", - "In the following code examples, we are assuming that we have a resource in HydroShare that contains the above four aggregation types. All these aggregations are at the root of the resource. The resource id used in the following code examples is \"a0e0c2e2e5e84e1e9b6b2b2b2b2b2b2b\". You will need to change this resource id to the id of your resource in HydroShare.\n" + "In the following code examples, we are assuming that we have a resource in HydroShare that contains the above five aggregation types. All these aggregations are at the root of the resource. The resource id used in the following code examples is \"a0e0c2e2e5e84e1e9b6b2b2b2b2b2b2b\". You will need to change this resource id to the id of your resource in HydroShare.\n" ], "metadata": { "collapsed": false @@ -936,6 +938,167 @@ }, "outputs": [], "execution_count": null + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "### Loading CSV Data to pandas.DataFrame\n", + "Here we are assuming the CSV aggregation contains a CSV file with name \"sample.csv\" " + ] + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# retrieve the CSV aggregation\n", + "file_path = \"sample.csv\"\n", + "csv_aggr = resource.aggregation(file__path=file_path)" + ], + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# show the aggregation type\n", + "print(f\"Aggregation Type:{csv_aggr.metadata.type}\")" + ], + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# download the CSV aggregation - these directory paths must exist for hsclient to download and unzip the aggregation zip file\n", + "# Note: These directory paths need to be changed based on where you want to download the aggregation\n", + "download_to = os.path.join(base_working_dir, \"csv_testing\")\n", + "unzip_to = os.path.join(download_to, \"aggr_unzipped\")\n", + "aggr_path = resource.aggregation_download(aggregation=csv_aggr, save_path=download_to, unzip_to=unzip_to)\n", + "print(f\"Downloaded aggregation to:{aggr_path}\")" + ], + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# load the CSV aggregation as pandas.DataFrame\n", + "csv_df = csv_aggr.as_data_object(agg_path=aggr_path)" + ], + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# show number of rows and columns\n", + "print(f\"Number of data rows:{len(csv_df)}\")\n", + "print(f\"Number of data columns:{len(csv_df.columns)}\")" + ], + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# show the first 5 data rows\n", + "print(csv_df.head(5))" + ], + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# show the extracted CSV aggregation metadata (table schema)\n", + "table_schema = csv_aggr.metadata.tableSchema\n", + "table = table_schema.table\n", + "print(f\"Number of data rows:{table_schema.rows}\")\n", + "print(f\"Number of data columns:{len(table.columns)}\")\n", + "print(f\"Delimiter:{table_schema.delimiter}\")\n", + "\n", + "# show data column properties\n", + "for col in table.columns:\n", + " print(f\"Column number:{col.column_number}\")\n", + " print(f\"Column title:{col.title}\")\n", + " print(f\"Column description:{col.description}\")\n", + " print(f\"Column data type:{col.datatype}\")" + ], + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "***Editing CSV aggregation using pandas.DataFrame***" + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# drop the last data column - note all editing needs to be in 'inplace' mode\n", + "csv_df.drop(csv_df.columns[-1], axis=1, inplace=True)\n", + "# show the number of data columns after the edit\n", + "print(f\"Number of data columns after edit:{len(csv_df.columns)}\")" + ], + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# save the updated CSV aggregation in Hydroshare\n", + "# Note this will overwrite the original aggregation - this operation may take a while\n", + "csv_aggr = csv_aggr.save_data_object(resource=resource, agg_path=aggr_path, as_new_aggr=False)\n", + "print(\"Aggregation updated ...\")" + ], + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# we can also create a new CSV aggregation in HydroShare using the updated pandas.DataFrame object\n", + "# we first create a new folder in which the new aggregation will be created\n", + "aggr_folder = \"csv_folder\"\n", + "resource.folder_create(folder=aggr_folder)\n", + "\n", + "# this operation may take a while\n", + "csv_aggr = csv_aggr.save_data_object(resource=resource, agg_path=aggr_path, as_new_aggr=True, destination_path=aggr_folder)\n", + "print(\"New CSV aggregation was created ...\")" + ], + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# retrieve the updated CSV aggregation to verify the data got updated\n", + "download_to = os.path.join(base_working_dir, \"csv_testing\")\n", + "\n", + "# note the unzip_to directory must exist and be empty\n", + "unzip_to = os.path.join(download_to, \"aggr_unzipped\")\n", + "aggr_path = resource.aggregation_download(aggregation=csv_aggr, save_path=download_to, unzip_to=unzip_to)\n", + "csv_df = csv_aggr.as_data_object(agg_path=aggr_path)\n", + "\n", + "# show the number of data rows and columns\n", + "print(f\"Number of data rows:{len(csv_df)}\")\n", + "print(f\"Number of data columns:{len(csv_df.columns)}\")\n", + "# show the first 5 data rows\n", + "print(csv_df.head(5))" + ], + "outputs": [], + "execution_count": null } ], "metadata": { From 61a51e43662ff5880cd3ce19ac139082fd46a954 Mon Sep 17 00:00:00 2001 From: pkdash Date: Wed, 18 Sep 2024 11:28:34 -0400 Subject: [PATCH 07/18] [#71] allow creating fileset aggregation using folder path --- hsclient/hydroshare.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hsclient/hydroshare.py b/hsclient/hydroshare.py index 9f64fc6..b782905 100644 --- a/hsclient/hydroshare.py +++ b/hsclient/hydroshare.py @@ -1194,7 +1194,10 @@ def file_aggregate(self, path: str, agg_type: AggregationType, refresh: bool = T if agg_type == AggregationType.SingleFileAggregation: type_value = 'SingleFile' if agg_type == AggregationType.FileSetAggregation: - relative_path = dirname(path) + if '/' in path: + relative_path = dirname(path) + else: + relative_path = path data = {"folder_path": relative_path} url = urljoin(self._hsapi_path, "functions", "set-file-type", path, type_value) From 6ff7128288c8233b0d4b5e4c1391ffb1680892c8 Mon Sep 17 00:00:00 2001 From: pkdash Date: Wed, 18 Sep 2024 11:30:24 -0400 Subject: [PATCH 08/18] [#71] updating example notebook to include code example for creating fileset aggregation --- docs/examples/Aggregation_Operations.ipynb | 72 ++++++++++++++++++---- 1 file changed, 59 insertions(+), 13 deletions(-) diff --git a/docs/examples/Aggregation_Operations.ipynb b/docs/examples/Aggregation_Operations.ipynb index e712921..b93561b 100644 --- a/docs/examples/Aggregation_Operations.ipynb +++ b/docs/examples/Aggregation_Operations.ipynb @@ -51,7 +51,11 @@ { "cell_type": "code", "metadata": { - "id": "3njsiY73m7_V" + "id": "3njsiY73m7_V", + "ExecuteTime": { + "end_time": "2024-09-18T15:18:39.970173Z", + "start_time": "2024-09-18T15:18:37.168719Z" + } }, "source": [ "from hsclient import HydroShare\n", @@ -60,7 +64,7 @@ "hs.sign_in()" ], "outputs": [], - "execution_count": null + "execution_count": 1 }, { "cell_type": "markdown", @@ -78,7 +82,11 @@ { "cell_type": "code", "metadata": { - "id": "W9azvJ_Co87w" + "id": "W9azvJ_Co87w", + "ExecuteTime": { + "end_time": "2024-09-18T15:20:25.336568Z", + "start_time": "2024-09-18T15:20:16.048103Z" + } }, "source": [ "# Create the new, empty resource\n", @@ -91,8 +99,17 @@ "# Construct a hyperlink for the new resource\n", "print(f'Your new resource is available at: {new_resource.metadata.url}')" ], - "outputs": [], - "execution_count": null + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The HydroShare Identifier for your new resource is: 570ff33346fc4a849a134c558bb8dcab\n", + "Your new resource is available at: http://localhost:8000/resource/570ff33346fc4a849a134c558bb8dcab\n" + ] + } + ], + "execution_count": 2 }, { "cell_type": "markdown", @@ -129,7 +146,11 @@ { "cell_type": "code", "metadata": { - "id": "sCvGL4g-PGXS" + "id": "sCvGL4g-PGXS", + "ExecuteTime": { + "end_time": "2024-09-18T15:21:12.278704Z", + "start_time": "2024-09-18T15:20:46.402882Z" + } }, "source": [ "# Import the aggregation types\n", @@ -148,8 +169,17 @@ "print(f'The following aggregation was added to the resource: {agg.metadata.title}')\n", "print(f'Aggregation type: {agg.metadata.type}')" ], - "outputs": [], - "execution_count": null + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The following aggregation was added to the resource: Data_File1\n", + "Aggregation type: Generic\n" + ] + } + ], + "execution_count": 3 }, { "cell_type": "markdown", @@ -465,7 +495,12 @@ }, { "cell_type": "code", - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-18T15:22:24.403157Z", + "start_time": "2024-09-18T15:21:42.129071Z" + } + }, "source": [ "# Create a new folder for the file set aggregation\n", "new_resource.folder_create('Fileset_Aggregation')\n", @@ -474,10 +509,21 @@ "new_resource.file_upload('Example_Files/Data_File1.txt', 'Example_Files/Data_File2.txt',\n", " destination_path='Fileset_Aggregation')\n", "\n", - "# TODO: How to set a fileset aggregation on a folder containing files?" - ], - "outputs": [], - "execution_count": null + "# set the folder to fileset aggregation\n", + "new_resource.file_aggregate(path='Fileset_Aggregation', agg_type=AggregationType.FileSetAggregation)\n", + "fs_agg = new_resource.aggregation(type='FileSet')\n", + "print(f\"Aggregation Type: {fs_agg.metadata.type}\")" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Aggregation Type: FileSet\n" + ] + } + ], + "execution_count": 4 }, { "metadata": {}, From d8600f0b411f7c0809ff18c1406b8641a0c862f0 Mon Sep 17 00:00:00 2001 From: pkdash Date: Wed, 18 Sep 2024 17:24:05 -0400 Subject: [PATCH 09/18] [#71] adding md files for api and metadata for csv aggregation documentation --- docs/api/csv.md | 1 + docs/metadata/CSV.md | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 docs/api/csv.md create mode 100644 docs/metadata/CSV.md diff --git a/docs/api/csv.md b/docs/api/csv.md new file mode 100644 index 0000000..160e6c4 --- /dev/null +++ b/docs/api/csv.md @@ -0,0 +1 @@ +::: hsclient.hydroshare.CSVAggregation \ No newline at end of file diff --git a/docs/metadata/CSV.md b/docs/metadata/CSV.md new file mode 100644 index 0000000..ba49001 --- /dev/null +++ b/docs/metadata/CSV.md @@ -0,0 +1,2 @@ +::: hsmodels.schemas.aggregations.CSVFileMetadata +::: hsmodels.schemas.aggregations.CSVFileMetadataIn \ No newline at end of file From 6880f9d65061bbc17157bee753eee786a0cddf6a Mon Sep 17 00:00:00 2001 From: pkdash Date: Wed, 18 Sep 2024 17:25:53 -0400 Subject: [PATCH 10/18] [#71] updating mkdocs configuration file for csv aggregation --- mkdocs.yml | 48 +++++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 79cea3d..03298d2 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,7 +1,7 @@ site_name: hsclient repo_name: hydroshare/hsclient repo_url: https://github.com/hydroshare/hsclient -edit_url: edit/master/docs/ +edit_uri: edit/master/docs/ theme: readthedocs @@ -21,28 +21,30 @@ markdown_extensions: nav: - Usage Examples: - Basic Operations: examples/Basic_Operations.ipynb - Aggregation Operations: examples/Aggregation_Operations.ipynb - File Operations: examples/File_Operations.ipynb - Metadata Operations: examples/Metadata_Operations.ipynb - Aggregation Data Object Operations: examples/Aggregation_Data_Object_Operations.ipynb + - Basic Operations: examples/Basic_Operations.ipynb + - Aggregation Operations: examples/Aggregation_Operations.ipynb + - File Operations: examples/File_Operations.ipynb + - Metadata Operations: examples/Metadata_Operations.ipynb + - Aggregation Data Object Operations: examples/Aggregation_Data_Object_Operations.ipynb - Developer Documentation: - Models: - Single File: metadata/SingleFile.md - File Set: metadata/FileSet.md - Geographic Feature: metadata/GeographicFeature.md - Geographic Raster: metadata/GeographicRaster.md - Multidimensional: metadata/Multidimensional.md - Referenced Time Series: metadata/ReferencedTimeSeries.md - Time Series: metadata/TimeSeries.md - Model Program: metadata/ModelProgram.md - Model Instance: metadata/ModelInstance.md + - Single File: metadata/SingleFile.md + - File Set: metadata/FileSet.md + - Geographic Feature: metadata/GeographicFeature.md + - Geographic Raster: metadata/GeographicRaster.md + - Multidimensional: metadata/Multidimensional.md + - Referenced Time Series: metadata/ReferencedTimeSeries.md + - Time Series: metadata/TimeSeries.md + - Model Program: metadata/ModelProgram.md + - Model Instance: metadata/ModelInstance.md + - CSV: metadata/CSV.md - API: - HydroShare: api/hydroshare.md - Resource: api/resource.md - File: api/file.md - Aggregation: api/aggregation.md - Multidimensional Aggregation: api/netcdf_aggregation.md - Geographic Feature Aggregation: api/geo_feature_aggregation.md - Geographic Raster Aggregation: api/geo_raster_aggregation.md - Time Series Aggregation: api/time_series_aggregation.md + - HydroShare: api/hydroshare.md + - Resource: api/resource.md + - File: api/file.md + - Aggregation: api/aggregation.md + - Multidimensional Aggregation: api/netcdf_aggregation.md + - Geographic Feature Aggregation: api/geo_feature_aggregation.md + - Geographic Raster Aggregation: api/geo_raster_aggregation.md + - Time Series Aggregation: api/time_series_aggregation.md + - CSV Aggregation: api/csv.md From 280a8cc918d7104dd99b40d4d96aafbdb0cbfebf Mon Sep 17 00:00:00 2001 From: pkdash Date: Wed, 18 Sep 2024 17:32:31 -0400 Subject: [PATCH 11/18] [#71] updating metadata md documentation files to use the respective base classes --- docs/metadata/FileSet.md | 4 ++-- docs/metadata/GeographicFeature.md | 5 +++-- docs/metadata/GeographicRaster.md | 5 +++-- docs/metadata/ModelInstance.md | 5 +++-- docs/metadata/ModelProgram.md | 4 ++-- docs/metadata/Multidimensional.md | 4 ++-- docs/metadata/ReferencedTimeSeries.md | 4 ++-- docs/metadata/SingleFile.md | 6 +++--- docs/metadata/TimeSeries.md | 4 ++-- 9 files changed, 22 insertions(+), 19 deletions(-) diff --git a/docs/metadata/FileSet.md b/docs/metadata/FileSet.md index 6659250..34f3444 100644 --- a/docs/metadata/FileSet.md +++ b/docs/metadata/FileSet.md @@ -1,3 +1,3 @@ -:::hsmodels.schemas.aggregations.FileSetMetadata -:::hsmodels.schemas.aggregations.BaseAggregationMetadataIn +::: hsmodels.schemas.aggregations.FileSetMetadata +::: hsmodels.schemas.aggregations.FileSetMetadataIn diff --git a/docs/metadata/GeographicFeature.md b/docs/metadata/GeographicFeature.md index 5dc7dd4..3f31753 100644 --- a/docs/metadata/GeographicFeature.md +++ b/docs/metadata/GeographicFeature.md @@ -1,3 +1,4 @@ -:::hsmodels.schemas.aggregations.GeographicFeatureMetadata -:::hsmodels.schemas.aggregations.BaseAggregationMetadataIn +::: hsmodels.schemas.aggregations.GeographicFeatureMetadata +::: hsmodels.schemas.aggregations.GeographicFeatureMetadataIn + diff --git a/docs/metadata/GeographicRaster.md b/docs/metadata/GeographicRaster.md index 02f5bdd..ad64872 100644 --- a/docs/metadata/GeographicRaster.md +++ b/docs/metadata/GeographicRaster.md @@ -1,3 +1,4 @@ -:::hsmodels.schemas.aggregations.GeographicRasterMetadata -:::hsmodels.schemas.aggregations.BaseAggregationMetadataIn +::: hsmodels.schemas.aggregations.GeographicRasterMetadata +::: hsmodels.schemas.aggregations.GeographicRasterMetadataIn + diff --git a/docs/metadata/ModelInstance.md b/docs/metadata/ModelInstance.md index d7193a9..a03c2d2 100644 --- a/docs/metadata/ModelInstance.md +++ b/docs/metadata/ModelInstance.md @@ -1,3 +1,4 @@ -:::hsmodels.schemas.aggregations.ModelInstanceMetadata -:::hsmodels.schemas.aggregations.BaseAggregationMetadataIn +::: hsmodels.schemas.aggregations.ModelInstanceMetadata +::: hsmodels.schemas.aggregations.ModelInstanceMetadataIn + diff --git a/docs/metadata/ModelProgram.md b/docs/metadata/ModelProgram.md index a7b8c63..05beffa 100644 --- a/docs/metadata/ModelProgram.md +++ b/docs/metadata/ModelProgram.md @@ -1,3 +1,3 @@ -:::hsmodels.schemas.aggregations.ModelProgramMetadata -:::hsmodels.schemas.aggregations.BaseAggregationMetadataIn +::: hsmodels.schemas.aggregations.ModelProgramMetadata +::: hsmodels.schemas.aggregations.ModelProgramMetadataIn diff --git a/docs/metadata/Multidimensional.md b/docs/metadata/Multidimensional.md index c90d731..66a69e3 100644 --- a/docs/metadata/Multidimensional.md +++ b/docs/metadata/Multidimensional.md @@ -1,3 +1,3 @@ -:::hsmodels.schemas.aggregations.MultidimensionalMetadata -:::hsmodels.schemas.aggregations.BaseAggregationMetadataIn +::: hsmodels.schemas.aggregations.MultidimensionalMetadata +::: hsmodels.schemas.aggregations.MultidimensionalMetadataIn diff --git a/docs/metadata/ReferencedTimeSeries.md b/docs/metadata/ReferencedTimeSeries.md index e5249d2..a6a16a5 100644 --- a/docs/metadata/ReferencedTimeSeries.md +++ b/docs/metadata/ReferencedTimeSeries.md @@ -1,3 +1,3 @@ -:::hsmodels.schemas.aggregations.ReferencedTimeSeriesMetadata -:::hsmodels.schemas.aggregations.BaseAggregationMetadataIn +::: hsmodels.schemas.aggregations.ReferencedTimeSeriesMetadata +::: hsmodels.schemas.aggregations.ReferencedTimeSeriesMetadataIn diff --git a/docs/metadata/SingleFile.md b/docs/metadata/SingleFile.md index fc3efec..8a0d881 100644 --- a/docs/metadata/SingleFile.md +++ b/docs/metadata/SingleFile.md @@ -1,3 +1,3 @@ - -:::hsmodels.schemas.aggregations.SingleFileMetadata -:::hsmodels.schemas.aggregations.BaseAggregationMetadataIn +::: hsmodels.schemas.aggregations.SingleFileMetadata +::: hsmodels.schemas.aggregations.SingleFileMetadataIn +::: hsmodels.schemas.aggregations.BaseAggregationMetadataIn diff --git a/docs/metadata/TimeSeries.md b/docs/metadata/TimeSeries.md index 5768af5..76bdb2f 100644 --- a/docs/metadata/TimeSeries.md +++ b/docs/metadata/TimeSeries.md @@ -1,3 +1,3 @@ -:::hsmodels.schemas.aggregations.TimeSeriesMetadata -:::hsmodels.schemas.aggregations.BaseAggregationMetadataIn +::: hsmodels.schemas.aggregations.TimeSeriesMetadata +::: hsmodels.schemas.aggregations.TimeSeriesMetadataIn From cde9cc8af7f3f12e16a73b55fce5c266c77dbc4c Mon Sep 17 00:00:00 2001 From: pkdash Date: Thu, 19 Sep 2024 14:55:42 -0400 Subject: [PATCH 12/18] [#71] loading csv data to pandas dataframe with datatype set to string --- hsclient/hydroshare.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hsclient/hydroshare.py b/hsclient/hydroshare.py index b782905..895dd59 100644 --- a/hsclient/hydroshare.py +++ b/hsclient/hydroshare.py @@ -875,7 +875,8 @@ def as_data_object(self, agg_path: str) -> 'pandas.DataFrame': if pandas is None: raise Exception("pandas package not found") - return self._get_data_object(agg_path=agg_path, func=pandas.read_csv, comment="#") + return self._get_data_object(agg_path=agg_path, func=pandas.read_csv, comment="#", dtype="string", + engine="python") def save_data_object(self, resource: 'Resource', agg_path: str, as_new_aggr: bool = False, destination_path: str = "") -> 'Aggregation': From 11a14d74f8a12a75a00671e9ad33b4c6c59c6456 Mon Sep 17 00:00:00 2001 From: pkdash Date: Wed, 25 Sep 2024 15:10:41 -0400 Subject: [PATCH 13/18] [#71] using latest version of hsmodels --- requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index e4f967e..3b4f35d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ -hsmodels >= 1.0.3 -pytest == 6.0.2 -requests == 2.24.0 +hsmodels>=1.0.4 +pytest==6.0.2 +requests==2.24.0 email-validator pandas netCDF4 From 02d53e7e1e26fc1c84580da859795fe12a6f6714 Mon Sep 17 00:00:00 2001 From: pkdash Date: Fri, 27 Sep 2024 17:40:25 -0400 Subject: [PATCH 14/18] [#71] changes to user model website field --- hsclient/json_models.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/hsclient/json_models.py b/hsclient/json_models.py index 9f90b61..bbd7e88 100644 --- a/hsclient/json_models.py +++ b/hsclient/json_models.py @@ -1,5 +1,5 @@ from datetime import datetime -from typing import Dict, List, Tuple +from typing import Dict, List, Tuple, Optional from hsmodels.schemas.enums import UserIdentifierType from pydantic import AnyUrl, BaseModel, HttpUrl, field_validator @@ -12,7 +12,7 @@ class User(BaseModel): phone: str = None address: str = None organization: str = None - website: HttpUrl = None + website: Optional[HttpUrl] = None identifiers: Dict[UserIdentifierType, AnyUrl] = {} type: str = None subject_areas: List[str] = [] @@ -26,6 +26,12 @@ def split_subject_areas(cls, value): return [] return value + @field_validator("website", mode='before') + def handle_empty_website(cls, v): + if v == "": + v = None + return v + class ResourcePreview(BaseModel): resource_type: str = None From b557e5666f2a68a8e7d7ebaab87ad78075bde212 Mon Sep 17 00:00:00 2001 From: pkdash Date: Fri, 27 Sep 2024 18:01:55 -0400 Subject: [PATCH 15/18] [#71] adding folder related code examples to example notebook --- docs/examples/Example_Files/test.zip | Bin 0 -> 155 bytes docs/examples/File_Operations.ipynb | 212 +++++++++++++++++++++++---- 2 files changed, 187 insertions(+), 25 deletions(-) create mode 100644 docs/examples/Example_Files/test.zip diff --git a/docs/examples/Example_Files/test.zip b/docs/examples/Example_Files/test.zip new file mode 100644 index 0000000000000000000000000000000000000000..251847d9b5b6fa5f56741f8101ab74a93e0edfd7 GIT binary patch literal 155 zcmWIWW@Zs#00GlP>q!4wwwpA8Y!K!E;*!+j61|d&5)hr4m#$EnSCv_ykXD+PT#}ie zmza}TQmK%cr{GbUQj{N@kyw-(;LXS+!hqXApqUJe3<@9$2w=tsc(byB_>4ek2BiH# G90mZ90wAma literal 0 HcmV?d00001 diff --git a/docs/examples/File_Operations.ipynb b/docs/examples/File_Operations.ipynb index 18b213c..c208181 100644 --- a/docs/examples/File_Operations.ipynb +++ b/docs/examples/File_Operations.ipynb @@ -140,7 +140,7 @@ }, "source": [ "# Upload one or more files to your resource\n", - "new_resource.file_upload('Example_Files/Data_File1.csv', 'Example_Files/Data_File2.csv')\n", + "new_resource.file_upload('Example_Files/Data_File1.txt', 'Example_Files/Data_File2.txt')\n", "\n", "# Print the names of the files in the resource\n", "print('Updated file list after adding a file: ')\n", @@ -163,7 +163,7 @@ "new_resource.folder_create('New_Folder')\n", "\n", "# Upload one or more files to a specific folder within a resource\n", - "new_resource.file_upload('Example_Files/Data_File2.csv', destination_path='New_Folder')\n", + "new_resource.file_upload('Example_Files/Data_File2.txt', destination_path='New_Folder')\n", "\n", "# Print the names of the files in the resource\n", "print('Updated file list after adding a file: ')\n", @@ -218,15 +218,15 @@ "print('\\n')\n", "\n", "# Get a list of all files that have a specific extension. This searches all folders\n", - "file_list = new_resource.files(extension='.csv')\n", - "print('All files with a .csv file extension:')\n", + "file_list = new_resource.files(extension='.txt')\n", + "print('All files with a .txt file extension:')\n", "print(*file_list, sep='\\n')\n", "print('\\n')\n", "\n", "# Filters can be combined\n", "# Get a list of all files in a particular folder that have a specific extension\n", - "file_list = new_resource.files(folder='New_Folder', extension='.csv')\n", - "print('All files with a .csv file extension in a particular folder:')\n", + "file_list = new_resource.files(folder='New_Folder', extension='.txt')\n", + "print('All files with a .txt file extension in a particular folder:')\n", "print(*file_list, sep='\\n')" ], "outputs": [], @@ -238,7 +238,7 @@ "source": [ "#### Search for a Single File\n", "\n", - "Execute a filter to look for a single file in the resource that meets the search critera." + "Execute a filter to look for a single file in the resource that meets the search criteria." ] }, { @@ -246,7 +246,7 @@ "metadata": {}, "source": [ "# Get a single file using its path relative to the resource content directory\n", - "file = new_resource.file(path='New_Folder/Data_File2.csv')\n", + "file = new_resource.file(path='New_Folder/Data_File2.txt')\n", "print('File retrieved using path:')\n", "print(file)\n", "print('\\n')\n", @@ -255,7 +255,7 @@ "# Note that if you have multiple files in your resource with the same name, but in different\n", "# folders, you should search for a particular file using the path parameter to ensure that\n", "# you get the right file\n", - "file = new_resource.file(name='Data_File2.csv')\n", + "file = new_resource.file(name='Data_File2.txt')\n", "print('File retrieved using name:')\n", "print(file)" ], @@ -276,7 +276,7 @@ "metadata": {}, "source": [ "# Search for a file within a resource\n", - "file = new_resource.file(path='New_Folder/Data_File2.csv')\n", + "file = new_resource.file(path='New_Folder/Data_File2.txt')\n", "\n", "# Print the properties of the file\n", "print(f'File name: {file.name}')\n", @@ -303,10 +303,10 @@ "metadata": {}, "source": [ "# Get a file to rename - use the relative path to the file to make sure you have the right one\n", - "file = new_resource.file(path='Data_File2.csv')\n", + "file = new_resource.file(path='Data_File2.txt')\n", "\n", "# Rename the file to whatever you want\n", - "new_resource.file_rename(file, 'Data_File2_Renamed.csv')\n", + "new_resource.file_rename(file, 'Data_File2_Renamed.txt')\n", "\n", "# Print the names of the files in the resource\n", "print('Updated file list after renaming a file: ')\n", @@ -328,13 +328,13 @@ "metadata": {}, "source": [ "# Get a file to move\n", - "file = new_resource.file(path='Data_File1.csv')\n", + "file = new_resource.file(path='Data_File1.txt')\n", "\n", "# Move the file to a different folder\n", - "new_resource.file_rename(file, 'New_Folder/Data_File1.csv')\n", + "new_resource.file_rename(file, 'New_Folder/Data_File1.txt')\n", "\n", "# Print the names of the files in the resource\n", - "print('Updated file list after adding a file: ')\n", + "print('Updated file list after renaming a file: ')\n", "for file in new_resource.files(search_aggregations=True):\n", " print(file.path)" ], @@ -351,7 +351,7 @@ "\n", "You can download individual files from an existing HydroShare resource. You can use the filters shown above to specify which file(s) you want to download.\n", "\n", - "When you call the `download()` function on an individual file, you can pass a path where you want to save the file as a string. Leaving the path blank downloads the files to the same directory as your Jupyter Notebook." + "When you call the `file_download()` function on an individual file, you can pass a path where you want to save the file as a string. Leaving the path blank downloads the files to the same directory as your Jupyter Notebook." ] }, { @@ -363,7 +363,7 @@ "# Download a single file from a resource\n", "# Note that if you have multiple files within the same resource that have the same name,\n", "# and you want a particular file, you need to specify the relative path to the specific file\n", - "file = new_resource.file(path='New_Folder/Data_File1.csv')\n", + "file = new_resource.file(path='New_Folder/Data_File1.txt')\n", "new_resource.file_download(file)" ], "outputs": [], @@ -383,8 +383,33 @@ "metadata": { "id": "9cz_dgOsLb3n" }, + "source": "!rm 'Data_File1.txt'", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "markdown", "source": [ - "!rm 'Data_File1.csv'" + "### Unzipping a File in a Resource\n", + "\n", + "You can unzip a file in a HydroShare resource." + ] + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# Upload a zipped file to the resource\n", + "new_resource.file_upload('Example_Files/test.zip')\n", + "\n", + "# Specify the file you want to unzip\n", + "new_resource.file_unzip(path='test.zip')\n", + "\n", + "# Print the names of the files in the resource\n", + "print('Updated file list after unzipping a file: ')\n", + "for file in new_resource.files(search_aggregations=True):\n", + " print(file.path)" ], "outputs": [], "execution_count": null @@ -407,7 +432,7 @@ }, "source": [ "# Specify the file you want to delete\n", - "file = new_resource.file(path='New_Folder/Data_File2.csv')\n", + "file = new_resource.file(path='New_Folder/Data_File2.txt')\n", "\n", "new_resource.file_delete(file)\n", "\n", @@ -420,16 +445,153 @@ "execution_count": null }, { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "### Deleting Folders from a Resource\n", + "\n", + "You can delete folders from a HydroShare resource. You can delete a folder and all of the files within it.\n" + ] + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# Specify the folder you want to delete\n", + "new_resource.folder_delete('New_Folder')\n", + "\n", + "# Print the names of the files in the resource\n", + "print('Updated file list after deleting folder: ')\n", + "for file in new_resource.files(search_aggregations=True):\n", + " print(file.path)" + ], + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "### Moving a Folder in a Resource\n", + "\n", + "You can move a folder in a HydroShare resource. You can move a folder and all of the files within it to a different folder in that resource. Moving folders is similar to renaming. Instead of just changing the folder name, change the relative path of the folder to move it to the new location within the resource.\n" + ] + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# First create a new folder\n", + "new_resource.folder_create('New_Folder_1')\n", + "# Upload one or more files to a specific folder within a resource\n", + "new_resource.file_upload('Example_Files/Data_File1.txt', destination_path='New_Folder_1')\n", + "\n", + "# Print the names of the files in the resource\n", + "print('Updated file list after uploading file to folder: ')\n", + "for file in new_resource.files(search_aggregations=True):\n", + " print(file.path)" + ], + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# Create a 2nd folder\n", + "new_resource.folder_create('New_Folder_2')\n", + "# Upload one or more files to a specific folder within a resource\n", + "new_resource.file_upload('Example_Files/Data_File2.txt', destination_path='New_Folder_2')\n", + "\n", + "# Print the names of the files in the resource\n", + "print('Updated file list after uploading file to folder: ')\n", + "for file in new_resource.files(search_aggregations=True):\n", + " print(file.path)" + ], + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# Now move the folder 'New_Folder_2' to 'New_Folder_1' - this will make 'New_Folder_2' a subfolder of 'New_Folder_1'\n", + "new_resource.folder_rename('New_Folder_2', 'New_Folder_1/New_Folder_2')\n", + "\n", + "# Print the names of the files in the resource\n", + "print('Updated file list after moving folder: ')\n", + "for file in new_resource.files(search_aggregations=True):\n", + " print(file.path)" + ], + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "### Renaming a Folder in a Resource\n", + "\n", + "You can rename a folder in a HydroShare resource.\n" + ] + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# Specify the folder you want to rename\n", + "new_resource.folder_rename('New_Folder_1', 'New_Folder_1_Renamed')\n", + "\n", + "# Print the names of the files in the resource\n", + "print('Updated file list after renaming folder: ')\n", + "for file in new_resource.files(search_aggregations=True):\n", + " print(file.path)" + ], + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, "cell_type": "markdown", + "source": [ + "### Zipping a Folder in a Resource\n", + "\n", + "You can zip a folder in a HydroShare resource. By default, the name of the generated zip file will be based on the name of the folder being zipped. You can optionally provide a name for the generated zip file using the 'zip_name' parameter to the `file_zip()` function. The zip file will be created at the same location where the folder being zipped exists. \n" + ] + }, + { "metadata": {}, + "cell_type": "code", "source": [ - "### TODO: The following items are being worked on\n", - "* Delete a folder and all of the files inside it\n", - "* Moving a folder\n", - "* Zip a file or folder\n", - "* Rename a folder\n", - "* Download a folder as a zipped file" + "# Specify the folder you want to zip - optionally provide a name for the zip file using the parameter 'zip_name'\n", + "new_resource.file_zip('New_Folder_1_Renamed/New_Folder_2')\n", + "\n", + "# Print the names of the files in the resource\n", + "print('Updated file list after zipping folder: ')\n", + "for file in new_resource.files(search_aggregations=True):\n", + " print(file.path)" + ], + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "### Downloading a Folder in a Resource\n", + "\n", + "You can download a folder in a HydroShare resource as a zipped file. You can pass a path using the 'save_path' parameter where you want to save the folder zipped file as a string to the `file_download()` function. Leaving the path blank downloads the folder to the same directory as your Jupyter Notebook." ] + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "# Specify the folder you want to download - optionally use the parameter 'save_path` to specify where you want to save the zipped file\n", + "new_resource.file_download('New_Folder_1_Renamed', zipped=True)" + ], + "outputs": [], + "execution_count": null } ], "metadata": { From 342c7c0a8bf7229232c533e13d74256051df7187 Mon Sep 17 00:00:00 2001 From: pkdash Date: Fri, 27 Sep 2024 18:04:24 -0400 Subject: [PATCH 16/18] [#71] csv content type column properties output formatting in notebook --- docs/examples/Aggregation_Data_Object_Operations.ipynb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/examples/Aggregation_Data_Object_Operations.ipynb b/docs/examples/Aggregation_Data_Object_Operations.ipynb index 655571b..4e4ed05 100644 --- a/docs/examples/Aggregation_Data_Object_Operations.ipynb +++ b/docs/examples/Aggregation_Data_Object_Operations.ipynb @@ -1029,7 +1029,8 @@ " print(f\"Column number:{col.column_number}\")\n", " print(f\"Column title:{col.title}\")\n", " print(f\"Column description:{col.description}\")\n", - " print(f\"Column data type:{col.datatype}\")" + " print(f\"Column data type:{col.datatype}\")\n", + " print(\"-\"*50) " ], "outputs": [], "execution_count": null From 03aba8e89438c2f3758f4d46918532cdabae6fda Mon Sep 17 00:00:00 2001 From: pkdash Date: Tue, 1 Oct 2024 18:36:15 -0400 Subject: [PATCH 17/18] [#71] referencing base aggregation class in all aggregation metadata documentation (github pages) --- docs/api/csv.md | 2 +- docs/metadata/CSV.md | 3 ++- docs/metadata/FileSet.md | 2 +- docs/metadata/GeographicFeature.md | 3 +-- docs/metadata/GeographicRaster.md | 3 +-- docs/metadata/ModelInstance.md | 3 +-- docs/metadata/ModelProgram.md | 2 +- docs/metadata/Multidimensional.md | 2 +- docs/metadata/ReferencedTimeSeries.md | 2 +- docs/metadata/TimeSeries.md | 2 +- 10 files changed, 11 insertions(+), 13 deletions(-) diff --git a/docs/api/csv.md b/docs/api/csv.md index 160e6c4..afcddaf 100644 --- a/docs/api/csv.md +++ b/docs/api/csv.md @@ -1 +1 @@ -::: hsclient.hydroshare.CSVAggregation \ No newline at end of file +::: hsclient.hydroshare.CSVAggregation diff --git a/docs/metadata/CSV.md b/docs/metadata/CSV.md index ba49001..a92aad9 100644 --- a/docs/metadata/CSV.md +++ b/docs/metadata/CSV.md @@ -1,2 +1,3 @@ ::: hsmodels.schemas.aggregations.CSVFileMetadata -::: hsmodels.schemas.aggregations.CSVFileMetadataIn \ No newline at end of file +::: hsmodels.schemas.aggregations.CSVFileMetadataIn +::: hsmodels.schemas.aggregations.BaseAggregationMetadataIn diff --git a/docs/metadata/FileSet.md b/docs/metadata/FileSet.md index 34f3444..8fe3060 100644 --- a/docs/metadata/FileSet.md +++ b/docs/metadata/FileSet.md @@ -1,3 +1,3 @@ - ::: hsmodels.schemas.aggregations.FileSetMetadata ::: hsmodels.schemas.aggregations.FileSetMetadataIn +::: hsmodels.schemas.aggregations.BaseAggregationMetadataIn diff --git a/docs/metadata/GeographicFeature.md b/docs/metadata/GeographicFeature.md index 3f31753..8cb238c 100644 --- a/docs/metadata/GeographicFeature.md +++ b/docs/metadata/GeographicFeature.md @@ -1,4 +1,3 @@ - ::: hsmodels.schemas.aggregations.GeographicFeatureMetadata ::: hsmodels.schemas.aggregations.GeographicFeatureMetadataIn - +::: hsmodels.schemas.aggregations.BaseAggregationMetadataIn diff --git a/docs/metadata/GeographicRaster.md b/docs/metadata/GeographicRaster.md index ad64872..a5e734c 100644 --- a/docs/metadata/GeographicRaster.md +++ b/docs/metadata/GeographicRaster.md @@ -1,4 +1,3 @@ - ::: hsmodels.schemas.aggregations.GeographicRasterMetadata ::: hsmodels.schemas.aggregations.GeographicRasterMetadataIn - +::: hsmodels.schemas.aggregations.BaseAggregationMetadataIn diff --git a/docs/metadata/ModelInstance.md b/docs/metadata/ModelInstance.md index a03c2d2..ac51b4c 100644 --- a/docs/metadata/ModelInstance.md +++ b/docs/metadata/ModelInstance.md @@ -1,4 +1,3 @@ - ::: hsmodels.schemas.aggregations.ModelInstanceMetadata ::: hsmodels.schemas.aggregations.ModelInstanceMetadataIn - +::: hsmodels.schemas.aggregations.BaseAggregationMetadataIn diff --git a/docs/metadata/ModelProgram.md b/docs/metadata/ModelProgram.md index 05beffa..b16795f 100644 --- a/docs/metadata/ModelProgram.md +++ b/docs/metadata/ModelProgram.md @@ -1,3 +1,3 @@ - ::: hsmodels.schemas.aggregations.ModelProgramMetadata ::: hsmodels.schemas.aggregations.ModelProgramMetadataIn +::: hsmodels.schemas.aggregations.BaseAggregationMetadataIn diff --git a/docs/metadata/Multidimensional.md b/docs/metadata/Multidimensional.md index 66a69e3..034047d 100644 --- a/docs/metadata/Multidimensional.md +++ b/docs/metadata/Multidimensional.md @@ -1,3 +1,3 @@ - ::: hsmodels.schemas.aggregations.MultidimensionalMetadata ::: hsmodels.schemas.aggregations.MultidimensionalMetadataIn +::: hsmodels.schemas.aggregations.BaseAggregationMetadataIn diff --git a/docs/metadata/ReferencedTimeSeries.md b/docs/metadata/ReferencedTimeSeries.md index a6a16a5..07abe23 100644 --- a/docs/metadata/ReferencedTimeSeries.md +++ b/docs/metadata/ReferencedTimeSeries.md @@ -1,3 +1,3 @@ - ::: hsmodels.schemas.aggregations.ReferencedTimeSeriesMetadata ::: hsmodels.schemas.aggregations.ReferencedTimeSeriesMetadataIn +::: hsmodels.schemas.aggregations.BaseAggregationMetadataIn diff --git a/docs/metadata/TimeSeries.md b/docs/metadata/TimeSeries.md index 76bdb2f..559b435 100644 --- a/docs/metadata/TimeSeries.md +++ b/docs/metadata/TimeSeries.md @@ -1,3 +1,3 @@ - ::: hsmodels.schemas.aggregations.TimeSeriesMetadata ::: hsmodels.schemas.aggregations.TimeSeriesMetadataIn +::: hsmodels.schemas.aggregations.BaseAggregationMetadataIn From 58a41492a2db7bdc6badc35b8f6f1bb0b9b65e3a Mon Sep 17 00:00:00 2001 From: pkdash Date: Tue, 1 Oct 2024 18:38:27 -0400 Subject: [PATCH 18/18] [#71] using autorefs plugin in mkdocs configuration --- mkdocs.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mkdocs.yml b/mkdocs.yml index 03298d2..ad2effb 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -7,6 +7,8 @@ theme: readthedocs plugins: - search + - autorefs: + resolve_closest: true - mkdocstrings - mknotebooks: binder: true