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