Commit a167f3f3 authored by Larkin Heintzman's avatar Larkin Heintzman

initial commit

parents
Pipeline #54 failed with stages
/matlab_data/
/matlab_data_10km/
/matlab_data_hiker_10km/
/matlab_data_locale/
/matlab_data_va_20km/
# Default ignored files
/workspace.xml
\ No newline at end of file
ags_grabber
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
</component>
</module>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7 (tiny_ags_env)" project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/ags_grabber.iml" filepath="$PROJECT_DIR$/.idea/ags_grabber.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
from arcgis.gis import GIS
from arcgis.geocoding import geocode
from arcgis.geometry import Geometry
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
from math import gcd
import math
from pyproj import Transformer, Proj, transform
from scipy.interpolate import griddata
# This function computes the factor of the argument passed
def factorization(n):
factors = []
def get_factor(n):
x_fixed = 2
cycle_size = 2
x = 2
factor = 1
while factor == 1:
for count in range(cycle_size):
if factor > 1: break
x = (x * x + 1) % n
factor = gcd(x - x_fixed, n)
cycle_size *= 2
x_fixed = x
return factor
while n > 1:
next = get_factor(n)
factors.append(next)
n //= next
factors = np.sort(factors, axis=None)
# return [np.prod(factors[:-1]), factors[-1]]
return factors
def point_rotation(origin, pt, ang):
# returns the pt rotated about the origin by ang (ang in degrees)
c = math.cos(math.radians(ang))
s = math.sin(math.radians(ang))
# translate to origin
pt_temp = [pt[0] - origin[0], pt[1] - origin[1]]
pt_spun = [ pt_temp[0]*c - pt_temp[1]*s, pt_temp[0]*s + pt_temp[1]*c ]
# translate back to frame
pt_spun = [pt_spun[0] + origin[0], pt_spun[1] + origin[1]]
return pt_spun
def meters2lat_lon(xs, ys):
transformer = Transformer.from_crs(3857, 4326) # meters -> lat lon
ll_pts = transformer.transform(xs, ys)
return ll_pts
def lat_lon2meters(lats, lons):
transformer = Transformer.from_crs(4326, 3857) # lat lon -> meters
xy_pts = transformer.transform(lats, lons)
return xy_pts
# def lat_lon2meters(lat_lon_pts):
# # '''Converts given lat/lon in WGS84 Datum to XY in Spherical Mercator EPSG:900913'''
# originShift = 2 * math.pi * 6378137 / 2.0
# x_y_pts = []
# for ll in lat_lon_pts:
# lat = ll[0]
# lon = ll[1]
# mx = lon * originShift / 180.0
# my = math.log(math.tan((90 + lat) * math.pi / 360.0)) / (math.pi / 180.0)
# my = my * originShift / 180.0
# x_y_pts.append([mx,my])
# return x_y_pts
def center_geolocation(geolocations):
"""
Provide a relatively accurate center lat, lon returned as a list pair, given
a list of list pairs.
ex: in: geolocations = ((lat1,lon1), (lat2,lon2),)
out: (center_lat, center_lon)
"""
x = 0
y = 0
z = 0
for lat, lon in geolocations:
lat = float(lat)
lon = float(lon)
x += math.cos(math.radians(lat)) * math.cos(math.radians(lon))
y += math.cos(math.radians(lat)) * math.sin(math.radians(lon))
z += math.sin(math.radians(lat))
x = float(x / len(geolocations))
y = float(y / len(geolocations))
z = float(z / len(geolocations))
return math.degrees(math.atan2(z, math.sqrt(x * x + y * y))), math.degrees(math.atan2(y, x))
def centroid_calc(points_meters):
return np.mean(points_meters, axis = 1)
def get_terrain_map(lat_lon = [0,0], sample_dist = 10, extent = 100, heading = 0, show_plot = False, verbosity = False):
# gis = GIS("pro")
# gis = GIS(url="http://virginiatech.maps.arcgis.com", client_id="rluxzSWjZS6TfeXs", username="hlarkin3_virginiatech", password="arcgisheintzman97#26640", verify_cert=False)
gis = GIS(username="larkinheintzman",password="Meepp97#26640")
if verbosity:
print("Successfully logged in as: " + gis.properties.user.username)
elv_map = gis.content.get('58a541efc59545e6b7137f961d7de883')
elv_layer = elv_map.layers[0]
if len(lat_lon) > 2:
print("Error, too many lat long points provided")
return -1
xy = lat_lon2meters(lat_lon[0], lat_lon[1])
cen_pt = list(xy)
lhc_pt = [cen_pt[0] - extent/2, cen_pt[1] - extent/2] # lefthand corner point
max_samples = 30 # api limitation!
if extent > max_samples*sample_dist:
# multiple calls are required
fac = factorization(int(extent/sample_dist))
if len(fac) == 1: # random prime number incomming
sc = fac[0]
cc = 1
else:
sc = np.max(fac[fac <= max_samples])
fac = np.delete(fac,np.argmax(fac[fac <= max_samples]))
cc = np.prod(fac)
else:
# single call suffices
cc = 1
sc = int(np.round(extent/sample_dist))
sample_extents = sc * sample_dist
if verbosity:
print("total calls: {}".format(np.square(cc)))
# set max values
elv_layer.extent['xmin'] = lhc_pt[0]
elv_layer.extent['xmax'] = lhc_pt[0] + extent
elv_layer.extent['ymin'] = lhc_pt[1]
elv_layer.extent['ymax'] = lhc_pt[1] + extent
# print(elv_layer.extent)
# house keeping, initialize with empty lists
x = np.empty([0,sc*cc])
y = np.empty([0,sc*cc])
e = np.empty([0,sc*cc])
data = []
for j in range(cc): # outter loop for y values
# lists of values for a single row, reset at every y iteration
x_row = np.empty([sc,0])
y_row = np.empty([sc,0])
e_row = np.empty([sc,0])
for i in range(cc): # inner loop for x values O_O
x_values = [np.linspace(lhc_pt[0] + i * sample_extents, lhc_pt[0] + (i + 1) * sample_extents, sc)]
y_values = [np.linspace(lhc_pt[1] + j * sample_extents, lhc_pt[1] + (j + 1) * sample_extents, sc)]
[X,Y] = np.meshgrid(x_values, y_values)
# put in rotation here
geo_points = [point_rotation(origin = [cen_pt[0],cen_pt[1]],pt = [xp,yp],ang = heading) for xv,yv in zip(X,Y) for xp,yp in zip(xv,yv)]
# print(points)
g = Geometry({"points": geo_points, "spatialReference": 3857})
failed = True
while failed: # keep trying until it works
try:
elv_samples = elv_layer.get_samples(g, sample_count=len(g.coordinates()), out_fields='location,values,value,resolution')
failed = False
except TimeoutError:
print("failed call, trying again...")
failed = True
# extract location info JANK INCOMING
xs = np.array([e['location']['x'] for e in elv_samples], dtype=float).reshape([sc,sc])
ys = np.array([e['location']['y'] for e in elv_samples], dtype=float).reshape([sc,sc])
es = np.array([e['values'][0] for e in elv_samples], dtype=float).reshape([sc,sc])
if not np.all(xs == X) or not np.all(ys == Y):
# xs = np.array([e['location']['x'] for e in elv_samples], dtype=float)
# ys = np.array([e['location']['y'] for e in elv_samples], dtype=float)
qs = np.stack([xs.reshape(len(elv_samples)), ys.reshape(len(elv_samples))]).T
es = es.reshape(len(elv_samples))
# data came back in weird ordering, need to re-order
# print("re-ordering data ...")
es_square = np.zeros([sc,sc])
for scx in range(sc):
for scy in range(sc): # maybe the least efficient way to do this
idx = np.where(np.all(qs == np.asarray([X[scx,scy],Y[scx,scy]]),axis = 1))
es_square[scx,scy] = es[idx]
es = es_square
# print("done re-ordering")
# then just the tuple of all
data_temp = []
for s in elv_samples:
xy_spun = point_rotation(origin = [cen_pt[0],cen_pt[1]],pt = [s['location']['x'],s['location']['y']],ang = -heading) # spin back to original frame
data_temp.append((xy_spun[0], xy_spun[1],s['values'][0]))
# data_temp = [(xy_spun[0], xy_spun[1],e['values'][0]) for e in elv_samples]
# data_temp = [(e['location']['x'],e['location']['y'],e['values'][0]) for e in elv_samples]
data = data + data_temp
# append to larger arrays
x_row = np.append(x_row, xs, axis=1)
y_row = np.append(y_row, ys, axis=1)
e_row = np.append(e_row, es, axis=1)
x = np.append(x, x_row, axis=0)
y = np.append(y, y_row, axis=0)
e = np.append(e, e_row, axis=0)
if show_plot:
# Attaching 3D axis to the figure
grid_x, grid_y = np.mgrid[min(x):max(x):100j, min(y):max(y):100j]
points = np.array([x, y])
grid_z = griddata(points.transpose(), z, (grid_x, grid_y), method='cubic', fill_value=np.mean(z))
print(grid_z)
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(grid_x, grid_y, grid_z, cmap='viridis')
if verbosity:
print("x min: {}".format(np.min(x)))
print("x max: {}".format(np.max(x)))
print("x max - min: {}".format(np.max(x)-np.min(x)))
print("x spacing: {}".format(abs(x[0][0] - x[0][1])))
print("y min: {}".format(np.min(y)))
print("y max: {}".format(np.max(y)))
print("y max - min: {}".format(np.max(y)-np.min(y)))
return [e,x,y,data,lat_lon]
# savedimg = elv_layer.export_image(bbox=elv_layer.extent, size=[3840,2160], f='image', save_folder='.', save_file='testerino.jpg')
if __name__ == "__main__":
# lat_lon = [[[37.206026, -80.636010], [37.266475, -80.639015], [37.283674, -80.589005],
# [37.224313, -80.585250], [37.205225, -80.604815], [37.206026, -80.636010]]]
# lat_lon = [[[37.235195, -80.410403], [37.226427, -80.422368], [37.227209, -80.404514], [37.227209, -80.404504]]]
lat_lon = [[[37.196791, -80.578343], [37.196874, -80.578430], [37.196974, -80.578518], [37.197229, -80.578093], [37.197482, -80.577689], [37.197401, -80.577610], [37.197319, -80.577528], [37.197066, -80.577928]]]
# lat_lon should be a list of length 1, containing a set of 2-length lists
# then the terrain map will be placed at the centroid of the lat-lon-points
total_extent = 12000
mesh_size = 30
zoom_level = 4
[z_array,x_array,y_array, data, cen_point_ll] = get_terrain_map(lat_lon, sample_dist = zoom_level*int(total_extent/mesh_size), extent = zoom_level*total_extent, heading=40, show_plot=False, verbosity=True)
fig = plt.figure()
ax = fig.gca(projection='3d')
# plot results
x, y, z = zip(*data)
print(data)
grid_x, grid_y = np.mgrid[min(x):max(x):100j, min(y):max(y):100j]
points = np.array([x, y])
grid_z = griddata(points.transpose(), z, (grid_x, grid_y), method='cubic', fill_value=np.mean(z))
# print(grid_z)
ax.plot_surface(grid_x, grid_y, grid_z, cmap='viridis')
plt.show()
from arcgis_terrain import get_terrain_map
from arcgis.features import FeatureLayer
from arcgis.gis import GIS
from arcgis_terrain import lat_lon2meters
from arcgis_terrain import meters2lat_lon
import time
from arcgis.geometry.filters import envelope_intersects
import arcgis.geometry
import numpy as np
import plotly.graph_objects as go
import plotly.express as px
from arcgis_terrain import point_rotation
from scipy import interpolate
from matplotlib import path
import matplotlib.pyplot as plt
import math
import json
def grab_features(anchor_point, extent, sample_dist = 10, heading = 0, save_files = False, plot_data = False):
roads_url = "https://carto.nationalmap.gov/arcgis/rest/services/transportation/MapServer/30"
river_url = "https://hydro.nationalmap.gov/arcgis/rest/services/nhd/MapServer/6"
riverw_url = "https://hydro.nationalmap.gov/arcgis/rest/services/nhd/MapServer/8"
water_url = "https://hydro.nationalmap.gov/arcgis/rest/services/nhd/MapServer/9"
powerlines_url = "https://services1.arcgis.com/Hp6G80Pky0om7QvQ/ArcGIS/rest/services/Electric_Power_Transmission_Lines/FeatureServer/0"
railroads_url = "https://carto.nationalmap.gov/arcgis/rest/services/transportation/MapServer/35"
# adding water_url twice, once for boundaries and once for linear features
# the layer named 'lakes' gets boundary treatment
url_list = [river_url, riverw_url, roads_url, water_url, powerlines_url, railroads_url]
name_list = ['rivers', 'rivers_bdd', 'roads', 'lakes', 'powerlines', 'railroads']
inac_layers = ['rivers_bdd', 'lakes']
gis = GIS(username="larkinheintzman",password="Meepp97#26640") # linked my arcgis pro account
ap_meters = lat_lon2meters(anchor_point[0], anchor_point[1])
file_id = str(anchor_point) + "_" + str(extent/1000) + "km"
scale_factor = 3/20 # factor to get 6.66667m mapping from 1m mapping (1/6.6667)
scaled_extent = np.ceil(scale_factor*extent).astype(np.int)
viz_cnt = 0
viz_map = np.zeros([scaled_extent,scaled_extent,len(name_list)+len(inac_layers)])
for i,url in enumerate(url_list):
# binary map, will use feature coords to populate (one per layer)
bin_map = np.zeros([scaled_extent,scaled_extent])
inac_bin_map = np.zeros([scaled_extent,scaled_extent])
geom = arcgis.geometry.Polygon({'spatialReference': {"wkid" : 3857},
'rings': [[
[ap_meters[0] - (extent/2), ap_meters[1] - (extent/2)],
[ap_meters[0] - (extent/2), ap_meters[1] + (extent/2)],
[ap_meters[0] + (extent/2), ap_meters[1] + (extent/2)],
[ap_meters[0] + (extent/2), ap_meters[1] - (extent/2)],
[ap_meters[0] - (extent/2), ap_meters[1] - (extent/2)]
]]})
lyr = FeatureLayer(url = url, gis = gis)
geom_filter = envelope_intersects(geom, sr=geom['spatialReference'])
q = []
query_cnt = 0
while type(q)==list and query_cnt <= 5: # have to do this because arcgis is sketchy as hell and doesnt always come back
try:
print("querying {} layer...".format(name_list[i]))
q = lyr.query(return_count_only=False, return_ids_only=False, return_geometry=True,
out_sr='3857', geometry_filter=geom_filter, result_record_count=20)
except json.decoder.JSONDecodeError as e:
query_cnt = query_cnt + 1
print("error on query: {}".format(e))
print("{} layer failed on query, trying again ...".format(name_list[i]))
if query_cnt > 5 and not q:
print("{} layer failed too many times, continuing".format(name_list[i]))
# if save_files:
# fn = "map_layers/"+name_list[i]+"_data_"+file_id+".csv"
# np.savetxt(fn,bin_map,delimiter=",", fmt='%f')
continue
print("{} layer sucessfully queried".format(name_list[i]))
# re-build into list of x-y values
# feat_points = []
query_dict = q.to_dict()
for j,feat in enumerate(query_dict['features']):
# pull feature points out of query, they have different keys...
if 'paths' in feat['geometry'].keys():
x_pts = [pt[0] for pt in feat['geometry']['paths'][0]]
y_pts = [pt[1] for pt in feat['geometry']['paths'][0]]
# plot_points = np.array(feat['geometry']['paths'][0])
else:
x_pts = [pt[0] for pt in feat['geometry']['rings'][0]] # arcgis is stupid
y_pts = [pt[1] for pt in feat['geometry']['rings'][0]]
# plot_points = np.array(feat['geometry']['rings'][0])
# re-center on 0,0 at left corner
x_pts = (np.array(x_pts) - (ap_meters[0] - (extent/2)))*scale_factor # reduces number of interpolants
y_pts = (np.array(y_pts) - (ap_meters[1] - (extent/2)))*scale_factor
# rotate points about origin to establish heading
[x_pts, y_pts] = point_rotation(origin = [scaled_extent/2,scaled_extent/2],pt = [x_pts, y_pts],ang = heading)
# x_uinterp = x_pts # untrimmed uninterpolated points (but scaled)
# y_uinterp = y_pts
# trim data to only within extents (because arcgis cant fuckin' do this)
rm_mask = np.logical_or(x_pts < 0, x_pts > scaled_extent) # mask to remove points (x axis)
rm_mask = np.logical_or(rm_mask,np.logical_or(y_pts < 0, y_pts > scaled_extent)) # other axis mask
x_pts = x_pts[np.invert(rm_mask)]
y_pts = y_pts[np.invert(rm_mask)] # trim interpolated points
if x_pts.shape[0] > 1: # if there are still points after trimming
# if data is too short, add some points in the middle
while x_pts.shape[0] < 4:
x_pt = (x_pts[0] + x_pts[1])/2 # average between first and second point
y_pt = (y_pts[0] + y_pts[1])/2
x_pts = np.insert(x_pts, 1, x_pt)
y_pts = np.insert(y_pts, 1, y_pt)
# total length of feature ring/path, for interpolation along features
total_len = np.sum(np.sqrt(np.sum(np.diff(np.array([x_pts, y_pts]).T, axis=0) ** 2, axis=1)))
tck, u = interpolate.splprep([x_pts, y_pts], s=0, k=1) # parametric interpolation
u_new = np.arange(0, 1 + 1 / total_len, 1 / total_len) # scaled discretization
pts_interp = interpolate.splev(u_new, tck)
x_pts = pts_interp[0]
y_pts = pts_interp[1]
if name_list[i] in inac_layers:
s_time = time.time()
# do boundary calculation for binary matrix (slow for large bounaries but whatever)
ring = path.Path(np.array([x_pts, y_pts]).T)
# TODO: try cv2 here, test for speeeeeeeeeeeeeeeeeeeeeeed
# test_pts is the rectangular matrix covering ring for boundary calculation
x_test, y_test = np.meshgrid(np.arange(np.min(x_pts), np.max(x_pts), 1) , np.arange(np.min(y_pts), np.max(y_pts), 1))
test_pts = np.array([x_test.flatten(), y_test.flatten()]).T
mask = ring.contains_points(test_pts, radius=1)
# instead of filling gaps, we want to save filled in areas separately
# so we need to re-create the bin_map here but on inac. points
x_pts_inac = test_pts[mask,0]
y_pts_inac = test_pts[mask,1]
pts_inac = np.stack([x_pts_inac,y_pts_inac]).T
# remove points being used as linear features
for pt in np.stack([x_pts,y_pts]).T:
pts_inac = np.delete(pts_inac, np.where(np.equal(pt,pts_inac).all(1)), axis = 0)
# binarization step
pts_inac = np.round(pts_inac).astype(np.int)
# flip y axis
pts_inac[:,1] = inac_bin_map.shape[1] - pts_inac[:,1]
# remove any points outside limits of binary map (fixes round versus ceil issues)
rm_mask = np.logical_or(pts_inac[:,0] < 0, pts_inac[:,0] >= inac_bin_map.shape[1])
rm_mask = np.logical_or(rm_mask, np.logical_or(pts_inac[:,1] < 0, pts_inac[:,1] >= inac_bin_map.shape[0]))
pts_inac = pts_inac[np.invert(rm_mask),:]
inac_bin_map[pts_inac[:,1], pts_inac[:,0]] = 1 # set indices to 1
print("inac calculation time = {} sec".format(time.time() - s_time))
# binarization step
x_pts_idx = np.round(x_pts).astype(np.int)
y_pts_idx = np.round(y_pts).astype(np.int)
# flip y axis because indices are fliped
y_pts_idx = bin_map.shape[1] - y_pts_idx
# remove any points outside limits of binary map (fixes round versus ceil issues)
rm_mask = np.logical_or(x_pts_idx < 0, x_pts_idx >= bin_map.shape[1])
rm_mask = np.logical_or(rm_mask, np.logical_or(y_pts_idx < 0, y_pts_idx >= bin_map.shape[0]))
x_pts_idx = x_pts_idx[np.invert(rm_mask)]
y_pts_idx = y_pts_idx[np.invert(rm_mask)]
bin_map[y_pts_idx, x_pts_idx] = 1 # set indices to 1
# add to viz map
if name_list[i] in inac_layers:
viz_map[:, :, viz_cnt] = inac_bin_map
viz_cnt = viz_cnt + 1
if save_files:
fn = "map_layers/" + name_list[i] + "_inac_data_" + file_id + ".csv"
np.savetxt(fn, inac_bin_map, delimiter=",", fmt='%f')
viz_map[:, :, viz_cnt] = bin_map
viz_cnt = viz_cnt + 1
if save_files:
fn = "map_layers/"+name_list[i]+"_data_"+file_id+".csv"
np.savetxt(fn,bin_map,delimiter=",", fmt='%f')
# save terrain as csv file (this method is pretty slow, but can compensate with interp)
[e,x,y,data,ll_pt] = get_terrain_map(lat_lon=anchor_point,
sample_dist = sample_dist,
extent = extent,
heading = -heading) # because flipping
# flip elevation data up to down to match other layers
e = np.flipud(e)
# interpolate terrain to match size/resolution of other layers
f = interpolate.interp2d(np.arange(0, extent, sample_dist), np.arange(0, extent, sample_dist), e, kind='cubic')
x_temp = np.linspace(0,extent,scaled_extent) # get correct size of terrain map
y_temp = np.linspace(0,extent,scaled_extent)
e_interp = f(x_temp, y_temp)
elv_filename = "map_layers\\elv_data_"+file_id+".csv"
if save_files:
np.savetxt(elv_filename,e_interp,delimiter=",", fmt='%f')
if plot_data:
terr_fig = px.imshow(e_interp)
terr_fig.show()
plt_list = []
# fix stupid names
for nme in inac_layers:
name_list.insert(name_list.index(nme), nme+' inac')
for i in range(viz_map.shape[-1]):
row_idx, col_idx = np.where(viz_map[:,:,i] != 0)
# flip y values
col_idx = viz_map.shape[0] - col_idx
plt_list.append(go.Scatter(x=row_idx, y=col_idx, mode='markers', name=name_list[i]))
fig = go.Figure(data=plt_list)
fig.show()
if __name__ == "__main__":
# anchor_point = [37.474015, -80.868333] # bozoo
# anchor_point = [37.304158, -86.206131] # nolin state park
# anchor_point = [37.615842, -80.905957] # bluestone
anchor_point = [37.192944, -80.556713] # kentland
extent = 10000 # used for all layers
sample_dist = int(extent/100) # only used for terrain (is interpolated anyway, just base sample res)
# sample_dist = 50 # only used for terrain (is interpolated anyway, just base sample res)
heading = 0
start_time = time.time()
grab_features(anchor_point = anchor_point, extent = extent, sample_dist = sample_dist,
heading = heading, save_files = True, plot_data = True)
print("------- %s seconds ------" % (time.time() - start_time))
# ----------------------- various testing stuffs -----------------------
# [e,x,y,data,ll_pt] = get_terrain_map(lat_lon=anchor_point,
# sample_dist = sample_dist,
# extent = extent,
# heading = -heading) # because flipping
# # flip elevation data up to down to match other layers
# e = np.flipud(e)
# scale_factor = 3/20 # factor to get 6.66667m mapping from 1m mapping (1/6.6667)
# # interpolate terrain to match size/resolution of other layers
# f = interpolate.interp2d(np.arange(0, extent, sample_dist), np.arange(0, extent, sample_dist), e, kind='cubic')
# x_temp = np.linspace(0,extent,np.ceil(scale_factor*extent).astype(np.int)) # get correct size of terrain map
# y_temp = np.linspace(0,extent,np.ceil(scale_factor*extent).astype(np.int))
# e_interp = f(x_temp, y_temp)
#
# terr_fig = px.imshow(e_interp)
# terr_fig.show()
\ No newline at end of file
from arcgis_terrain import get_terrain_map
from arcgis.features import FeatureLayer
from arcgis.gis import GIS
from arcgis_terrain import lat_lon2meters
from arcgis_terrain import meters2lat_lon
import time
from arcgis.geometry.filters import envelope_intersects
import arcgis.geometry
import numpy as np
import plotly.graph_objects as go
import plotly.express as px
from arcgis_terrain import point_rotation
from scipy import interpolate
from matplotlib import path
import matplotlib.pyplot as plt
import math
import json
import sys
import csv
import os
import matlab.engine
def grab_features(anchor_point, extent, sample_dist = 10, heading = 0, save_files = False, file_id = 'temp', plot_data = False):
roads_url = "https://carto.nationalmap.gov/arcgis/rest/services/transportation/MapServer/30"
river_url = "https://hydro.nationalmap.gov/arcgis/rest/services/nhd/MapServer/6"
riverw_url = "https://hydro.nationalmap.gov/arcgis/rest/services/nhd/MapServer/8"
water_url = "https://hydro.nationalmap.gov/arcgis/rest/services/nhd/MapServer/9"
powerlines_url = "https://services1.arcgis.com/Hp6G80Pky0om7QvQ/ArcGIS/rest/services/Electric_Power_Transmission_Lines/FeatureServer/0"
railroads_url = "https://carto.nationalmap.gov/arcgis/rest/services/transportation/MapServer/35"
# adding water_url twice, once for boundaries and once for linear features
# the layer named 'lakes' gets boundary treatment
url_list = [river_url, riverw_url, roads_url, water_url, powerlines_url, railroads_url]
name_list = ['rivers', 'rivers_bdd', 'roads', 'lakes', 'powerlines', 'railroads']
inac_layers = ['rivers_bdd', 'lakes']
gis = GIS(username="larkinheintzman",password="Meepp97#26640") # linked my arcgis pro account
ap_meters = lat_lon2meters(anchor_point[0], anchor_point[1])
scale_factor = 3/20 # factor to get 6.66667m mapping from 1m mapping (1/6.6667)
scaled_extent = np.ceil(scale_factor*extent).astype(np.int)
viz_cnt = 0
viz_map = np.zeros([scaled_extent,scaled_extent,len(name_list)+len(inac_layers)])
for i,url in enumerate(url_list):
# binary map, will use feature coords to populate (one per layer)
bin_map = np.zeros([scaled_extent,scaled_extent])
inac_bin_map = np.zeros([scaled_extent,scaled_extent])
geom = arcgis.geometry.Polygon({'spatialReference': {"wkid" : 3857},
'rings': [[
[ap_meters[0] - (extent/2), ap_meters[1] - (extent/2)],
[ap_meters[0] - (extent/2), ap_meters[1] + (extent/2)],
[ap_meters[0] + (extent/2), ap_meters[1] + (extent/2)],
[ap_meters[0] + (extent/2), ap_meters[1] - (extent/2)],
[ap_meters[0] - (extent/2), ap_meters[1] - (extent/2)]
]]})
lyr = FeatureLayer(url = url, gis = gis)
geom_filter = envelope_intersects(geom, sr=geom['spatialReference'])
q = []
query_cnt = 0
while type(q)==list and query_cnt <= 5: # have to do this because arcgis is sketchy as hell and doesnt always come back
try:
print("querying {} layer...".format(name_list[i]))
q = lyr.query(return_count_only=False, return_ids_only=False, return_geometry=True,
out_sr='3857', geometry_filter=geom_filter)
except json.decoder.JSONDecodeError as e:
query_cnt = query_cnt + 1
print("error on query: {}".format(e))
print("{} layer failed on query, trying again ...".format(name_list[i]))
if query_cnt > 5 and not q:
print("{} layer failed too many times, breaking!".format(name_list[i]))
continue
# if save_files:
# fn = "map_layers/"+name_list[i]+"_data_"+file_id+".csv"
# np.savetxt(fn,bin_map,delimiter=",", fmt='%f')
print("{} layer sucessfully queried".format(name_list[i]))
# re-build into list of x-y values
# feat_points = []
query_dict = q.to_dict()
for j,feat in enumerate(query_dict['features']):
# pull feature points out of query, they have different keys...
if 'paths' in feat['geometry'].keys():
x_pts = [pt[0] for pt in feat['geometry']['paths'][0]]
y_pts = [pt[1] for pt in feat['geometry']['paths'][0]]
# plot_points = np.array(feat['geometry']['paths'][0])
else:
x_pts = [pt[0] for pt in feat['geometry']['rings'][0]] # arcgis is stupid
y_pts = [pt[1] for pt in feat['geometry']['rings'][0]]
# plot_points = np.array(feat['geometry']['rings'][0])
# re-center on 0,0 at center
x_pts = (np.array(x_pts) - (ap_meters[0] - (extent/2)))*scale_factor # reduces number of interpolants
y_pts = (np.array(y_pts) - (ap_meters[1] - (extent/2)))*scale_factor
# rotate points about origin to establish heading
[x_pts, y_pts] = point_rotation(origin = [scaled_extent/2,scaled_extent/2],pt = [x_pts, y_pts],ang = heading)
# x_uinterp = x_pts # untrimmed uninterpolated points (but scaled)
# y_uinterp = y_pts
# trim data to only within extents (because arcgis cant fuckin' do this)
rm_mask = np.logical_or(x_pts < 0, x_pts > scaled_extent) # mask to remove points (x axis)
rm_mask = np.logical_or(rm_mask,np.logical_or(y_pts < 0, y_pts > scaled_extent)) # other axis mask
x_pts = x_pts[np.invert(rm_mask)]
y_pts = y_pts[np.invert(rm_mask)] # trim interpolated points
if x_pts.shape[0] > 1: # if there are still points after trimming
# if data is too short, add some points in the middle
while x_pts.shape[0] < 4:
x_pt = (x_pts[0] + x_pts[1])/2 # average between first and second point
y_pt = (y_pts[0] + y_pts[1])/2
x_pts = np.insert(x_pts, 1, x_pt)
y_pts = np.insert(y_pts, 1, y_pt)
# total length of feature ring/path, for interpolation along features
total_len = np.sum(np.sqrt(np.sum(np.diff(np.array([x_pts, y_pts]).T, axis=0) ** 2, axis=1)))
tck, u = interpolate.splprep([x_pts, y_pts], s=0, k=1) # parametric interpolation
u_new = np.arange(0, 1 + 1 / total_len, 1 / total_len) # scaled discretization
pts_interp = interpolate.splev(u_new, tck)
x_pts = pts_interp[0]
y_pts = pts_interp[1]
if name_list[i] in inac_layers:
s_time = time.time()
# do boundary calculation for binary matrix (slow for large bounaries but whatever)
ring = path.Path(np.array([x_pts, y_pts]).T)
# TODO: try cv2 here, test for speeeeeeeeeeeeeeeeeeeeeeed
# test_pts is the rectangular matrix covering ring for boundary calculation
x_test, y_test = np.meshgrid(np.arange(np.min(x_pts), np.max(x_pts), 1) , np.arange(np.min(y_pts), np.max(y_pts), 1))
test_pts = np.array([x_test.flatten(), y_test.flatten()]).T
mask = ring.contains_points(test_pts, radius=1)
# instead of filling gaps, we want to save filled in areas separately
# so we need to re-create the bin_map here but on inac. points
x_pts_inac = test_pts[mask,0]
y_pts_inac = test_pts[mask,1]
pts_inac = np.stack([x_pts_inac,y_pts_inac]).T
# remove points being used as linear features
for pt in np.stack([x_pts,y_pts]).T:
pts_inac = np.delete(pts_inac, np.where(np.equal(pt,pts_inac).all(1)), axis = 0)
# binarization step
pts_inac = np.round(pts_inac).astype(np.int)
# flip y axis
pts_inac[:,1] = inac_bin_map.shape[1] - pts_inac[:,1]
# remove any points outside limits of binary map (fixes round versus ceil issues)
rm_mask = np.logical_or(pts_inac[:,0] < 0, pts_inac[:,0] >= inac_bin_map.shape[1])
rm_mask = np.logical_or(rm_mask, np.logical_or(pts_inac[:,1] < 0, pts_inac[:,1] >= inac_bin_map.shape[0]))
pts_inac = pts_inac[np.invert(rm_mask),:]
inac_bin_map[pts_inac[:,1], pts_inac[:,0]] = 1 # set indices to 1
print("inac calculation time = {} sec".format(time.time() - s_time))
# binarization step
x_pts_idx = np.round(x_pts).astype(np.int)
y_pts_idx = np.round(y_pts).astype(np.int)
# flip y axis because indices are fliped
y_pts_idx = bin_map.shape[1] - y_pts_idx
# remove any points outside limits of binary map (fixes round versus ceil issues)
rm_mask = np.logical_or(x_pts_idx < 0, x_pts_idx >= bin_map.shape[1])
rm_mask = np.logical_or(rm_mask, np.logical_or(y_pts_idx < 0, y_pts_idx >= bin_map.shape[0]))
x_pts_idx = x_pts_idx[np.invert(rm_mask)]
y_pts_idx = y_pts_idx[np.invert(rm_mask)]
bin_map[y_pts_idx, x_pts_idx] = 1 # set indices to 1
# add to viz map
if name_list[i] in inac_layers:
viz_map[:, :, viz_cnt] = inac_bin_map
viz_cnt = viz_cnt + 1
if save_files:
fn = "map_layers/" + name_list[i] + "_inac_data_" + file_id + ".csv"
np.savetxt(fn, inac_bin_map, delimiter=",", fmt='%f')
viz_map[:, :, viz_cnt] = bin_map
viz_cnt = viz_cnt + 1
if save_files:
fn = "map_layers/"+name_list[i]+"_data_"+file_id+".csv"
np.savetxt(fn,bin_map,delimiter=",", fmt='%f')
# save terrain as csv file (this method is pretty slow, but can compensate with interp)
[e,x,y,data,ll_pt] = get_terrain_map(lat_lon=anchor_point,
sample_dist = sample_dist,
extent = extent,
heading = -heading) # because flipping
# flip elevation data up to down to match other layers
e = np.flipud(e)
# interpolate terrain to match size/resolution of other layers
f = interpolate.interp2d(np.arange(0, extent, sample_dist), np.arange(0, extent, sample_dist), e, kind='cubic')
x_temp = np.linspace(0,extent,scaled_extent) # get correct size of terrain map
y_temp = np.linspace(0,extent,scaled_extent)
e_interp = f(x_temp, y_temp)
elv_filename = "map_layers\\elv_data_"+file_id+".csv"
if save_files:
np.savetxt(elv_filename,e_interp,delimiter=",", fmt='%f')
if plot_data:
terr_fig = px.imshow(e_interp)
terr_fig.show()
plt_list = []
# fix stupid names
for nme in inac_layers:
name_list.insert(name_list.index(nme), nme+' inac')
for i in range(viz_map.shape[-1]):
row_idx, col_idx = np.where(viz_map[:,:,i] != 0)
# flip y values
col_idx = viz_map.shape[0] - col_idx
plt_list.append(go.Scatter(x=row_idx, y=col_idx, mode='markers', name=name_list[i]))
fig = go.Figure(data=plt_list)
fig.show()
if __name__ == "__main__":
# read in ics from csv sheet
# ics = []
# with open('lp_data/DD.DDD WGS Coordinates_cleaned.xlsx - DD Format.csv') as f:
# reader = csv.reader(f)
# for row_num, row in enumerate(reader):
# if 'Hiker' in row[8]:
# # check for nearby find point
# init = lat_lon2meters(float(row[19]), float(row[20]))
# find = lat_lon2meters(float(row[21]), float(row[22]))
# if np.linalg.norm(np.array(find) - np.array(init)) <= 5000:
# ics.append([row[19], row[20], row_num+1])
# ics = [[36.660460, -81.543921, 'grayson'],
# [37.197730, -80.585233, 'kentland'],
# [36.891640, -81.524214, 'hmpark']]
# BrownMtn-hiker VA hikers -78.65848 38.29288 495 -78.65809 38.29254 2 people
# DevilsDitch_hikers VA Hikers -78.46993 38.44706 653 -78.43693 38.44311 2 people
# Punchbowl_hiker VA Hiker -79.33887 37.67752 593 -79.40187 37.6163
# BiscuitRun_hikers VA Hikers -78.52798 37.99092 55 -78.52562 37.98698 2 people
ics = [[-78.65848, 38.29288, 'BrownMtn'],
[-78.46993, 38.44706,'DevilsDitch'],
[-79.33887, 37.67752, 'Punchbowl'],
[-78.52798, 37.99092,'BiscuitRun']]
eng = matlab.engine.start_matlab() # engine for running matlab
for i,ics_pt in enumerate(ics):
anchor_point = [float(ics_pt[0]), float(ics_pt[1])]
extent = 20e3
save_flag = True
plot_flag = False
# file_id = str(anchor_point) + "_" + str(extent/1000) + "km"
file_extension = 'temp'
sample_dist = int(extent/100)
heading = 0
start_time = time.time()
grab_features(anchor_point = anchor_point, extent = extent, sample_dist = sample_dist,
heading = heading, save_files = save_flag, file_id = file_extension, plot_data = plot_flag)
time.sleep(1) # wait for... files to settle?
# run matlab
res = eng.importmap_py(str(ics_pt[2]))
print("------- total time = {} seconds, iteration {}/{} ------".format(time.time() - start_time,i,len(ics)))
eng.quit()
\ No newline at end of file
function result = importmap_py(save_filename)
% import map layers from pycharm generated code
% whitehorn: [37.474015, -80.868333]
% nolin state park: [37.304158, -86.206131]
% kentland: [37.196809, -80.548387]
% fnameelev = '/Users/ah/PycharmProjects/ags_grabber/map_layers/elv_data_[37.474015, -80.868333]_10.0km.csv';
% fnameriv = '/Users/ah/PycharmProjects/ags_grabber/map_layers/rivers_data_[37.474015, -80.868333]_10.0km.csv';
% fnamerivbd = '/Users/ah/PycharmProjects/ags_grabber/map_layers/rivers_bdd_data_[37.474015, -80.868333]_10.0km.csv';
% fnamerivin = '/Users/ah/PycharmProjects/ags_grabber/map_layers/rivers_bdd_inac_data_[37.474015, -80.868333]_10.0km.csv';
% fnameroad = '/Users/ah/PycharmProjects/ags_grabber/map_layers/roads_data_[37.474015, -80.868333]_10.0km.csv';
% fnamerr = '/Users/ah/PycharmProjects/ags_grabber/map_layers/railroads_data_[37.474015, -80.868333]_10.0km.csv';
% fnamep = '/Users/ah/PycharmProjects/ags_grabber/map_layers/powerlines_data_[37.474015, -80.868333]_10.0km.csv';
% fnamelbd = '/Users/ah/PycharmProjects/ags_grabber/map_layers/lakes_data_[37.474015, -80.868333]_10.0km.csv';
% fnamelin = '/Users/ah/PycharmProjects/ags_grabber/map_layers/lakes_inac_data_[37.474015, -80.868333]_10.0km.csv';
% temp file names to read from
fnameelev = 'C:\\Users\\Larkin\\ags_grabber\\map_layers\\elv_data_temp.csv';
fnameriv = 'C:\\Users\\Larkin\\ags_grabber\\map_layers\\rivers_data_temp.csv';
fnamerivbd = 'C:\\Users\\Larkin\\ags_grabber\\map_layers\\rivers_bdd_data_temp.csv';
fnamerivin = 'C:\\Users\\Larkin\\ags_grabber\\map_layers\\rivers_bdd_inac_data_temp.csv';
fnameroad = 'C:\\Users\\Larkin\\ags_grabber\\map_layers\\roads_data_temp.csv';
fnamerr = 'C:\\Users\\Larkin\\ags_grabber\\map_layers\\railroads_data_temp.csv';
fnamep = 'C:\\Users\\Larkin\\ags_grabber\\map_layers\\powerlines_data_temp.csv';
fnamelbd = 'C:\\Users\\Larkin\\ags_grabber\\map_layers\\lakes_data_temp.csv';
fnamelin = 'C:\\Users\\Larkin\\ags_grabber\\map_layers\\lakes_inac_data_temp.csv';
Zelev = load(fnameelev);
BWriver = load(fnameriv);
BWriverLF = load(fnamerivbd);
BWriverInac = load(fnamerivin);
BWroads = load(fnameroad);
BWrroads = load(fnamerr);
BWpower = load(fnamep);
BWlakeLF = load(fnamelbd);
BWlakeInac = load(fnamelin);
sZBW = size(Zelev);
%% elevation smoothing
%%%%% SMOOTH gradient of elevation
sZ = size(Zelev);
sigma = 2;
sZelev = imgaussfilt(Zelev,sigma);
sZgrad = imgradient(sZelev,'CentralDifference');
BWs = edge(sZgrad,'canny',[0.01 0.3]);
BWelevationGrad = double(BWs);
% figure, imshow(BWs)
%% save BW matrices
BWLF = BWelevationGrad + BWriver + BWriverLF + BWlakeLF + BWroads + BWrroads + BWpower;
BWInac = BWriverInac + BWlakeInac;
BWLF(BWLF ~= 0) = 1;
BWInac(BWInac ~= 0) = 1;
file_path = 'C:\\Users\\Larkin\\ags_grabber\\matlab_data\\'; % define your own path here!
% save_filename is just the ics point in question
save(strjoin({file_path, 'BW_LFandInac_Zelev_',save_filename,'.mat'},''),'BWLF','BWInac','sZelev')
result = 0
% clearvars; clc; close all; % try cleaning things up
end
\ No newline at end of file
Country,State,Key#,County,EcoRegion Domain,EcoRegion Division,Population Density,Terrain,Subject Category,Age,Sex,Number Lost,Weather,Coordinates,LKP Coord. (N/S),LKP Coord. (E/W),Find Coord (N/S),Find Coord (E/W),IPP Precision (m),IPP Coord. DD.D (N/S),IPP Coord. DD.D (E/W),Find Coord DD.D (N/S),Find Coord DD.D (E/W)
US,AZ,US-AZ0003,COCHISE ,Dry,320,Wilderness,Flat,Mental Retardation,40,M,,,DD.DDD,31.43493334,-110.2323333,31.39535001,-110.1093333,1,31.43493334,-110.2323333,31.39535001,-110.1093333
US,AZ,US-AZ0004,APACHE ,Dry,m310,Wilderness,Mountainous,Camper,75,M,,,DD.DDD,33.97181664,-109.0950333,34.13733333,-109.066,1,33.97181664,-109.0950333,34.13733333,-109.066
US,AZ,US-AZ0005,APACHE ,Dry,m310,Wilderness,MOUNTAINOUS,Child,4,M,,,DD.DDD,33.82119999,-109.1491833,33.80291665,-109.1465833,1,33.82119999,-109.1491833,33.80291665,-109.1465833
US,AZ,US-AZ0008,GILA ,Dry,m310,Wilderness,Flat,Hiker,63,F,,,DD.DDD,34.45878334,-111.2508833,34.44531666,-111.3221,1,34.45878334,-111.2508833,34.44531666,-111.3221
US,AZ,US-AZ0011,COCHISE ,Dry,320,Wilderness,Flat,Hiker,"57,34",MF,2,,DD.DDD,31.92245,-109.9673167,31.92148336,-110.0335833,1,31.92245,-109.9673167,31.92148336,-110.0335833
US,AZ,US-AZ0018,COCHISE ,Dry,320,Wilderness,Flat,Hiker,49,M,,,DD.DDD,31.90240002,-109.2784667,31.83949998,-109.2766667,1,31.90240002,-109.2784667,31.83949998,-109.2766667
US,AZ,US-AZ0019,COCHISE ,Dry,320,Wilderness,Flat,Hiker,"58,20",MM,2,,DD.DDD,31.42903334,-110.2932833,31.42951667,-110.3041167,1,31.42903334,-110.2932833,31.42951667,-110.3041167
US,AZ,US-AZ0020,YAVAPAI ,Dry,310,Wilderness,Mountainous,Hiker,"26,21",MF,2,,DD.DDD,34.55,-111.6333333,34.55,-111.6166667,1,34.55,-111.6333333,34.55,-111.6166667
US,AZ,US-AZ0021,YAVAPAI ,Dry,310,Wilderness,Flat,Dementia,83,F,,,DD.DDD,34.65,-112.5,34.65186666,-112.4962333,1,34.65,-112.5,34.65186666,-112.4962333
US,AZ,US-AZ0022,YAVAPAI ,Dry,310,Wilderness,Flat,Hiker,25,F,,,DD.DDD,34.6,-112.55,34.63333333,-112.6333333,1,34.6,-112.55,34.63333333,-112.6333333
US,AZ,US-AZ0030,COCHISE ,Dry,320,Wilderness,Flat,Dementia,84,M,,,DD.DDD,31.37999999,-109.8858334,31.3721,-109.9191,1,31.37999999,-109.8858334,31.3721,-109.9191
US,AZ,US-AZ0031,GILA ,Dry,m310,Wilderness,Flat,Mental Retardation,16,M,,,DD.DDD,34.25450001,-111.3086667,34.26749999,-110.3376667,1,34.25450001,-111.3086667,34.26749999,-110.3376667
US,AZ,US-AZ0042,YAVAPAI ,Dry,310,Wilderness,Flat,Hiker,"21,20",MF,2,,DD.DDD,34.82166665,-111.8066667,34.81833331,-111.7983334,1,34.82166665,-111.8066667,34.81833331,-111.7983334
US,AZ,US-AZ0044,PINAL ,Dry,320,Wilderness,Mountainous,Hiker,"32,29",MM,2,,DD.DDD,33.39750001,-111.3478333,33.41566668,-111.365,1,33.39750001,-111.3478333,33.41566668,-111.365
US,AZ,US-AZ0045,GRAHAM ,Dry,320,Wilderness,Flat,Mental Retardation,18,M,,,DD.DDD,32.64609998,-109.8158167,32.65335,-109.80485,1,32.64609998,-109.8158167,32.65335,-109.80485
US,AZ,US-AZ0050,GILA ,Dry,m310,Wilderness,MOUNTAINOUS,Hiker,44,M,,,DD.DDD,33.70541668,-111.33805,33.67915001,-111.31695,1,33.70541668,-111.33805,33.67915001,-111.31695
US,AZ,US-AZ0051,GILA ,Dry,m310,Wilderness,MOUNTAINOUS,Hiker,40,M,,,DD.DDD,33.70541668,-111.33805,33.67915001,-111.31695,1,33.70541668,-111.33805,33.67915001,-111.31695
US,AZ,US-AZ0054,YAVAPAI ,Dry,310,Wilderness,Flat,Vehicle-4wd,60.37.36,FMF,3,,DD.DDD,34.63499997,-111.5466667,34.63499997,-111.5466667,1,34.63499997,-111.5466667,34.63499997,-111.5466667
US,AZ,US-AZ0059,MARICOPA ,Dry,320,Wilderness,Mountainous,Vehicle-4wd,"33,39",FM,2,,DD.DDD,33.96816667,-111.9348333,33.96816667,-111.9348333,1,33.96816667,-111.9348333,33.96816667,-111.9348333
US,AZ,US-AZ0060,SANTA CRUZ ,Dry,320,Wilderness,Flat,Hiker,23,F,,,DD.DDD,31.39708335,-111.2064333,31.40633332,-111.1968333,1,31.39708335,-111.2064333,31.40633332,-111.1968333
US,AZ,US-AZ0063,COCHISE ,Dry,320,Wilderness,Flat,Despondent,43,F,,,DD.DDD,32.01088333,-109.8509833,32.10883334,-109.8509833,1,32.01088333,-109.8509833,32.10883334,-109.8509833
US,AZ,US-AZ0066,NAVAJO ,Dry,310,Wilderness,Flat,Hunter,77,M,,,DD.DDD,34.15116666,-109.8896667,34.1517,-109.9133,1,34.15116666,-109.8896667,34.1517,-109.9133
US,AZ,US-AZ0069,PIMA ,Dry,320,Wilderness,Mountainous,Hiker,72,M,,,DD.DDD,32.40750001,-110.825,32.40750001,-110.825,1,32.40750001,-110.825,32.40750001,-110.825
US,AZ,US-AZ0077,YAVAPAI ,Dry,310,Wilderness,Mountainous,Hiker,"44,38",MF,2,,DD.DDD,34.89333331,-111.8633333,34.90666669,-111.8760333,1,34.89333331,-111.8633333,34.90666669,-111.8760333
US,AZ,US-AZ0078,YAVAPAI ,Dry,310,Wilderness,Flat,Hiker,"17,15",MM,2,,DD.DDD,34.94833336,-111.795,34.94666665,-111.795,1,34.94833336,-111.795,34.94666665,-111.795
US,AZ,US-AZ0080,COCHISE ,Dry,320,Wilderness,Flat,Hiker,"8,8,4,30",FMMF,4,,DD.DDD,31.72261664,-110.1878333,31.74176668,-110.1917833,1,31.72261664,-110.1878333,31.74176668,-110.1917833
US,AZ,US-AZ0083,PINAL ,Dry,320,Wilderness,Flat,Hiker,27,F,,,DD.DDD,33.39733334,-111.348,33.44166667,-111.3676667,1,33.39733334,-111.348,33.44166667,-111.3676667
US,AZ,US-AZ0091,YAVAPAI ,Dry,310,Wilderness,Flat,Hiker,"20,20,21",MFM,3,,DD.DDD,34.63041668,-112.5553,34.62723331,-112.5457666,1,34.63041668,-112.5553,34.62723331,-112.5457666
US,AZ,US-AZ0096,MOHAVE ,Dry,310,Wilderness,Mountainous,Mental Retardation,50,M,,,DD.DDD,35.26088333,-113.9805833,35.18688334,-113.3651,1,35.26088333,-113.9805833,35.18688334,-113.3651
US,AZ,US-AZ0097,YAVAPAI ,Dry,310,Wilderness,Flat,Vehicle,25,F,,,DD.DDD,34.15995,-112.45995,34.15100001,-112.4788,1,34.15995,-112.45995,34.15100001,-112.4788
US,AZ,US-AZ0098,GRAHAM ,Dry,320,Wilderness,Flat,Hunter,65,M,,,DD.DDD,32.74816666,-110.387,32.73283335,-110.3853167,1,32.74816666,-110.387,32.73283335,-110.3853167
US,AZ,US-AZ0103,GRAHAM ,Dry,320,Wilderness,Flat,Hunter,49,M,,,DD.DDD,32.44718332,-109.8538666,32.49103333,-109.82405,1,32.44718332,-109.8538666,32.49103333,-109.82405
US,AZ,US-AZ0104,PINAL ,Dry,320,Wilderness,Flat,Mental Retardation,49,F,,,DD.DDD,32.56261667,-110.7051333,32.55876668,-110.7036833,1,32.56261667,-110.7051333,32.55876668,-110.7036833
US,AZ,US-AZ0105,PINAL ,Dry,320,Wilderness,Mountainous,Horseback Rider,"37,62",MM,2,,DD.DDD,33.40944999,-111.2061833,33.34418332,-111.4271667,1,33.40944999,-111.2061833,33.34418332,-111.4271667
US,AZ,US-AZ0112,YAVAPAI ,Dry,310,Wilderness,Mountainous,Hiker,62,M,,,DD.DDD,34.55976664,-111.65395,34.54006666,-111.7034833,1,34.55976664,-111.65395,34.54006666,-111.7034833
US,AZ,US-AZ0113,YAVAPAI ,Dry,310,Wilderness,Flat,Hiker,69,M,,,DD.DDD,34.90286668,-111.8131333,34.89183331,-111.8048167,1,34.90286668,-111.8131333,34.89183331,-111.8048167
US,AZ,US-AZ0114,PIMA ,Dry,320,Wilderness,Flat,Climber,49,M,,,DD.DDD,32.36833334,-110.7166667,32.37233334,-110.7181667,1,32.36833334,-110.7166667,32.37233334,-110.7181667
US,AZ,US-AZ0118,PIMA ,Dry,320,Wilderness,Mountainous,Mountain Biker,"23,24",MM,2,,DD.DDD,32.44043334,-110.7910667,32.45033334,-110.8168333,1,32.44043334,-110.7910667,32.45033334,-110.8168333
US,AZ,US-AZ0119,YAVAPAI ,Dry,310,Wilderness,Flat,Vehicle-4wd,"71,76,15",MMM,3,,DD.DDD,34.61666667,-112.8,34.54183331,-112.7815333,1,34.61666667,-112.8,34.54183331,-112.7815333
US,AZ,US-AZ0120,YAVAPAI ,Dry,310,Wilderness,Flat,Hiker,43,M,,,DD.DDD,34.86666667,-111.8833333,34.86666667,-111.8,1,34.86666667,-111.8833333,34.86666667,-111.8
US,AZ,US-AZ0121,APACHE ,Dry,m310,Wilderness,Flat,Child,6,M,,,DD.DDD,34.84249999,-109.2758333,34.8197333,-109.3030667,1,34.84249999,-109.2758333,34.8197333,-109.3030667
US,AZ,US-AZ0125,PIMA ,Dry,320,Suburban,Flat,Autistic,13,M,1,,DD.DDD,32.26666667,-110.7916667,32.26966667,-110.7926667,1,32.26666667,-110.7916667,32.26966667,-110.7926667
US,AZ,US-AZ0126,PIMA ,Dry,320,Wilderness,Mountainous,Hiker,30,F,,,DD.DDD,32.43543332,-110.7893333,32.42883333,-110.7943333,1,32.43543332,-110.7893333,32.42883333,-110.7943333
US,AZ,US-AZ0127,PIMA ,Dry,320,Wilderness,Flat,Hiker,24,F,,,DD.DDD,32.40916665,-110.7098333,32.40083332,-110.6923333,1,32.40916665,-110.7098333,32.40083332,-110.6923333
US,AZ,US-AZ0129,COCHISE ,Dry,320,Wilderness,Flat,Hunter,65,M,,,DD.DDD,32.29733334,-110.2794,32.31533333,-110.3025,1,32.29733334,-110.2794,32.31533333,-110.3025
US,AZ,US-AZ0131,MOHAVE ,Dry,310,Wilderness,Flat,ATV,"42,14,45,13",FMMM,4,,DD.DDD,34.51823333,-114.2821667,34.51666667,-114.25,1,34.51823333,-114.2821667,34.51666667,-114.25
US,AZ,US-AZ0132,MOHAVE ,Dry,310,Wilderness,Flat,Motorcycle,"31,30",MM,2,,DD.DDD,35.16326666,-114.3189333,35.11666667,-114.4333333,1,35.16326666,-114.3189333,35.11666667,-114.4333333
US,AZ,US-AZ0134,COCONINO ,Dry,M310,Wilderness,Flat,Hunter,67,M,,,DD.DDD,35.54000003,-111.9583333,35.54666665,-111.9683333,1,35.54000003,-111.9583333,35.54666665,-111.9683333
US,AZ,US-AZ0135,COCONINO ,Dry,M310,Wilderness,Flat,Hiker,28,F,,,DD.DDD,35.33068333,-111.7110833,35.33423335,-111.6975,1,35.33068333,-111.7110833,35.33423335,-111.6975
US,AZ,US-AZ0136,APACHE ,Dry,m310,Wilderness,Flat,Child,12,M,,,DD.DDD,34.18046667,-109.3044667,34.24506667,-109.3257667,1,34.18046667,-109.3044667,34.24506667,-109.3257667
US,AZ,US-AZ0137,APACHE ,Dry,m310,Wilderness,Flat,Youth,"14,16",MM,2,,DD.DDD,34.18046667,-109.3044667,34.24506667,-109.3257667,1,34.18046667,-109.3044667,34.24506667,-109.3257667
US,AZ,US-AZ0138,COCONINO ,Dry,M310,Wilderness,Flat,Mental Retardation,23,M,,,DD.DDD,35.0334,-111.2949833,35.58833332,-111.2394167,1,35.0334,-111.2949833,35.58833332,-111.2394167
US,AZ,US-AZ0139,MOHAVE ,Dry,310,Wilderness,Flat,Worker,68,M,,,DD.DDD,35.9,-114.4,35.91666667,-114.0833333,1,35.9,-114.4,35.91666667,-114.0833333
US,AZ,US-AZ0142,PIMA ,Dry,320,Suburban,Flat,Autistic,10,M,,,DD.DDD,32.41666667,-110.9333333,32.37083333,-110.9758333,1,32.41666667,-110.9333333,32.37083333,-110.9758333
US,AZ,US-AZ0144,YAVAPAI ,Dry,310,Wilderness,Flat,Child,10,M,,,DD.DDD,35.09275,-112.4393,35.08423333,-112.4337167,1,35.09275,-112.4393,35.08423333,-112.4337167
US,AZ,US-AZ0149,MOHAVE ,Dry,310,Wilderness,Flat,ATV,52,M,,,DD.DDD,35.1,-113.55,35.16666667,-113.7,1,35.1,-113.55,35.16666667,-113.7
US,AZ,US-AZ0150,COCHISE ,Dry,320,Wilderness,Flat,Aircraft,28,MM,2,,DD.DDD,32.0695,-110.0718333,35.16243334,-111.5408833,1,32.0695,-110.0718333,35.16243334,-111.5408833
US,AZ,US-AZ0151,YAVAPAI ,Dry,310,Wilderness,Flat,Child,11,M,,,DD.DDD,34.40413332,-112.42975,34.3949,-112.4288833,1,34.40413332,-112.42975,34.3949,-112.4288833
US,AZ,US-AZ0154,COCHISE ,Dry,320,Wilderness,Flat,Hiker,48,M,,,DD.DDD,32.01236667,-109.3157167,31.99934998,-109.3078,1,32.01236667,-109.3157167,31.99934998,-109.3078
US,AZ,US-AZ0156,COCHISE ,Dry,320,Wilderness,Flat,Hiker,63,M,,,DD.DDD,31.85073331,-109.4219333,31.86200002,-109.338,1,31.85073331,-109.4219333,31.86200002,-109.338
US,AZ,US-AZ0158,COCONINO ,Dry,M310,Wilderness,Flat,Hiker,59,F,,,DD.DDD,34.88683332,-111.784,34.90266666,-111.7868333,1,34.88683332,-111.784,34.90266666,-111.7868333
US,AZ,US-AZ0159,MARICOPA ,Dry,320,Wilderness,Flat,Dementia,85,M,,,DD.DDD,33.58235003,-111.2151333,33.59669997,-111.2027833,1,33.58235003,-111.2151333,33.59669997,-111.2027833
US,AZ,US-AZ0160,PIMA ,Dry,320,Wilderness,Flat,Dementia,91,M,,,DD.DDD,32.32366667,-111.0733333,32.31871665,-111.07295,1,32.32366667,-111.0733333,32.31871665,-111.07295
US,AZ,US-AZ0161,PIMA ,Dry,320,Wilderness,Flat,Mental Retardation,13,F,,,DD.DDD,31.74216665,-111.0135,31.78933334,-111.0201667,1,31.74216665,-111.0135,31.78933334,-111.0201667
US,AZ,US-AZ0162,PIMA ,Dry,320,Wilderness,Mountainous,Hiker,53,M,,,DD.DDD,32.41976668,-110.7473333,32.36550001,-110.7758333,1,32.41976668,-110.7473333,32.36550001,-110.7758333
US,AZ,US-AZ0165,YAVAPAI ,Dry,310,Wilderness,Flat,Vehicle-4wd,,F,,,DD.DDD,34.30129999,-112.10295,34.28333333,-112.05,1,34.30129999,-112.10295,34.28333333,-112.05
US,AZ,US-AZ0166,YAVAPAI ,Dry,310,Wilderness,Flat,Vehicle-4wd,37,M,,,DD.DDD,34.30129999,-112.10295,34.28333333,-112.05,1,34.30129999,-112.10295,34.28333333,-112.05
US,AZ,US-AZ0169,MARICOPA ,Dry,320,Wilderness,Flat,Hiker,58,F,,,DD.DDD,33.60398331,-112.5151167,33.5903333,-112.5228333,1,33.60398331,-112.5151167,33.5903333,-112.5228333
US,AZ,US-AZ0170,COCHISE ,Dry,320,Wilderness,Flat,Mental Retardation,38,F,,,DD.DDD,31.94159997,-109.83255,31.93203335,-109.776,1,31.94159997,-109.83255,31.93203335,-109.776
US,AZ,US-AZ0176,PINAL ,Dry,320,Wilderness,Mountainous,Mountain Biker,39,M,,,DD.DDD,32.44033333,-110.7910334,32.48291667,-110.8153333,1,32.44033333,-110.7910334,32.48291667,-110.8153333
US,AZ,US-AZ0178,PINAL ,Dry,320,Wilderness,Mountainous,Hiker,40,M,,,DD.DDD,33.39680001,-111.34805,33.42150002,-111.3605,1,33.39680001,-111.34805,33.42150002,-111.3605
US,AZ,US-AZ0180,MARICOPA ,Dry,320,Wilderness,Flat,Hiker,"55,45,55,69",MMMM,4,,DD.DDD,33.52603334,-111.3904833,33.52000001,-111.395,1,33.52603334,-111.3904833,33.52000001,-111.395
US,AZ,US-AZ0181,MARICOPA ,Dry,320,Wilderness,Mountainous,Aircraft,22,F,,,DD.DDD,33.27266668,-112.5923333,33.26836665,-112.5911667,1,33.27266668,-112.5923333,33.26836665,-112.5911667
US,AZ,US-AZ0185,PIMA ,Dry,320,Wilderness,Mountainous,Hiker,63,M,,,DD.DDD,32.33333333,-110.8528333,32.37150002,-110.8646667,1,32.33333333,-110.8528333,32.37150002,-110.8646667
US,AZ,US-AZ0186,PIMA ,Dry,320,Wilderness,Mountainous,Hiker,24,M,,,DD.DDD,32.33583333,-110.9101667,32.3665,-110.8801667,1,32.33583333,-110.9101667,32.3665,-110.8801667
US,AZ,US-AZ0187,PIMA ,Dry,320,Wilderness,Flat,Hiker,"38,51",MM,2,,DD.DDD,32.33699999,-110.9166667,32.35983334,-110.8976667,1,32.33699999,-110.9166667,32.35983334,-110.8976667
US,AZ,US-AZ0188,LA PAZ ,Dry,320,Wilderness,Flat,Substance Abuse,29,F,,,DD.DDD,33.65670001,-114.4192167,33.61026669,-114.5182333,1,33.65670001,-114.4192167,33.61026669,-114.5182333
US,AZ,US-AZ0190,MOHAVE ,Dry,310,Wilderness,Mountainous,Dementia,89,M,,,DD.DDD,35.26558334,-114.0267,35.29941667,-114.0836667,1,35.26558334,-114.0267,35.29941667,-114.0836667
US,AZ,US-AZ0192,COCONINO ,Dry,M310,Wilderness,Flat,Hiker,32,F,,,DD.DDD,35.08133334,-111.0710833,35.08133334,-111.0710833,1,35.08133334,-111.0710833,35.08133334,-111.0710833
US,AZ,US-AZ0195,YUMA ,Dry,320,Wilderness,Flat,Hiker,51,F,,,DD.DDD,33.25,-113.5093333,33.25,-113.5093333,1,33.25,-113.5093333,33.25,-113.5093333
US,AZ,US-AZ0196,SANTA CRUZ ,Dry,320,Wilderness,Mountainous,Hiker,68,M,,,DD.DDD,31.50571667,-110.6762167,31.51000001,-110.6533333,1,31.50571667,-110.6762167,31.51000001,-110.6533333
US,AZ,US-AZ0201,YAVAPAI ,Dry,310,Wilderness,Flat,Hiker,35,M,,,DD.DDD,34.91666667,-111.8,34.96666667,-111.8666667,1,34.91666667,-111.8,34.96666667,-111.8666667
US,AZ,US-AZ0203,MOHAVE ,Dry,310,Wilderness,Flat,Vehicle-4wd,"19,20,21,25",MFMM,4,,DD.DDD,34.41985,-114.1983333,34.27661667,-114.0408333,1,34.41985,-114.1983333,34.27661667,-114.0408333
US,AZ,US-AZ0204,MOHAVE ,Dry,310,Wilderness,Flat,Hiker,24,M,,,DD.DDD,35.1938,-114.0570333,35.20871666,-114.13195,1,35.1938,-114.0570333,35.20871666,-114.13195
US,AZ,US-AZ0205,MOHAVE ,Dry,310,Wilderness,Flat,Worker,35,M,,,DD.DDD,35.73811665,-114.3975833,35.7725167,-114.2564667,1,35.73811665,-114.3975833,35.7725167,-114.2564667
US,AZ,US-AZ0207,PIMA ,Dry,320,Wilderness,Flat,Hiker,"53,54,56",FMF,3,,DD.DDD,33.39715001,-111.3478833,33.42233334,-111.3514667,1,33.39715001,-111.3478833,33.42233334,-111.3514667
US,AZ,US-AZ0208,COCONINO ,Dry,M310,Wilderness,Flat,Gatherer,"102,35,37,14,35",MFMMMM,5,,DD.DDD,35.83560003,-112.0263833,35.82865003,-112.0532167,1,35.83560003,-112.0263833,35.82865003,-112.0532167
US,AZ,US-AZ0209,PIMA ,Dry,320,Wilderness,Flat,Hiker,33,F,1,,DD.DDD,33.39715001,-111.3478833,35.82865003,-112.0532167,1,33.39715001,-111.3478833,35.82865003,-112.0532167
US,AZ,US-AZ0210,GRAHAM ,Dry,320,Wilderness,Mountainous,Child,12,F,,,DD.DDD,32.85706666,-109.7643667,32.86378333,-109.7708167,1,32.85706666,-109.7643667,32.86378333,-109.7708167
US,AZ,US-AZ0211,PIMA ,Dry,320,Wilderness,Flat,Hiker,"13,13,57,11,12,12,13,12,13,46,13,31",MMMMMMMMMMMM,12,Snow,DD.DDD,33.37055,-111.1152167,33.37528334,-111.0891833,1,33.37055,-111.1152167,33.37528334,-111.0891833
US,AZ,US-AZ0219,GILA ,Dry,m310,Wilderness,MOUNTAINOUS,Hiker,"45,78",MM,2,,DD.DDD,34.0927,-111.42465,34.06876667,-111.4359167,1,34.0927,-111.42465,34.06876667,-111.4359167
US,AZ,US-AZ0221,COCHISE ,Dry,320,Wilderness,Mountainous,Hiker,"10,33,35,9",FFMM,4,Snow,DD.DDD,31.83521665,-110.3567,31.86226667,-110.39655,1,31.83521665,-110.3567,31.86226667,-110.39655
US,AZ,US-AZ0222,MOHAVE ,Dry,310,Wilderness,Flat,Aircraft,"59,62",MM,2,,DD.DDD,34.87518336,-113.4748333,34.88164997,-113.4667833,1,34.87518336,-113.4748333,34.88164997,-113.4667833
US,AZ,US-AZ0224,PINAL ,Dry,320,Wilderness,Mountainous,Horseback Rider,"13,32,60,46,32,9",MMMFFF,6,,DD.DDD,33.39720001,-111.3478667,33.47999999,-111.3725,1,33.39720001,-111.3478667,33.47999999,-111.3725
US,AZ,US-AZ0227,COCONINO ,Dry,M310,Wilderness,Flat,Hunter,39,M,,,DD.DDD,34.89366665,-111.5823333,34.90983334,-111.5875,1,34.89366665,-111.5823333,34.90983334,-111.5875
US,AZ,US-AZ0228,COCONINO ,Dry,M310,Wilderness,MOUNTAINOUS,Hiker,"17,18",MM,2,,DD.DDD,35.24375,-111.5996667,35.23251667,-111.6015,1,35.24375,-111.5996667,35.23251667,-111.6015
US,AZ,US-AZ0229,COCONINO ,Dry,M310,Wilderness,Flat,Despondent,59,M,,,DD.DDD,36.9235,-111.4773333,36.9235,-111.4773333,1,36.9235,-111.4773333,36.9235,-111.4773333
US,AZ,US-AZ0231,MOHAVE ,Dry,310,Wilderness,Flat,Vehicle,"33,33",FM,2,,DD.DDD,34.70491664,-113.6109166,34.86253332,-113.6262167,1,34.70491664,-113.6109166,34.86253332,-113.6262167
US,AZ,US-AZ0232,GILA ,Dry,m310,Wilderness,Flat,Hunter,41,M,,,DD.DDD,34.35966667,-111.3271667,34.37199999,-111.3353333,1,34.35966667,-111.3271667,34.37199999,-111.3353333
US,AZ,US-AZ0243,COCONINO ,Dry,M310,urban,Flat,Dementia,72,F,,,DD.DDD,35.09778334,-111.6884167,35.18475,-111.6615667,1,35.09778334,-111.6884167,35.18475,-111.6615667
US,AZ,US-AZ0250,YAVAPAI ,Dry,310,Wilderness,Flat,Hiker,"44,11",MM,2,,DD.DDD,34.82513332,-111.7874833,34.82195002,-111.7927834,1,34.82513332,-111.7874833,34.82195002,-111.7927834
US,AZ,US-AZ0251,PINAL ,Dry,320,Wilderness,Mountainous,Hiker,"19,19,18",MMM,3,,DD.DDD,33.39705,-111.3478667,33.40933332,-111.3171667,1,33.39705,-111.3478667,33.40933332,-111.3171667
US,AZ,US-AZ0253,PIMA ,Dry,320,Wilderness,Flat,Hiker,60,M,,,DD.DDD,33.38884999,-111.36565,33.40120001,-111.3751667,1,33.38884999,-111.36565,33.40120001,-111.3751667
US,AZ,US-AZ0254,PINAL ,Dry,320,Wilderness,Flat,Hiker,72,F,,,DD.DDD,32.82141666,-111.2021167,32.82466666,-111.2271667,1,32.82141666,-111.2021167,32.82466666,-111.2271667
US,AZ,US-AZ0255,YAVAPAI ,Dry,310,Wilderness,Flat,Hiker,43,M,,,DD.DDD,34.97868334,-111.8964333,34.94683336,-111.8896667,1,34.97868334,-111.8964333,34.94683336,-111.8896667
US,AZ,US-AZ0258,COCHISE ,Dry,320,Wilderness,Flat,Mental Retardation,16,M,,,DD.DDD,31.47053334,-110.1897833,31.52950001,-110.1289833,1,31.47053334,-110.1897833,31.52950001,-110.1289833
US,AZ,US-AZ0260,PINAL ,Dry,320,Wilderness,Mountainous,Hiker,"42,55",FM,2,,DD.DDD,33.47801666,-111.4376667,33.41566668,-111.3647833,1,33.47801666,-111.4376667,33.41566668,-111.3647833
US,AZ,US-AZ0266,COCONINO ,Dry,M310,Wilderness,MOUNTAINOUS,Hiker,44,F,,,DD.DDD,34.82386665,-111.7751333,34.83166669,-111.743,1,34.82386665,-111.7751333,34.83166669,-111.743
US,AZ,US-AZ0267,COCONINO ,Dry,M310,Wilderness,MOUNTAINOUS,Hiker,27,M,,,DD.DDD,34.92530003,-111.7341,34.89733334,-111.7411667,1,34.92530003,-111.7341,34.89733334,-111.7411667
US,AZ,US-AZ0270,GILA ,Dry,m310,Wilderness,MOUNTAINOUS,Hiker,"23,23",FM,2,,DD.DDD,34.09278333,-111.4209833,34.10233333,-111.4903333,1,34.09278333,-111.4209833,34.10233333,-111.4903333
US,AZ,US-AZ0274,PIMA ,Dry,320,Wilderness,Flat,Despondent,49,M,,,DD.DDD,32.42133334,-110.74,32.41833334,-110.7466667,1,32.42133334,-110.74,32.41833334,-110.7466667
US,AZ,US-AZ0276,MOHAVE ,Dry,310,Wilderness,Flat,Dementia,80,M,,,DD.DDD,34.75533333,-114.2059,34.82199999,-114.1441167,1,34.75533333,-114.2059,34.82199999,-114.1441167
US,AZ,US-AZ0277,COCONINO ,Dry,M310,Wilderness,Flat,Hiker,33,F,,,DD.DDD,36.23878333,-112.6892,36.24643334,-112.7000834,1,36.23878333,-112.6892,36.24643334,-112.7000834
US,AZ,US-AZ0278,COCONINO ,Dry,M310,Wilderness,Hilly,ATV,13,M,,,DD.DDD,35.33245001,-111.4995333,35.33533335,-111.4548333,1,35.33245001,-111.4995333,35.33533335,-111.4548333
US,AZ,US-AZ0279,COCHISE ,Dry,320,Wilderness,Mountainous,Hiker,34,F,,,DD.DDD,31.33446668,-109.81855,31.41008333,-109.8383333,1,31.33446668,-109.81855,31.41008333,-109.8383333
US,AZ,US-AZ0284,PINAL ,Dry,320,Wilderness,Flat,Vehicle,"19,27",FM,2,,DD.DDD,33.25333333,-111.4766667,33.24333334,-110.4516667,1,33.25333333,-111.4766667,33.24333334,-110.4516667
US,NJ,US-NJ0004,Somerset,Temperate,220,Rural,Flat,Child,12,M,1,,UTM,18T 0546398,4500085,18t 0546877,4498251,1,40.65222,-74.45078,40.63567,-74.44526
US,NM,US-NM0822,7,Dry,M330,Wilderness,Mountainous,Hiker,,,,,DD MM.MM,36N22.484 ,106W40.771,36N22.80 ,106W40.66,3,36.37473,-106.67952,36.38,-106.67767
US,NY,US-NY2107,,Temperate,m210,Wilderness,Mountainous,Hiker,"34,47",MM,2,Snow,UTM,554883,4652989,553615,4652989,1,42.02893,-74.33659,42.02902,-74.35191
US,NY,US-NY2109,,Temperate,,Wilderness,Flat,Hunter,63,M,1,Overcast,UTM,549074,4632093,548889,4632529,1,41.84112,-74.40851,41.84506,-74.4107
US,NY,US-NY2110,,Temperate,220,Wilderness,Hilly,Gatherer,74,F,1,Rain,UTM,51796,4618946,50779,4615221,1,41.59828,-80.37693,41.5643,-80.38629
US,NY,US-NY2112,,Temperate,m210,Wilderness,Mountainous,Hiker,"57,61",MM,2,Clear,UTM,55318,4613142,55947,4617772,1,41.54819,-80.33056,41.59006,-80.32647
US,NY,US-NY2113,,Temperate,m210,Wilderness,Mountainous,Hiker,"40,23",MF,2,Rain,UTM,547500,4650800,553300,4653700,1,42.0097,-74.42595,42.03544,-74.35565
US,NY,US-NY2116,,Temperate,,Wilderness,Flat,Child,4,M,1,Clear,UTM,574500,4508500,574500,4508500,1,40.72596,-74.11741,40.72596,-74.11741
US,NY,US-NY2117,,Temperate,220,Wilderness,Hilly,Runaway,15,M,1,Clear,UTM,578600,463400,585500,4639000,10,4.19377,-74.29146,41.90022,-73.96881
US,NY,US-NY2118,,Temperate,,Wilderness,Hilly,Runaway,17,M,1,Rain,UTM,580280,4658557,580280,4658557,1,42.07689,-74.02906,42.07689,-74.02906
US,NY,US-NY2120,,Temperate,220,Wilderness,Flat,Despondent,72,F,1,Clear,UTM,180587160,4658029,180587240,46580491,1,42.0714,-73.94598,42.07157,-73.94501
US,NY,US-NY2121,,Temperate,220,Wilderness,Hilly,ATV,28,M,1,Clear,UTM,180589129,4663875,180590010,4672251,1,42.12382,-73.92129,42.19915,-73.90934
US,NY,US-NY2129,Greene,Temperate,m210,Wilderness,Mountainous,Hiker,"14,26",MMMMM,8,Rain,UTM,564909,4669810,566372,4670245,1,42.17965,-74.21362,42.18345,-74.19585
US,NY,US-NY2131,,Temperate,,Wilderness,,Worker,70,M,1,Clear,UTM,472846,4708493,476980,4734430,1,42.53026,-75.33023,42.76397,-75.28094
US,NY,US-NY2132,,Temperate,,Wilderness,Hilly,Hiker,"70,68,64",MFF,3,Clear,UTM,624150,4711875,624149,4711875,1,42.55121,-73.4874,42.55121,-73.48741
US,NY,US-NY2134,,Temperate,220,Wilderness,Hilly,Dementia,77,M,1,Clear,UTM,606682,4732481,606682,4732481,1,42.73934,-73.69624,42.73934,-73.69624
US,NY,US-NY2135,,Temperate,m210,Wilderness,Hilly,Dementia,80,F,1,Clear,UTM,185540,4683177,180551,4686933,1,42.23938,-78.81068,42.27111,-78.87307
US,NY,US-NY2137,,Temperate,m210,Wilderness,Mountainous,Hiker,"19,16,19",MMM,3,Clear,UTM,56920,4664942,57263,4660650,1,42.01362,-80.35002,41.97533,-80.34266
US,NY,US-NY2139,,Temperate,220,Wilderness,Hilly,Dementia,78,F,1,Rain,UTM,581309,4688329,588221,4684592,1,42.34488,-74.01246,42.31048,-73.92913
US,NY,US-NY2142,Grafton,Temperate,M210,Wilderness,Flat,Hiker,18,M,1,Rain,UTM,626442,4733189,625782,4734168,1,42.74271,-73.45475,42.75163,-73.46259
US,NY,US-NY2143,,Temperate,,Wilderness,Hilly,Dementia,74,M,1,Clear,UTM,617168,4650019,617168,4650019,1,41.99538,-73.58493,41.99538,-73.58493
US,NY,US-NY2145,Knox,Temperate,m210,Wilderness,Mountainous,Despondent,50,M,1,Clear,UTM,578795,4724845,578767,4724845,1,42.67396,-74.03795,42.67396,-74.03829
US,NY,US-NY2146,Fultonville,Temperate,,Wilderness,Flat,Dementia,83,F,1,Rain,UTM,551244,4755040,552289,4754576,1,42.94819,-74.37142,42.94394,-74.35865
US,NY,US-NY2148,Fleischmanns,Temperate,,Wilderness,Flat,Child,4,M,1,Clear,UTM,535360,4667270,535360,466727,10,42.15867,-74.57156,4.22413,-74.68106
US,NY,US-NY2149,Glenford,Temperate,,Wilderness,Hilly,Hiker,31,M,1,Clear,UTM,565627,4667068,565476,4667281,1,42.1549,-74.20523,42.15683,-74.20704
US,NY,US-NY2150,Oneota,Temperate,,Wilderness,,Dementia,77,M,1,Rain,UTM,494970,4702017,494694,4703461,1,42.4724,-75.06078,42.4854,-75.06415
US,NY,US-NY2159,,Temperate,,Wilderness,Flat,Hunter,58,M,1,Snow,UTM,522750,4831420,520090,4827300,10,43.63734,-74.71754,43.60032,-74.75067
US,NY,US-NY2161,Jonesville,Temperate,,Wilderness,Flat,Hiker,66,M,1,Rain,UTM,597546,4750550,597546,4750550,10,42.90324,-73.8047,42.90324,-73.8047
US,NY,US-NY2162,,Temperate,,Wilderness,Hilly,Hunter,52,M,1,Overcast,UTM,521030,4804670,521010,4804900,10,43.39653,-74.7399,43.3986,-74.74013
US,NY,US-NY2163,,Temperate,,Wilderness,Hilly,Hunter,37,M,1,Rain,UTM,57500,4864830,573520,4864670,10,43.80591,-74.50039,43.9334,-74.0836
US,NY,US-NY2165,,Temperate,m210,Wilderness,Mountainous,Youth,14,M,1,Clear,UTM,180602,4890150,180600,4888550,10,44.09674,-72.98959,44.08237,-72.98864
US,NY,US-NY2168,,Temperate,m210,Wilderness,Mountainous,Hiker,50,F,1,Snow,UTM,591481,4890139,591173,4889474,1,44.16065,-73.85545,44.1547,-73.85942
US,NY,US-NY2170,Dickersn Center,Temperate,,Wilderness,Flat,Child,3,M,1,Clear,UTM,53304,4950780,53304,4950780,10,44.57354,-74.62532,44.57354,-74.62532
US,NY,US-NY2172,,Temperate,m210,Wilderness,Mountainous,Hiker,18,FF,3,Snow,UTM,58940,4822500,58900,4824300,10,43.42736,-74.4481,43.44347,-74.45004
US,NY,US-NY2175,,Temperate,,Wilderness,Flat,Youth,"12,12,12,13",FFFF,3,Clear,UTM,551268,907735,550906,906500,10,8.21342,-74.53422,8.20225,-74.53752
US,NY,US-NY2183,Keene,Temperate,m210,Wilderness,Mountainous,Hiker,"21,16",MMM,3,Snow,UTM,180594,4899421,180594,4899421,1,44.18,-72.99531,44.18,-72.99531
US,NY,US-NY2187,,Temperate,m210,Wilderness,Mountainous,Hiker,62,M,1,Clear,UTM,613433,4819331,613088,4819590,1,43.52022,-73.59601,43.5226,-73.60022
US,NY,US-NY2192,,Temperate,m210,Wilderness,Mountainous,Hiker,"49,41",FM,2,Rain,UTM,597064,4886293,596856,4886894,1,44.12531,-73.78635,44.13075,-73.78884
US,NY,US-NY2196,Indian Lake,Temperate,,Wilderness,Hilly,Hiker,48,M,1,Clear,UTM,559900,4842400,557700,4842700,10,43.73413,-74.25577,43.73701,-74.28305
US,NY,US-NY2197,,Temperate,,Wilderness,Hilly,Hunter,57,M,1,Overcast,UTM,546600,4841300,544300,4835500,10,43.72519,-74.42101,43.67311,-74.45004
US,NY,US-NY2198,,Temperate,,Wilderness,Hilly,Hunter,35,M,1,Clear,UTM,555525,4847930,554566,4847980,10,43.78426,-74.30952,43.78478,-74.32143
US,NY,US-NY2200,,Temperate,,Wilderness,Hilly,Hunter,45,M,1,Overcast,UTM,52567,4787280,52498,4788120,10,43.10791,-74.4979,43.1154,-74.49942
US,NY,US-NY2203,,Temperate,,Wilderness,Hilly,Hiker,"43,16",FM,2,Clear,UTM,53349,4782890,53319,4781300,10,43.06902,-74.48481,43.05475,-74.4839
US,NY,US-NY2204,Indian Lake,Temperate,,Wilderness,Hilly,Hiker,,MM,2,Clear,UTM,545700,4858000,550200,4862000,10,43.8756,-74.43076,43.91132,-74.37437
US,NY,US-NY2206,,Temperate,,Wilderness,Hilly,Hunter,45,M,1,Snow,UTM,610152,4875706,606162,8741020,10,44.02816,-73.62502,78.70308,-76.13927
US,NY,US-NY2207,Newcomb,Temperate,,Wilderness,Hilly,Hunter,77,M,1,Overcast,UTM,570500,4866900,568700,4864800,10,43.95377,-74.12092,43.93503,-74.14363
US,NY,US-NY2216,Inlet,Temperate,,Wilderness,Hilly,Dementia,72,M,1,Clear,UTM,51860,4841640,52190,4841550,10,43.5947,-74.55091,43.59409,-74.54677
US,NY,US-NY2217,Ft Ann,Temperate,m210,Wilderness,Mountainous,Hiker,18,MF,5,Clear,UTM,61550,4821000,61550,4821000,10,43.41544,-74.4148,43.41544,-74.4148
US,NY,US-NY2218,,Temperate,m210,Wilderness,Mountainous,Mountain Biker,26,F,1,Overcast,UTM,180614,4830350,180614,4830350,10,43.55961,-72.95376,43.55963,-78.95397
US,NY,US-NY2229,,Temperate,,Wilderness,Hilly,Despondent,26,M,1,Foggy,UTM,58730,4820800,587300,4820800,10,43.412,-74.44931,43.53696,-73.91907
US,NY,US-NY2235,,Temperate,,Wilderness,Hilly,Hiker,"48,49",MF,2,Rain,UTM,602597,4808550,601965,4808990,10,43.42473,-73.73209,43.42878,-73.73981
US,NY,US-NY2236,,Temperate,,Wilderness,Hilly,Hiker,"40,14",MF,2,Clear,UTM,51671,4841997,51694,4842097,1,43.59779,-74.55354,43.5987,-74.55334
US,NY,US-NY2237,,Temperate,,Wilderness,Hilly,Hiker,36,M,1,Rain,UTM,62265,4824240,62278,4823030,10,43.4449,-74.4086,43.43407,-74.40747
US,NY,US-NY2238,WASHINGTON,Temperate,220,Wilderness,Hilly,Hiker,40,FF,1,Rain,UTM,61716,4822970,61818,4825600,10,43.4332,-74.41433,43.45684,-74.41519
US,NY,US-NY2239,WASHINGTON,Temperate,m210,Wilderness,Mountainous,Camper,46,M,1,Overcast,UTM,61607,4822020,61700,4822080,10,43.42462,-74.41491,43.42521,-74.41382
US,NY,US-NY2240,,Temperate,,Wilderness,Hilly,Hiker,18,M,1,Clear,UTM,53058,4825850,53369,4818440,10,43.4539,-74.52317,43.38768,-74.5133
US,NY,US-NY2242,SARATOGA,Temperate,220,Wilderness,Flat,Fisher,44,M,1,Clear,UTM,57160,4780500,57160,4780400,10,43.04983,-74.43631,43.04893,-74.43623
US,NY,US-NY2245,,Temperate,,Wilderness,Hilly,Child,10,M,1,Clear,UTM,63020,4812840,62946,4813340,10,43.34315,-74.39022,43.34759,-74.39152
US,NY,US-NY2249,HAMILTON,Temperate,m210,Wilderness,Hilly,Hiker,77,M,1,Rain,UTM,51475,4846000,51591,4846630,10,43.63354,-74.55927,43.63926,-74.55836
US,NY,US-NY2250,,Temperate,m210,Wilderness,Mountainous,Hiker,39,FF,1,Rain,UTM,558840,4893253,56305,4892900,1,44.19204,-74.26329,44.05675,-74.53854
US,NY,US-NY2253,,Temperate,,Wilderness,Hilly,Dementia,79,M,1,Clear,UTM,63118,4764670,62948,4758250,10,42.91135,-74.35112,42.85369,-74.34821
US,NY,US-NY2254,,Temperate,,Wilderness,Flat,Snowmobile,29,M,1,Overcast,UTM,5526,4834500,5572,4843700,100,43.50153,-75.11533,43.58393,-75.12313
US,NY,US-NY2258,,Temperate,,Wilderness,Hilly,Hiker,"19,17, 15, 9",MMMM,4,Rain,UTM,55869,4921580,55634,4921300,10,44.31349,-74.56818,44.31083,-74.57087
US,NY,US-NY2259,WASHINGTON,Temperate,220,Wilderness,Hilly,Hiker,"19,54,9",MMM,3,Clear,UTM,61606,4822060,61602,4821050,10,43.42498,-74.41496,43.41592,-74.4142
US,NY,US-NY2260,,Temperate,,Wilderness,Hilly,Walkaway,56,F,1,Snow,UTM,53049,4774310,53320,4774160,10,42.99194,-74.48161,42.99075,-74.47818
US,NY,US-NY2261,,Temperate,,Wilderness,Hilly,Runner,17,M,1,Overcast,UTM,587733,4793553,588171,4793583,1,43.29161,-73.91809,43.29182,-73.91268
US,NY,US-NY2268,HAMILTON,Temperate,m210,Wilderness,Hilly,Hiker,64,M,1,Rain,UTM,54771,4812130,54651,4802360,10,43.33195,-74.49095,43.24431,-74.48453
US,NY,US-NY2274,,Temperate,m210,Wilderness,Mountainous,Hiker,"17,35,35",MMM,3,Snow,UTM,5865,4885000,5909,4889900,100,43.95385,-75.15748,43.99774,-75.16148
US,NY,US-NY2275,,Temperate,m210,Wilderness,Mountainous,Skier-Nordic,"28,26",MM,2,Snow,UTM,58613,4885378,58431,4885378,1,43.99073,-74.5036,43.99062,-74.50586
US,NY,US-NY2277,,Temperate,,Wilderness,Flat,Hunter,42,M,1,Rain,UTM,444310,4825871,444764,4826004,1,43.58565,-75.68942,43.58688,-75.68381
US,NY,US-NY2280,ONEIDA,Temperate,210,Wilderness,Flat,Hunter,29,M,1,Overcast,UTM,431536,4788933,431597,4789346,1,43.25201,-75.84301,43.25574,-75.84231
US,NY,US-NY2281,,Temperate,,Wilderness,Flat,Hunter,20,M,1,Overcast,UTM,477031,4833630,477874,4833749,1,43.65724,-75.28444,43.65833,-75.27399
US,NY,US-NY2282,,Temperate,,Wilderness,Hilly,Hunter,43,M,1,Rain,UTM,42558,4843240,42558,4843240,10,43.60339,-74.66695,43.60339,-74.66695
US,NY,US-NY2285,,Temperate,,Wilderness,Hilly,Hunter,57,M,1,Snow,UTM,443905,4804936,444117,4805730,1,43.39713,-75.69228,43.40429,-75.68974
US,NY,US-NY2286,,Temperate,,Wilderness,Hilly,Hunter,28,M,1,Rain,UTM,447345,4809462,450052,4807025,1,43.43813,-75.65024,43.41637,-75.61657
US,NY,US-NY2290,,Temperate,,Wilderness,Hilly,Child,12,MM,2,Clear,UTM,497574,4889111,498314,4888958,1,44.15712,-75.02992,44.15575,-75.02066
US,NY,US-NY2291,,Temperate,,Wilderness,Flat,Hiker,13,M,1,Clear,UTM,52861,4901300,52701,4892980,10,44.12993,-74.58844,44.05528,-74.58339
US,NY,US-NY2293,,Temperate,,Wilderness,Hilly,Hunter,31,F,1,Clear,UTM,458048,4804390,456158,4803167,1,43.39313,-75.5176,43.38201,-75.54084
US,NY,US-NY2294,,Temperate,,Wilderness,Hilly,Youth,"16,14,12",MMF,3,Clear,UTM,50136,4836800,99439,4834109,1,43.55029,-74.56816,43.55422,-73.95825
US,NY,US-NY2295,,Temperate,m210,Wilderness,Mountainous,Hiker,43,M,1,Clear,UTM,51986,4918840,52980,4919070,10,44.28656,-74.61429,44.28923,-74.60208
US,NY,US-NY2297,,Temperate,,Wilderness,Hilly,Youth,"14,13",FF,2,Clear,UTM,477076,4840718,476387,4840231,1,43.72106,-75.28418,43.71665,-75.29271
US,NY,US-NY2298,,Temperate,,Water,Water,Boater,68,M,1,Clear,UTM,509116,4903639,503578,4903898,1,44.28787,-74.88532,44.29025,-74.95473
US,NY,US-NY2300,,Temperate,,Wilderness,Hilly,Worker,54,M,1,Clear,UTM,46200,4850300,46200,4850300,10,43.66888,-74.62796,43.66888,-74.62796
US,NY,US-NY2301,,Temperate,,Wilderness,Hilly,Hiker,"17,18,18",FFF,3,Clear,UTM,49374,4832426,49700,4834581,1,43.51063,-74.57393,43.53014,-74.57169
US,NY,US-NY2302,,Temperate,,Wilderness,Mountainous,Hiker,20,F,1,Overcast,UTM,514882,4892794,516175,4892529,1,44.19013,-74.81336,44.18772,-74.79719
US,NY,US-NY2306,,Temperate,,Wilderness,Flat,Snowmobile,24,M,1,Overcast,UTM,51450,4845931,51362,4845613,1,43.63291,-74.55952,43.63001,-74.56034
US,NY,US-NY2309,OSWEGO,Temperate,220,Wilderness,Flat,Hunter,20,M,1,Overcast,UTM,418348,4812242,416565,4810368,1,43.46056,-76.00892,43.44349,-76.03067
US,NY,US-NY2310,OSWEGO,Temperate,220,Wilderness,Flat,Hunter,"18,24",MM,2,Rain,UTM,414117,4788217,414117,4788217,1,43.24379,-76.05745,43.24379,-76.05745
US,NY,US-NY2312,,Temperate,,Wilderness,Flat,Runaway,13,M,1,Clear,UTM,416367,4696446,416367,4696446,1,42.41774,-76.01611,42.41774,-76.01611
US,NY,US-NY2313,,Temperate,,Wilderness,Hilly,Hiker,76,M,1,Overcast,UTM,419316,4833994,418403,4833913,1,43.65649,-76.00019,43.65566,-76.0115
US,NY,US-NY2316,,Temperate,,Wilderness,Hilly,Walkaway,17,M,1,Clear,UTM,436670,4818716,436322,4818984,1,43.52062,-75.78321,43.523,-75.78755
US,NY,US-NY2317,Greene,Temperate,220,Wilderness,Hilly,Child,4,M,1,Overcast,UTM,441291,4684485,441396,4684332,1,42.31231,-75.71198,42.31094,-75.71069
US,NY,US-NY2318,Fulton,Temperate,210,Wilderness,Flat,,72,M,1,Clear,UTM,388837,4808262,388898,4808268,1,43.42093,-76.37282,43.42099,-76.37207
US,NY,US-NY2319,,Temperate,,Wilderness,Mountainous,Hiker,18,M,1,Clear,UTM,378644,4697807,378642,4697813,1,42.42501,-76.47478,42.42506,-76.47481
US,NY,US-NY2320,Greene,Temperate,220,urban,,Child,3,F,1,Clear,UTM,433109,4691863,433109,461863,1,42.37809,-75.81211,4.17996,-75.60242
US,NY,US-NY2321,,Temperate,,Wilderness,Flat,Despondent,45,M,1,Rain,UTM,416250,4709900,416250,4709900,1,42.53887,-76.0195,42.53887,-76.0195
US,NY,US-NY2322,,Temperate,,Wilderness,Hilly,Dementia,78,M,1,Clear,UTM,465598,4707305,466936,4706919,1,42.51927,-75.41841,42.51585,-75.4021
US,NY,US-NY2324,,Temperate,,Wilderness,Flat,Child,11,F,1,Rain,UTM,371842,4650936,378590,4650626,1,42.00193,-76.5471,42.00021,-76.46558
US,NY,US-NY2327,TOMPKINS,Temperate,,Wilderness,Hilly,Hiker,"26,23",FM,2,Clear,UTM,378179,4685857,377174,4684249,1,42.31735,-76.47791,42.30271,-76.48976
US,NY,US-NY2328,BROOME,Temperate,210,Wilderness,Hilly,Despondent,19,M,1,Rain,UTM,422610,4691201,422612,4691158,1,42.37115,-75.93954,42.37077,-75.93951
US,NY,US-NY2329,,Temperate,,Wilderness,Hilly,Despondent,14,M,1,Overcast,UTM,374793,4698950,375384,4699633,1,42.43469,-76.52183,42.44093,-76.51479
US,NY,US-NY2334,ONTARIO,Temperate,210,Wilderness,Flat,Child,"4,2",FM,2,Overcast,UTM,29521,4728204,29527,4728313,1,42.56466,-74.73046,42.56564,-74.73048
US,NY,US-NY2335,,Temperate,,Wilderness,Flat,Dementia,68,F,1,Clear,UTM,282350,4726866,282180,4727825,1,42.66541,-77.65544,42.67399,-77.65788
US,NY,US-NY2336,,Temperate,,Wilderness,Flat,Elderly,79,M,1,Clear,UTM,324390,4667757,324088,4668173,1,42.14418,-77.1248,42.14786,-77.12858
US,NY,US-NY2337,,Temperate,,Wilderness,Flat,Hiker,39,M,1,Rain,UTM,295983,4690764,295250,4692614,1,42.34432,-77.47638,42.36077,-77.48593
US,NY,US-NY2338,,Temperate,,Wilderness,Flat,Dementia,74,M,1,Rain,UTM,306753,4690865,307162,4690565,1,42.34797,-77.34577,42.34538,-77.34071
US,NY,US-NY2342,,Temperate,,Wilderness,Hilly,Psychotic,48,F,1,Clear,UTM,735062,4684199,735154,4685099,1,42.27649,-72.14901,42.28456,-72.14753
US,NY,US-NY2343,CATTAREUGUS,Temperate,,Wilderness,Hilly,Animal,77,M,1,Rain,UTM,1707013,4670873,1707056,4669392,1,42.03712,-74.95446,41.26768,-72.60778
US,NY,US-NY2344,,Temperate,,Wilderness,Flat,Hiker,21,M,1,Snow,UTM,269837,4681777,269819,4681811,1,42.25618,-77.78988,42.25648,-77.79011
US,NY,US-NY2348,,Temperate,,Wilderness,Flat,Hiker,"19,18",FF,2,Overcast,UTM,673888,4695952,673888,4695952,1,42.39831,-72.88675,42.39831,-72.88675
US,NY,US-NY2350,,Temperate,,Wilderness,Flat,Hunter,37,M,1,Clear,UTM,664286,4672902,662299,4671881,1,42.19293,-73.00989,42.18416,-73.03423
US,WA,US-WA0072,Olympia PD,Temperate,m240,Suburban,Flat,Dementia,81,M,1,Clear,,47 02 57,122 50 37,47 07 19,122 52 28,30,47.0492,-122.8436,47.1219,-122.8744
US,WA,US-WA0219,Snohomish ,Temperate,m240,Wilderness,Mountainous,Hiker,27,F,1,Partly cloudy,,48 09.615,121 29.499,48 08.517,121 28.433,1.8,48.1103,-121.4917,48.142,-121.4739
US,WA,US-WA0371,Whatm ,Temperate,m240,Wilderness,Mountainous,Hiker,"22,28",FM ,2,Rain,,"48 38'53""","122 26'29""","048 39'45.4""","122 24'57.2""",3,48.64606,-122.42472,48.75667,-122.41589
\ No newline at end of file
arcgis==1.8.2
argon2-cffi @ file:///C:/ci/argon2-cffi_1596828549974/work
attrs @ file:///tmp/build/80754af9/attrs_1600298409949/work
backcall==0.2.0
bleach @ file:///tmp/build/80754af9/bleach_1600439572647/work
blinker==1.4
brotlipy==0.7.0
certifi==2020.6.20
cffi @ file:///C:/ci/cffi_1600699250966/work
chardet==3.0.4
colorama==0.4.3
cryptography==2.8
cycler==0.10.0
decorator==4.4.2
defusedxml==0.6.0
entrypoints==0.3
idna @ file:///tmp/build/80754af9/idna_1593446292537/work
importlib-metadata @ file:///C:/ci/importlib-metadata_1593446525189/work
ipykernel @ file:///C:/ci/ipykernel_1596208728219/work/dist/ipykernel-5.3.4-py3-none-any.whl
ipython @ file:///C:/ci/ipython_1598883894321/work
ipython-genutils==0.2.0
ipywidgets==7.5.1
jedi==0.16.0
Jinja2==2.11.2
jsonschema @ file:///C:/ci/jsonschema_1594363671836/work
jupyter-client==6.1.2
jupyter-core @ file:///C:/Users/bri11091/conda-bld/jupyter_core_1595863163509/work
keyring==21.2.0
kiwisolver==1.2.0
lerc @ file:///Volumes/JetDrive/virtualenv/miniconda/conda-bld/lerc_1594078116229/work
MarkupSafe @ file:///C:/ci/markupsafe_1594405949945/work
matplotlib @ file:///C:/ci/matplotlib-base_1592846084747/work
mistune @ file:///C:/ci/mistune_1594373272338/work
mkl-fft==1.2.0
mkl-random==1.1.1
mkl-service==2.3.0
nbconvert==5.6.1
nbformat==5.0.7
notebook @ file:///C:/Users/bri11091/conda-bld/notebook_1599601693431/work
ntlm-auth==1.4.0
numpy @ file:///C:/ci/numpy_and_numpy_base_1596233945180/work
oauthlib==3.1.0
packaging==20.4
pandas @ file:///C:/ci/pandas_1598371525254/work
pandocfilters==1.4.2
parso @ file:///tmp/build/80754af9/parso_1596826841367/work
pickleshare @ file:///C:/ci/pickleshare_1594374056827/work
plotly @ file:///tmp/build/80754af9/plotly_1599764639247/work
prometheus-client==0.7.1
prompt-toolkit @ file:///tmp/build/80754af9/prompt-toolkit_1598885458782/work
pycparser @ file:///tmp/build/80754af9/pycparser_1594388511720/work
Pygments==2.6.1
PyJWT==1.7.1
pyOpenSSL @ file:///tmp/build/80754af9/pyopenssl_1594392929924/work
pyparsing==2.4.7
pyproj==2.6.1.post1
pyrsistent @ file:///C:/ci/pyrsistent_1600123688363/work
pyshp @ file:///tmp/build/80754af9/pyshp_1600141782871/work
PySocks @ file:///C:/ci/pysocks_1594394709107/work
python-dateutil==2.8.1
pytz==2019.3
pywin32-ctypes==0.2.0
pywinpty==0.5.7
pyzmq==19.0.0
requests @ file:///tmp/build/80754af9/requests_1592841827918/work
requests-kerberos==0.12.0
requests-ntlm==1.1.0
requests-oauthlib==1.3.0
requests-toolbelt==0.9.1
retrying==1.3.3
scipy @ file:///C:/ci/scipy_1597686737426/work
Send2Trash==1.5.0
six==1.15.0
terminado==0.8.3
testpath==0.4.4
tornado==6.0.4
traitlets==4.3.3
urllib3 @ file:///tmp/build/80754af9/urllib3_1597086586889/work
wcwidth @ file:///tmp/build/80754af9/wcwidth_1593447189090/work
webencodings==0.5.1
widgetsnbextension==3.5.1
win-inet-pton==1.1.0
wincertstore==0.2
winkerberos==0.7.0
zipp==3.1.0
function temp = test_engine(input_string)
temp = input_string;
temp
end
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment