Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
ags_grabber
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Bryson Howell
ags_grabber
Commits
32b71c53
Commit
32b71c53
authored
Jul 24, 2024
by
Bryson Howell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Can now download linear features, inac, and elevation data in desired format
parent
acb5bb2d
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
238 additions
and
46 deletions
+238
-46
arcgis_terrain.py
arcgis_terrain.py
+5
-3
feature_set.py
feature_set.py
+75
-30
lpm_maps.py
lpm_maps.py
+158
-13
No files found.
arcgis_terrain.py
View file @
32b71c53
...
@@ -105,7 +105,8 @@ def get_terrain_map(lat_lon = [0,0], sample_dist = 10, extent = 100, heading = 0
...
@@ -105,7 +105,8 @@ def get_terrain_map(lat_lon = [0,0], sample_dist = 10, extent = 100, heading = 0
# gis = GIS("pro")
# 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(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")
#gis = GIS(username="larkinheintzman",password="Meepp97#26640")
gis
=
GIS
(
api_key
=
"AAPKe7cb1ab4f2ba44748cf53ac4f30d0caavu5t_-uMdWP8SRjtoea3s66-cRyFZmMTNx4rqy2w5sjwegU_tbJyBesd0LCMmdtV"
)
#gis = GIS(url="http://virginiatech.maps.arcgis.com")
gis
=
GIS
(
api_key
=
"AAPKe7cb1ab4f2ba44748cf53ac4f30d0caavu5t_-uMdWP8SRjtoea3s66-cRyFZmMTNx4rqy2w5sjwegU_tbJyBesd0LCMmdtV"
)
# linked Bryson's pro account
if
verbosity
:
if
verbosity
:
#print("Successfully logged in as: " + gis.properties.user.username)
#print("Successfully logged in as: " + gis.properties.user.username)
print
(
"Logged into GIS"
)
print
(
"Logged into GIS"
)
...
@@ -152,6 +153,7 @@ def get_terrain_map(lat_lon = [0,0], sample_dist = 10, extent = 100, heading = 0
...
@@ -152,6 +153,7 @@ def get_terrain_map(lat_lon = [0,0], sample_dist = 10, extent = 100, heading = 0
e
=
np
.
empty
([
0
,
sc
*
cc
])
e
=
np
.
empty
([
0
,
sc
*
cc
])
data
=
[]
data
=
[]
for
j
in
range
(
cc
):
# outter loop for y values
for
j
in
range
(
cc
):
# outter loop for y values
print
(
'Iteration
%
d/
%
d'
%
(
j
,
cc
))
# lists of values for a single row, reset at every y iteration
# lists of values for a single row, reset at every y iteration
x_row
=
np
.
empty
([
sc
,
0
])
x_row
=
np
.
empty
([
sc
,
0
])
y_row
=
np
.
empty
([
sc
,
0
])
y_row
=
np
.
empty
([
sc
,
0
])
...
@@ -182,7 +184,7 @@ def get_terrain_map(lat_lon = [0,0], sample_dist = 10, extent = 100, heading = 0
...
@@ -182,7 +184,7 @@ def get_terrain_map(lat_lon = [0,0], sample_dist = 10, extent = 100, heading = 0
qs
=
np
.
stack
([
xs
.
reshape
(
len
(
elv_samples
)),
ys
.
reshape
(
len
(
elv_samples
))])
.
T
qs
=
np
.
stack
([
xs
.
reshape
(
len
(
elv_samples
)),
ys
.
reshape
(
len
(
elv_samples
))])
.
T
es
=
es
.
reshape
(
len
(
elv_samples
))
es
=
es
.
reshape
(
len
(
elv_samples
))
# data came back in weird ordering, need to re-order
# data came back in weird ordering, need to re-order
print
(
"re-ordering data ..."
)
#
print("re-ordering data ...")
es_square
=
np
.
zeros
([
sc
,
sc
])
es_square
=
np
.
zeros
([
sc
,
sc
])
for
scx
in
range
(
sc
):
for
scx
in
range
(
sc
):
for
scy
in
range
(
sc
):
# maybe the least efficient way to do this
for
scy
in
range
(
sc
):
# maybe the least efficient way to do this
...
@@ -193,7 +195,7 @@ def get_terrain_map(lat_lon = [0,0], sample_dist = 10, extent = 100, heading = 0
...
@@ -193,7 +195,7 @@ def get_terrain_map(lat_lon = [0,0], sample_dist = 10, extent = 100, heading = 0
except
ValueError
as
e
:
except
ValueError
as
e
:
print
(
"hellfire"
)
print
(
"hellfire"
)
es
=
es_square
es
=
es_square
print
(
"done re-ordering"
)
#
print("done re-ordering")
# then just the tuple of all
# then just the tuple of all
data_temp
=
[]
data_temp
=
[]
...
...
feature_set.py
View file @
32b71c53
...
@@ -29,7 +29,7 @@ def trim_extent(x_pts, y_pts, scaled_extent):
...
@@ -29,7 +29,7 @@ def trim_extent(x_pts, y_pts, scaled_extent):
y_pts_trimmed
=
y_pts
[
np
.
invert
(
rm_mask
)]
# trim points
y_pts_trimmed
=
y_pts
[
np
.
invert
(
rm_mask
)]
# trim points
return
[
x_pts_trimmed
,
y_pts_trimmed
]
return
[
x_pts_trimmed
,
y_pts_trimmed
]
def
grab_features
(
anchor_point
,
extent
,
sample_dist
=
10
,
case_name
=
'blah'
,
heading
=
0
,
save_files
=
False
,
save_to_folder
=
False
,
file_id
=
'temp'
,
plot_data
=
False
):
def
grab_features
(
anchor_point
,
extent
,
sample_dist
=
10
,
case_name
=
'blah'
,
heading
=
0
,
save_files
=
False
,
save_to_folder
=
False
,
file_id
=
'temp'
,
plot_data
=
False
,
get_elev
=
False
):
roads_url
=
"https://carto.nationalmap.gov/arcgis/rest/services/transportation/MapServer/30"
roads_url
=
"https://carto.nationalmap.gov/arcgis/rest/services/transportation/MapServer/30"
river_url
=
"https://hydro.nationalmap.gov/arcgis/rest/services/nhd/MapServer/6"
river_url
=
"https://hydro.nationalmap.gov/arcgis/rest/services/nhd/MapServer/6"
riverw_url
=
"https://hydro.nationalmap.gov/arcgis/rest/services/nhd/MapServer/8"
riverw_url
=
"https://hydro.nationalmap.gov/arcgis/rest/services/nhd/MapServer/8"
...
@@ -46,15 +46,18 @@ def grab_features(anchor_point, extent, sample_dist = 10, case_name = 'blah', he
...
@@ -46,15 +46,18 @@ def grab_features(anchor_point, extent, sample_dist = 10, case_name = 'blah', he
ky
=
"AAPKe7cb1ab4f2ba44748cf53ac4f30d0caavu5t_-uMdWP8SRjtoea3s66-cRyFZmMTNx4rqy2w5sjwegU_tbJyBesd0LCMmdtV"
ky
=
"AAPKe7cb1ab4f2ba44748cf53ac4f30d0caavu5t_-uMdWP8SRjtoea3s66-cRyFZmMTNx4rqy2w5sjwegU_tbJyBesd0LCMmdtV"
tkn
=
"3NKHt6i2urmWtqOuugvr9ZEfiuh0-3Amg_JW92hWw6MrRjQKzJfjBbFhwGtOqYD3IEnYsljGDxUWTXa4b2HGR9WawiS9jXoVzqX7qF3-y5y3jPSTTL5TYKO8tHiitpqK"
tkn
=
"3NKHt6i2urmWtqOuugvr9ZEfiuh0-3Amg_JW92hWw6MrRjQKzJfjBbFhwGtOqYD3IEnYsljGDxUWTXa4b2HGR9WawiS9jXoVzqX7qF3-y5y3jPSTTL5TYKO8tHiitpqK"
gis
=
GIS
(
token
=
tkn
,
api_key
=
ky
)
#
gis = GIS(token=tkn,api_key=ky)
#gis = GIS(api_key="AAPKe7cb1ab4f2ba44748cf53ac4f30d0caavu5t_-uMdWP8SRjtoea3s66-cRyFZmMTNx4rqy2w5sjwegU_tbJyBesd0LCMmdtV") # linked Bryson's pro account
#gis = GIS(api_key="AAPKe7cb1ab4f2ba44748cf53ac4f30d0caavu5t_-uMdWP8SRjtoea3s66-cRyFZmMTNx4rqy2w5sjwegU_tbJyBesd0LCMmdtV") # linked Bryson's pro account
gis
=
GIS
(
url
=
'https://virginiatech.maps.arcgis.com'
)
#New API does not work for api keys?
ap_meters
=
lat_lon2meters
(
anchor_point
[
0
],
anchor_point
[
1
])
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)
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
.
int32
)
scaled_extent
=
np
.
ceil
(
scale_factor
*
extent
)
.
astype
(
np
.
int32
)
#print("Making grid of size %d" % scaled_extent)
viz_cnt
=
0
viz_cnt
=
0
viz_map
=
np
.
zeros
([
scaled_extent
,
scaled_extent
,
len
(
name_list
)
+
len
(
inac_layers
)])
viz_cnt_inac
=
0
viz_map
=
np
.
zeros
([
scaled_extent
,
scaled_extent
,
len
(
name_list
)])
viz_map_inac
=
np
.
zeros
([
scaled_extent
,
scaled_extent
,
len
(
inac_layers
)])
for
i
,
url
in
enumerate
(
url_list
):
for
i
,
url
in
enumerate
(
url_list
):
...
@@ -62,6 +65,8 @@ def grab_features(anchor_point, extent, sample_dist = 10, case_name = 'blah', he
...
@@ -62,6 +65,8 @@ def grab_features(anchor_point, extent, sample_dist = 10, case_name = 'blah', he
bin_map
=
np
.
zeros
([
scaled_extent
,
scaled_extent
])
bin_map
=
np
.
zeros
([
scaled_extent
,
scaled_extent
])
inac_bin_map
=
np
.
zeros
([
scaled_extent
,
scaled_extent
])
inac_bin_map
=
np
.
zeros
([
scaled_extent
,
scaled_extent
])
#Array of rings and a spatial reference
#Docs - https://developers.arcgis.com/python/api-reference/arcgis.geometry.html
geom
=
arcgis
.
geometry
.
Polygon
({
'spatialReference'
:
{
"wkid"
:
3857
},
geom
=
arcgis
.
geometry
.
Polygon
({
'spatialReference'
:
{
"wkid"
:
3857
},
'rings'
:
[[
'rings'
:
[[
[
ap_meters
[
0
]
-
(
extent
/
2
),
ap_meters
[
1
]
+
(
extent
/
2
)],
[
ap_meters
[
0
]
-
(
extent
/
2
),
ap_meters
[
1
]
+
(
extent
/
2
)],
...
@@ -78,12 +83,19 @@ def grab_features(anchor_point, extent, sample_dist = 10, case_name = 'blah', he
...
@@ -78,12 +83,19 @@ def grab_features(anchor_point, extent, sample_dist = 10, case_name = 'blah', he
while
type
(
q
)
==
list
and
query_cnt
<=
30
:
# have to do this because arcgis is sketchy as hell and doesnt always come back
while
type
(
q
)
==
list
and
query_cnt
<=
30
:
# have to do this because arcgis is sketchy as hell and doesnt always come back
try
:
try
:
print
(
"querying {} layer..."
.
format
(
name_list
[
i
]))
print
(
"querying {} layer..."
.
format
(
name_list
[
i
]))
print
(
lyr
)
query_starttime
=
time
.
time
()
query_starttime
=
time
.
time
()
#Want to query where the geom filter aligns
q
=
lyr
.
query
(
return_count_only
=
False
,
return_ids_only
=
False
,
return_geometry
=
True
,
q
=
lyr
.
query
(
return_count_only
=
False
,
return_ids_only
=
False
,
return_geometry
=
True
,
out_sr
=
'3857'
,
geometry_filter
=
geom_filter
)
out_sr
=
'3857'
,
geometry_filter
=
geom_filter
)
#Catch ArcGIS authentication errors (problem was actually with input coords)
#except:
# print("Could not load layer")
# return
#lyr2 = FeatureLayer(url = 'https://carto.nationalmap.gov/arcgis/rest/services/transportation/MapServer/30', gis = gis)
#q2 = lyr2.query(return_count_only=False, return_ids_only=False, return_geometry=True,
#out_sr='3857', geometry_filter=geom_filter)
query_endtime
=
time
.
time
()
query_endtime
=
time
.
time
()
except
(
json
.
decoder
.
JSONDecodeError
,
TypeError
)
as
e
:
except
(
json
.
decoder
.
JSONDecodeError
,
TypeError
)
as
e
:
...
@@ -92,7 +104,7 @@ def grab_features(anchor_point, extent, sample_dist = 10, case_name = 'blah', he
...
@@ -92,7 +104,7 @@ def grab_features(anchor_point, extent, sample_dist = 10, case_name = 'blah', he
print
(
"error on query: {}"
.
format
(
e
))
print
(
"error on query: {}"
.
format
(
e
))
print
(
"{} layer failed on query, trying again ..."
.
format
(
name_list
[
i
]))
print
(
"{} layer failed on query, trying again ..."
.
format
(
name_list
[
i
]))
# gis.
# gis.
gis
=
GIS
(
api_key
=
"AAPKe7cb1ab4f2ba44748cf53ac4f30d0caavu5t_-uMdWP8SRjtoea3s66-cRyFZmMTNx4rqy2w5sjwegU_tbJyBesd0LCMmdtV"
)
# linked my arcgis pro account
gis
=
GIS
(
url
=
'https://virginiatech.maps.arcgis.com'
)
lyr
=
FeatureLayer
(
url
=
url
,
gis
=
gis
)
lyr
=
FeatureLayer
(
url
=
url
,
gis
=
gis
)
print
(
"query time {}"
.
format
(
query_endtime
-
query_starttime
))
print
(
"query time {}"
.
format
(
query_endtime
-
query_starttime
))
...
@@ -114,10 +126,11 @@ def grab_features(anchor_point, extent, sample_dist = 10, case_name = 'blah', he
...
@@ -114,10 +126,11 @@ def grab_features(anchor_point, extent, sample_dist = 10, case_name = 'blah', he
np
.
savetxt
(
fn
,
bin_map
,
delimiter
=
","
,
fmt
=
'
%
f'
)
np
.
savetxt
(
fn
,
bin_map
,
delimiter
=
","
,
fmt
=
'
%
f'
)
continue
continue
print
(
"{} layer sucessfully queried"
.
format
(
name_list
[
i
]))
print
(
"{} layer sucessfully queried"
.
format
(
name_list
[
i
]))
print
(
"
%
s layer has
%
d points"
%
(
name_list
[
i
],
len
(
q
.
features
)))
# re-build into list of x-y values
# re-build into list of x-y values
# feat_points = []
# feat_points = []
query_dict
=
q
.
to_dict
()
query_dict
=
q
.
to_dict
()
for
j
,
feat
in
enumerate
(
query_dict
[
'features'
]):
for
j
,
feat
in
enumerate
(
query_dict
[
'features'
]):
# print("starting feature {} ...".format(j))
# print("starting feature {} ...".format(j))
...
@@ -177,7 +190,7 @@ def grab_features(anchor_point, extent, sample_dist = 10, case_name = 'blah', he
...
@@ -177,7 +190,7 @@ def grab_features(anchor_point, extent, sample_dist = 10, case_name = 'blah', he
interp_endtime
=
time
.
time
()
interp_endtime
=
time
.
time
()
print
(
"{} interpolation took {}"
.
format
(
j
,
interp_endtime
-
interp_starttime
))
#
print("{} interpolation took {}".format(j,interp_endtime - interp_starttime))
x_pts
=
pts_interp
[
0
]
x_pts
=
pts_interp
[
0
]
y_pts
=
pts_interp
[
1
]
y_pts
=
pts_interp
[
1
]
...
@@ -242,47 +255,68 @@ def grab_features(anchor_point, extent, sample_dist = 10, case_name = 'blah', he
...
@@ -242,47 +255,68 @@ def grab_features(anchor_point, extent, sample_dist = 10, case_name = 'blah', he
# print("done with feature {}".format(j))
# print("done with feature {}".format(j))
# add to viz map
# add
inac feats
to viz map
if
name_list
[
i
]
in
inac_layers
:
if
name_list
[
i
]
in
inac_layers
:
viz_map
[:,
:,
viz_cnt
]
=
inac_bin_map
viz_map
_inac
[:,
:,
viz_cnt_inac
]
=
inac_bin_map
viz_cnt
=
viz_cnt
+
1
viz_cnt
_inac
=
viz_cnt_inac
+
1
if
save_files
:
if
save_files
:
if
save_to_folder
:
if
save_to_folder
:
fn
=
"./map_layers/"
+
case_name
+
"/"
+
name_list
[
i
]
+
"_inac_data_"
+
file_id
+
".csv"
fn
=
"./map_layers/"
+
case_name
+
"/"
+
name_list
[
i
]
+
"_inac_data_"
+
file_id
+
".csv"
os
.
makedirs
(
'./map_layers/'
+
case_name
+
'/'
,
exist_ok
=
True
)
np
.
savetxt
(
fn
,
inac_bin_map
,
delimiter
=
","
,
fmt
=
'
%
f'
)
np
.
savetxt
(
fn
,
inac_bin_map
,
delimiter
=
","
,
fmt
=
'
%
f'
)
else
:
else
:
fn
=
"./map_layers/"
+
name_list
[
i
]
+
"_inac_data_"
+
file_id
+
".csv"
fn
=
"./map_layers/"
+
name_list
[
i
]
+
"_inac_data_"
+
file_id
+
".csv"
np
.
savetxt
(
fn
,
inac_bin_map
,
delimiter
=
","
,
fmt
=
'
%
f'
)
np
.
savetxt
(
fn
,
inac_bin_map
,
delimiter
=
","
,
fmt
=
'
%
f'
)
#Add feats to viz map
viz_map
[:,
:,
viz_cnt
]
=
bin_map
viz_map
[:,
:,
viz_cnt
]
=
bin_map
viz_cnt
=
viz_cnt
+
1
viz_cnt
=
viz_cnt
+
1
if
save_files
:
if
save_files
:
if
save_to_folder
:
if
save_to_folder
:
fn
=
"./map_layers/"
+
case_name
+
"/"
+
name_list
[
i
]
+
"_data_"
+
file_id
+
".csv"
fn
=
"./map_layers/"
+
case_name
+
"/"
+
name_list
[
i
]
+
"_data_"
+
file_id
+
".csv"
os
.
makedirs
(
'./map_layers/'
+
case_name
+
'/'
,
exist_ok
=
True
)
np
.
savetxt
(
fn
,
bin_map
,
delimiter
=
","
,
fmt
=
'
%
f'
)
np
.
savetxt
(
fn
,
bin_map
,
delimiter
=
","
,
fmt
=
'
%
f'
)
else
:
else
:
fn
=
"./map_layers/"
+
name_list
[
i
]
+
"_data_"
+
file_id
+
".csv"
fn
=
"./map_layers/"
+
name_list
[
i
]
+
"_data_"
+
file_id
+
".csv"
np
.
savetxt
(
fn
,
bin_map
,
delimiter
=
","
,
fmt
=
'
%
f'
)
np
.
savetxt
(
fn
,
bin_map
,
delimiter
=
","
,
fmt
=
'
%
f'
)
# save linear features as numpy file
fn
=
'./map_layers/'
+
case_name
+
'/linear_feats'
np
.
save
(
fn
,
viz_map
)
print
(
"Created new LF file at
%
s"
%
fn
)
# save inac layers as numpy file
fn
=
'./map_layers/'
+
case_name
+
'/inac_layers'
np
.
save
(
fn
,
viz_map_inac
)
print
(
"Created new inac file at
%
s"
%
fn
)
# save terrain as csv file (this method is pretty slow, but can compensate with interp)
# save terrain as csv file (this method is pretty slow, but can compensate with interp)
[
e
,
e_interp
,
x
,
y
,
data
,
ll_pt
]
=
get_terrain_map
(
lat_lon
=
anchor_point
,
if
(
get_elev
):
sample_dist
=
sample_dist
,
print
(
"Getting terrain map, this will take a while...."
)
extent
=
extent
,
[
e
,
e_interp
,
x
,
y
,
data
,
ll_pt
]
=
get_terrain_map
(
lat_lon
=
anchor_point
,
heading
=
-
heading
)
# because flipping
sample_dist
=
sample_dist
,
extent
=
extent
,
if
save_files
:
heading
=
-
heading
)
# because flipping
if
save_to_folder
:
if
save_files
:
elv_filename
=
"./map_layers/"
+
case_name
+
"/elv_data_"
+
file_id
+
".csv"
if
save_to_folder
:
np
.
savetxt
(
elv_filename
,
e_interp
,
delimiter
=
","
,
fmt
=
'
%
f'
)
elv_filename
=
"./map_layers/"
+
case_name
+
"/elv_data_"
+
file_id
+
".csv"
else
:
np
.
savetxt
(
elv_filename
,
e_interp
,
delimiter
=
","
,
fmt
=
'
%
f'
)
elv_filename
=
"./map_layers/elv_data_"
+
file_id
+
".csv"
else
:
np
.
savetxt
(
elv_filename
,
e_interp
,
delimiter
=
","
,
fmt
=
'
%
f'
)
elv_filename
=
"./map_layers/elv_data_"
+
file_id
+
".csv"
np
.
savetxt
(
elv_filename
,
e_interp
,
delimiter
=
","
,
fmt
=
'
%
f'
)
#Save plots of layers
plot_dir
=
'./map_layers/'
+
case_name
+
'/'
plot_name
=
''
if
plot_data
:
if
plot_data
:
plt
.
imshow
(
e_interp
)
if
(
get_elev
):
plt
.
show
()
t
=
'Elevation '
+
case_name
plt
.
title
(
t
)
plt
.
imshow
(
e_interp
)
plot_name
=
plot_dir
+
'elevation_'
+
case_name
plt
.
savefig
(
plot_name
)
plt
.
close
()
#plt.show()
# plt_list = []
# plt_list = []
# fix stupid names
# fix stupid names
...
@@ -294,9 +328,20 @@ def grab_features(anchor_point, extent, sample_dist = 10, case_name = 'blah', he
...
@@ -294,9 +328,20 @@ def grab_features(anchor_point, extent, sample_dist = 10, case_name = 'blah', he
# flip y values
# flip y values
# col_idx = viz_map.shape[0] - col_idx
# 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]))
# plt_list.append(go.Scatter(x=row_idx, y=col_idx, mode='markers', name=name_list[i]))
t
=
name_list
[
i
]
+
" "
+
case_name
plt
.
title
(
t
)
plt
.
imshow
(
viz_map
[:,:,
i
])
plt
.
imshow
(
viz_map
[:,:,
i
])
# plt.title(name_list[i])
plot_name
=
plot_dir
+
name_list
[
i
]
+
'_features'
plt
.
show
()
plt
.
savefig
(
plot_name
)
plt
.
close
()
for
i
in
range
(
viz_map_inac
.
shape
[
-
1
]):
t
=
"Inacessible "
+
inac_layers
[
i
]
+
" "
+
case_name
plt
.
title
(
t
)
plt
.
imshow
(
viz_map_inac
[:,:,
i
])
plot_name
=
plot_dir
+
'inac_'
+
inac_layers
[
i
]
plt
.
savefig
(
plot_name
)
plt
.
close
()
# fig = go.Figure(data=plt_list)
# fig = go.Figure(data=plt_list)
# fig.show()
# fig.show()
...
...
lpm_maps.py
View file @
32b71c53
import
numpy
as
np
import
numpy
as
np
import
matplotlib
import
matplotlib
import
matplotlib.pyplot
as
plt
import
matplotlib.pyplot
as
plt
import
os
from
os
import
path
,
getcwd
from
scipy.cluster.vq
import
kmeans
,
whiten
from
scipy.cluster.vq
import
kmeans
,
whiten
from
scipy.io
import
loadmat
from
scipy.io
import
loadmat
import
pandas
as
pd
import
pandas
as
pd
import
arcgis.geometry
from
arcgis.gis
import
GIS
from
arcgis.features
import
FeatureLayer
from
arcgis_terrain
import
get_terrain_map
,
lat_lon2meters
from
arcgis_terrain
import
get_terrain_map
,
lat_lon2meters
from
feature_set
import
grab_features
from
feature_set
import
grab_features
...
@@ -12,6 +17,66 @@ from feature_set import grab_features
...
@@ -12,6 +17,66 @@ from feature_set import grab_features
#Script made to create a set of SAR datasets.
#Script made to create a set of SAR datasets.
#Used to test map layers, make sure we can access content.
def
gis_test
():
#Lost Person Model content
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"
trails_url
=
"https://partnerships.nationalmap.gov/arcgis/rest/services/USGSTrails/MapServer/0"
url_list
=
[
riverw_url
,
river_url
,
roads_url
,
water_url
,
powerlines_url
,
railroads_url
,
trails_url
]
#ESRI account information...
ky
=
"AAPKe7cb1ab4f2ba44748cf53ac4f30d0caavu5t_-uMdWP8SRjtoea3s66-cRyFZmMTNx4rqy2w5sjwegU_tbJyBesd0LCMmdtV"
user
=
'blhowell@vt.edu'
pw
=
'5ZWt5
%#
FEm5&)@v'
url
=
'https://virginiatech.maps.arcgis.com'
c_id
=
'WIXoel276NxsLWI5'
#gis = GIS(url, client_id=c_id)
#print("Successfully logged in as: " + gis.properties.user.username)
gis
=
GIS
(
url
)
#Display map tutorial
map
=
gis
.
map
()
map
.
basemap
=
"topo-vector"
map
.
center
=
[
34.027
,
-
118.805
]
map
.
zoom
=
13
#Load the feature layer
river_layer
=
FeatureLayer
(
river_url
,
gis
=
gis
)
print
(
river_layer
)
print
(
river_layer
.
properties
.
capabilities
)
map
.
add_layer
(
river_layer
)
#See fields
for
f
in
river_layer
.
properties
.
fields
:
print
(
f
[
'name'
])
#Now, query it...
print
(
'Starting query....'
)
q
=
river_layer
.
query
(
where
=
'lengthkm>50'
,
out_fields
=
'flowdir,gnis_name'
)
print
(
len
(
q
.
features
))
#q = river_layer.query(return_count_only=False, return_ids_only=False, return_geometry=True,
# out_sr='3857', result_record_count = 10)
print
(
'query finished!!'
)
#Get map to export to html file. Unfortunately this is all useless...
export_dir
=
'./arcgis_maps/display_test.html'
map
.
export_to_html
(
export_dir
,
title
=
"Testing ArcGIS"
)
print
(
"Map created at
%
s"
%
export_dir
)
return
#Formats data into a csv that can be loaded as a Pandas dataframe.
#Formats data into a csv that can be loaded as a Pandas dataframe.
#Finds incident keys for LPM fit data
#Finds incident keys for LPM fit data
def
incident_list
():
def
incident_list
():
...
@@ -48,14 +113,70 @@ def incident_list():
...
@@ -48,14 +113,70 @@ def incident_list():
#print(new_df.columns)
#print(new_df.columns)
return
return
#Save collected map layers into one file
def
format_terrain
():
#For LPM, we need a map with inacessible features, linear features, and elevation all of same size
#Save as one matrix, (inac, lf, elev)
return
#My way of checking matlab datasets without using matlab
#My way of checking matlab datasets without using matlab
def
investigate
():
def
investigate
():
dir
=
'./matlab_data/'
name_list
=
[
'rivers_bdd'
,
'rivers'
,
'roads'
,
'lakes'
,
'powerlines'
,
'railroads'
,
'trails'
]
inac_layers
=
[
'rivers_bdd'
,
'lakes'
]
############## For comparing to previously collected Matlab data #################
dir
=
'../ags_grabber/matlab_data/'
savedir
=
'./plots_test/'
savedir
=
'./plots_test/'
filename
=
'BW_LFandInac_Zelev_kentland.mat'
filename
=
'BW_LFandInac_Zelev_kentland.mat'
matdict
=
loadmat
(
dir
+
filename
,
appendmat
=
False
)
matdict
=
loadmat
(
dir
+
filename
,
appendmat
=
False
)
#Testing stuff
k
=
matdict
.
keys
()
print
(
k
)
#These are square numpy arrays of equal size
elev
=
matdict
[
'sZelev'
]
#Values are height of grid cell (in meters)
linfeat
=
matdict
[
'BWLF'
]
#Values are 1 for linear feature present, 0 for none
obstacles
=
matdict
[
'BWInac'
]
#Values are 1 for obstacle, 0 for clear
print
(
np
.
shape
(
elev
))
#############################################################################################
#Load file made by feature_set
lf_dir
=
'./map_layers/test2/'
lf_file
=
'linear_feats.npy'
inac_file
=
'inac_layers.npy'
layers
=
np
.
load
(
lf_dir
+
lf_file
)
inac
=
np
.
load
(
lf_dir
+
inac_file
)
elev
=
np
.
loadtxt
(
'./map_layers/trust/elv_data_1.csv'
,
delimiter
=
','
)
#Testing content of linear feature file
print
(
"Layer matrix shape = "
)
print
(
np
.
shape
(
layers
))
print
(
layers
[
0
][
0
][
0
])
print
(
"Inacessible matrix shape = "
)
print
(
np
.
shape
(
inac
))
print
(
inac
[
0
][
0
][
0
])
print
(
'Elev matrix shape = '
)
print
(
np
.
shape
(
elev
))
#6000 x 6000. Got this using res of 25, not 10...
print
(
elev
[
0
][
0
])
#Make sure we can translate start / end grid cells...
return
return
...
@@ -63,17 +184,18 @@ def investigate():
...
@@ -63,17 +184,18 @@ def investigate():
#Also make images to show where areas are.
#Also make images to show where areas are.
def
collect_terrain
():
def
collect_terrain
():
extent_download
=
10
0000
#Size of maps to dowload, in meters (big...)
extent_download
=
4
0000
#Size of maps to dowload, in meters (big...)
extent_test
=
20000
#Size of experiment area. 20km = 3000 grid cells
extent_test
=
20000
#Size of experiment area. 20km = 3000 grid cells
n_clusters
=
10
#Number of areas to download
n_clusters
=
10
#Number of areas to download
count_thres
=
2
#Minimum number of points needed for a large download
count_thres
=
3
#Minimum number of points needed for a large download
#Parameters for feature_set
#Parameters for feature_set
res
=
25
res
=
25
folder
=
'
trus
t'
folder
=
'
ini
t'
#Collection of map centers, in meters. Use to check if we need to download a new area
#Collection of map centers, in meters. Use to check if we need to download a new area
ipp_list
=
[]
ipp_list
=
[]
ipp_lat_list
=
[]
#Used to group search incidents in the same area together. Added to DF at end
#Used to group search incidents in the same area together. Added to DF at end
keys
=
[]
keys
=
[]
...
@@ -131,6 +253,7 @@ def collect_terrain():
...
@@ -131,6 +253,7 @@ def collect_terrain():
#See if we need to download a new map
#See if we need to download a new map
if
(
len
(
ipp_list
)
==
0
):
if
(
len
(
ipp_list
)
==
0
):
ipp_list
.
append
(
ipp_xy
)
ipp_list
.
append
(
ipp_xy
)
ipp_lat_list
.
append
(
ipp_point
)
keys
.
append
(
len
(
ipp_list
)
-
1
)
keys
.
append
(
len
(
ipp_list
)
-
1
)
else
:
else
:
#Find nearest downloaded center point
#Find nearest downloaded center point
...
@@ -147,34 +270,53 @@ def collect_terrain():
...
@@ -147,34 +270,53 @@ def collect_terrain():
if
(
not
(
topedge
and
botedge
and
rightedge
and
leftedge
)):
if
(
not
(
topedge
and
botedge
and
rightedge
and
leftedge
)):
#print("Downloading new map")
#print("Downloading new map")
ipp_list
.
append
(
ipp_xy
)
ipp_list
.
append
(
ipp_xy
)
ipp_lat_list
.
append
(
ipp_point
)
keys
.
append
(
len
(
ipp_list
)
-
1
)
keys
.
append
(
len
(
ipp_list
)
-
1
)
#Add key to incident locations so we know the general area
#Add key to incident locations so we know the general area
else
:
else
:
keys
.
append
(
closest
)
keys
.
append
(
closest
)
print
(
"Found
%
d maps to collect."
%
len
(
ipp_list
))
print
(
"Found
%
d maps to collect."
%
len
(
ipp_list
))
print
(
keys
)
print
(
keys
)
print
(
ipp_list
)
#
print(ipp_list)
print
(
ipp_list
[
0
][
0
])
#
print(ipp_list[0][0])
#Add group keys to dataframe
#Add group keys to dataframe
incidents
.
insert
(
0
,
'area'
,
keys
)
incidents
.
insert
(
0
,
'area'
,
keys
)
#GIS is not working. Instead, look through matlab_data for matching IPP
matdir
=
'../ags_grabber/matlab_data/'
directory
=
os
.
fsencode
(
matdir
)
fname
=
'BW_LFandInac-Zelev_[]'
#iterate through files in directory
#for file in os.listdir(directory):
#see if latitude matches
# for ilat in range(0,latlons.shape(0)):
# print(latlons[i][0])
#See if longitude matches
#Now, if there's only one key in an area we can avoid downloading a lot.
#Now, if there's only one key in an area we can avoid downloading a lot.
#Need to ouput data in a way that indicates if an IPP is a big area or not...
#Need to ouput data in a way that indicates if an IPP is a big area or not...
max_down
=
1
#Maximum number of things to download
max_down
=
3
#Maximum number of things to download
count
=
0
count
=
0
do_plot
=
True
do_plot
=
True
for
i
in
range
(
0
,
len
(
ipp_list
)):
do_elev
=
True
print
(
"Collecting GIS data
%
d/
%
d"
%
(
i
,
len
(
ipp_list
)))
for
i
in
range
(
0
,
len
(
ipp_lat_list
)):
print
(
"Collecting GIS data
%
d/
%
d"
%
(
i
,
len
(
ipp_lat_list
)))
#Download local map
#Download local map
if
(
keys
.
count
(
i
)
<=
count_thres
):
if
(
keys
.
count
(
i
)
<=
count_thres
):
size
=
extent_test
size
=
extent_test
else
:
size
=
extent_download
if
(
count
<
max_down
):
if
(
count
<
max_down
):
count
=
count
+
1
count
=
count
+
1
grab_features
(
ipp_list
[
i
],
extent_download
,
sample_dist
=
res
,
case_name
=
folder
,
save_files
=
True
,
save_to_folder
=
True
,
file_id
=
str
(
count
),
plot_data
=
do_plot
)
print
(
'Getting initial point - '
)
print
(
ipp_lat_list
[
i
])
folder
=
"init_"
+
str
(
i
)
grab_features
(
ipp_lat_list
[
i
],
size
,
sample_dist
=
res
,
case_name
=
folder
,
save_files
=
True
,
save_to_folder
=
True
,
file_id
=
str
(
i
),
plot_data
=
do_plot
,
get_elev
=
do_elev
)
else
:
size
=
extent_download
#For visualizing
#For visualizing
draw
=
True
draw
=
True
...
@@ -226,7 +368,10 @@ def main():
...
@@ -226,7 +368,10 @@ def main():
extent
=
3000
#size in meters of map area
extent
=
3000
#size in meters of map area
#incident_list()
#incident_list()
#gis_test()
collect_terrain
()
collect_terrain
()
#investigate()
return
return
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment