我正在开展一个项目,每隔一段时间我就会保存一辆车的Latitude和Longuite。我还有一个路由保存为gps坐标数组。所以我想知道是否有一些库,这有助于我知道一个点是否在路径内以及其他基本计算中,坐标为ex的距离计算。 任何语言的任何工具都有帮助!
答案 0 :(得分:1)
根据您的评论,由于您未构建典型的互联网地图,我可能会建议您结合使用Python和Shapely库。您可以看到一些nice examples on this post over at GIS.SE。
GIS分析:几何类型,缓冲,交集等
为了将多个单独的纬度/经度位置视为"路线",您需要将它们格式化为LineString几何类型中的点。另外要小心:在大多数GIS软件中,点排列为X,Y。这意味着您将点数添加为Long,Lat。反转这是一个常见的错误,如果您不了解它,可能会令人沮丧。
接下来,为了测试您的路线中是否有任何给定点,您需要 Buffer 您的路线(LineString)。我会使用GPS装置的准确度,+几个额外的米,作为我的缓冲半径。这将为您提供适当的几何体(多边形),用于多边形点测试(即Intersection),该测试将计算给定点是否在路径范围内。
我链接的GIS.SE帖子提供了使用Python和Shapely进行缓冲和交叉的示例。
关于坐标的一些注释:大地测量与笛卡尔
我不确定Shapely是否会对大地测量数据进行可靠的计算,这就是我们所说的从GPS获得的熟悉坐标。在使用Shapely进行操作之前,可能需要将长/纬度点转换为投影的X / Y坐标以获得适当的坐标系,例如UTM等。(希望有人会评论是否有必要) 。)
假设 是必要的,您可以添加PyProj库,以便在您拥有的GPS坐标和所需的笛卡尔坐标之间架起一座桥梁。 PyProj是解决这个问题的通用解决方案。但是要if UTM coordinates will work you might find the library cited here to be easier来实现。
如果您决定使用PyProj,将有助于了解您的GPS数据由EPSG:4326坐标系描述。如果您对投影坐标的UTM感到满意,则需要确定适合您所在区域的UTM区域,并从SpatialReference.org获取其Proj4坐标定义。
例如我居住在美国南卡罗来纳州,即UTM 17 North。因此,如果我访问SpatialReference.org,搜索" EPSG UTM zone 17N",请选择引用" WGS 1984"的the option。 (我碰巧知道这意味着以米为单位的单位),然后点击the Proj4 link,该网站提供了我在Proj4表示法后的坐标系定义:
+proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs
如果您不习惯潜入坐标系统,EPSG代码,Proj4字符串等世界,您可能希望支持我之前提到的alternate coordinate translation library而不是PyProj。另一方面,如果您将受益于更加本地化的坐标系统(大多数国家/地区都有自己的本地化系统),或者如果您需要保持代码可移植以便在许多领域中使用,我建议您使用PyProj并制作一定要将Proj4定义字符串保存在配置文件中,而不要在整个应用程序中进行硬编码!