2024-06-07 08:41:14 发布
网友
是否有一个Python模块,我可以在其中创建具有地理位置坐标(经纬度)的对象,并查询距离给定坐标5km(即半径)范围内的所有对象?
我一直试图将纬度和经度作为关键字存储在字典中(因为它们是按关键字索引的),并使用一些距离查找算法来查询它们。但这感觉像是一个可怕的黑客。
基本上类似PostgreSQL的PostGIS,但都在Python应用程序的内存中。
我知道这并不完全是您的意思,但是您可以对内存中的SQLite数据库使用GeoDjango。它是一整套作为Web应用程序公开的GIS工具,这使得它成为快速开发GIS应用程序的瑞士军刀,特别是用于小型的特殊查询。
是的,试试geopy。
import geopy import geopy.distance pt1 = geopy.Point(48.853, 2.349) pt2 = geopy.Point(52.516, 13.378) dist = geopy.distance.distance(pt1, pt2).km # 878.25
之后,您可以查询点列表:
[pt for pt in points if geopy.distance.distance(orig, pt).km < 5.]
在GIS中,通常的方法是在感兴趣的点周围创建一个缓冲区并查询交叉点。正如@RyanDalton所建议的,如果你打算做很多地理定位的工作,可以使用Shapely,Python的GIS API。了解Shapely很好,即使您仍然需要空间索引(见下文)。下面是如何在Shapely中创建缓冲区:
distance = 3 center = Point(1, 1) pts = [Point(1.1, 1.2),Point(1.2,1.2)] center_buf = a.buffer(distance) #filters the points list according to whether they are contained in the list contained = filter(center_buf.contains,pts)
如果你没有很多点,你可以自己索引你的点(比如说经度)。否则也可以使用Rtree包,检查名为Using Rtree as a cheapo spatial database的链接!
我知道这并不完全是您的意思,但是您可以对内存中的SQLite数据库使用GeoDjango。它是一整套作为Web应用程序公开的GIS工具,这使得它成为快速开发GIS应用程序的瑞士军刀,特别是用于小型的特殊查询。
是的,试试geopy。
之后,您可以查询点列表:
在GIS中,通常的方法是在感兴趣的点周围创建一个缓冲区并查询交叉点。正如@RyanDalton所建议的,如果你打算做很多地理定位的工作,可以使用Shapely,Python的GIS API。了解Shapely很好,即使您仍然需要空间索引(见下文)。下面是如何在Shapely中创建缓冲区:
如果你没有很多点,你可以自己索引你的点(比如说经度)。否则也可以使用Rtree包,检查名为Using Rtree as a cheapo spatial database的链接!
相关问题 更多 >
编程相关推荐