本文是街景影像分析入门的第一篇文章。
在这边文章中,我将教会你如何**处理路网数据、生成采样点、访问百度地图API获取街景影像
如果这篇文章对你有帮助,欢迎点赞(而不仅仅是收藏)
**。
路网数据预处理
这里使用从OSM获取的路网生成采样点,如何获取可以自行查询学习一下, 资料很多。从OSM获取的路网可能充满匝道、双线道路。如果直接使用这样的道路获取街景,可能获取大量的重复影像。为此,需要尽可能简化路网。
路网投影
后续步骤的工具要求数据带有投影坐标,而OSM的WGS1984是地理坐标系。使用【投影】工具将路网投影至某种投影坐标系。我一般投影至Web Mercator坐标系。
道路筛选
从OSM获取的路网包括了步道、自行车道等在街景影像获取中无用的道路。使用ArcGIS的按属性筛选功能,根据fclass删去不需要的类别即可。我个人一般保留以下类别的道路。
- living street
- primary
- primary link
- residential
- secondary
- secondary link
- service
- trunk
- trunk link
拆分多部件要素
使用ArcGIS工具【拆分多部件要素】即可
打断所有的相交道路
启动编辑器,唤出【高级编辑】。
选中研究区的所有道路,打断相交线,保存。
简化道路
设置好道路文件路径后,使用以下代码,可以对道路进行简化。简单来说,就是进行【合并双线道路】、【稀疏化路网】和【删除悬挂街道】三步
import arcpy
input_road = r"./yt2022.gdb/ytroad"#输入
merged_road = r"./yt2022.gdb/roadMerge"#中间数据,处理后可删
thinned_road = r"./yt2022.gdb/roadThin"#中间数据,处理后可删
output_road = r"./yt2022.gdb/roadSimple"#简化后的道路
# 合并双线道路
arcpy.MergeDividedRoads_cartography(input_road, "level", "30 meters", merged_road)
# 删除复杂短街道
arcpy.AddField_management(merged_road, "visibility", "SHORT")
arcpy.CalculateField_management(merged_road, "visibility", 0)
arcpy.AddField_management(merged_road, "level", "SHORT")
arcpy.CalculateField_management(merged_road, "level", 1)
arcpy.ThinRoadNetwork_cartography(merged_road, "50 meters", "visibility", "level")
arcpy.SelectLayerByAttribute_management(merged_road, "NEW_SELECTION", '"visibility" = 0')
arcpy.CopyFeatures_management(merged_road, thinned_road)
# 删除悬挂街道
arcpy.TrimLine_edit(thinned_road, "50 meters", "DELETE_SHORT")
# 重新转回WGS84坐标
arcpy.Project_management(thinned_road, output_road, arcpy.SpatialReference(4326))
采样点生成
使用【沿线生成点】工具,输入路网,设置距离,得到采样点。一般采用50或100米采样点,视目标区域的大小而定。特别小的区域也可以使用30米采样点(但不推荐)。
使用【添加XY坐标工具】将XY坐标信息添加到点的属性表中。
最后【导出表】,注意保存为csv格式(而不是默认的dbf格式)。
最后可以得到类似这样的采样点csv文件。