想象一下,我有一个地图形状文件 (.shp) 或 osm xml,我可以在面向 GIS 的程序(例如 ArcGIS、QGIS 等)中查看来自不同图层的不同类型的数据。但是我如何以编程方式获取这些信息?有专门的图书馆吗?我真正在寻找的是某种方法getMapData(longitude, latitude)来获取指定位置的景观/地形信息(例如森林、河流、城市、高速公路)
提前感谢您的回答!
想象一下,我有一个地图形状文件 (.shp) 或 osm xml,我可以在面向 GIS 的程序(例如 ArcGIS、QGIS 等)中查看来自不同图层的不同类型的数据。但是我如何以编程方式获取这些信息?有专门的图书馆吗?我真正在寻找的是某种方法getMapData(longitude, latitude)来获取指定位置的景观/地形信息(例如森林、河流、城市、高速公路)
提前感谢您的回答!
Shapefile 或 osm xml 文件只是保存几何形状的容器。有很多软件库可以让您读取这些文件并提取数据。我建议将GDAL/OGR作为起点。
像getMapData(longitude, latitude)这样的方法本质上是一个搜索/查询函数。您还需要更具体一点,您是否想要包含该点的几何图形,是否在某个点的距离内等?
您可以使用蛮力算法找到地图数据
for shape in shapefile:
if shape.contains(query_point):
return shape
或者您可以使用更高级的算法/数据结构,例如 RTrees、KDTrees、QuadTrees 等。开始查询地图数据的最简单方法是将其加载到空间数据库中。我建议调查PostgreSQL+PostGIS和SpatiaLite
使用栅格数据还是矢量数据更好,这仍然取决于您想要实现的目标。
如果您使用网格将区域细分为地理特征的容器数组,请坚持使用矢量数据。为此,我将创建一个多边形网格文件并将其与您的每个数据层相交。然后,您可以添加一个 ID 字段,该字段表示单元格在数组中的位置(因此它是相对于已知纬度/经度坐标的相对位置 - 比如说左下角)。或者,您可以使用空间查询来访问您的数据,方法是在矢量网格文件中选择一个多边形,然后在其他文件中查找它包含的所有要素。
OTOH,如果您想根据存在/不存在进行一些多特征分析,那么您最好沿着栅格分析的路线进行。你所说的我的直觉是,这就是你想要实现的目标,但我仍然不能 100% 确定。您可以通过创建一组具有合适分辨率的布尔栅格然后对集合执行数学运算(加、减、平均等 - 取决于您提出的问题)来处理这个问题。
假设您正在研究动物迁徙。假设您的模型假设溪流、树篱和城镇都是迁移的障碍,但道路只会减少穿过某个区域的机会。因此,在每种情况下,您都将障碍物转换为“1”值,并将 NoData 转换为“0”,但您决定将值设置为 0.5 的道路除外。然后,您可以将所有栅格添加到一个大堆栈中并预测迁移路线。
好的,这是一个简单的例子,但也许你可以明白为什么我们需要更多关于你想要做什么的信息。
您可能还想查看Spatialite和/或PostGIS,它们是两个启用空间的数据库,您可以单独使用或与 GDAL/OGR 结合使用。
我必须回应查尔斯的要求,即您更详细地解释您的用例,因为实际实施将很大程度上取决于您想要实现的目标。我对此的解读是,您可能希望将数据转换为一系列对齐的栅格,您可以将其叠加并视为 3 维数组。