首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于存储和查询地理坐标的Python模块

用于存储和查询地理坐标的Python模块
EN

Stack Overflow用户
提问于 2012-01-31 19:31:44
回答 7查看 11.1K关注 0票数 18

有没有一个Python模块,我可以在其中创建具有地理位置坐标(纬度和经度)的对象,并在所有对象中查询距离给定坐标5 5km (即半径)的对象?

我一直在尝试将纬度和经度作为键存储在字典中(因为它们是通过键进行索引的),并使用一些距离查找算法来查询它们。但这感觉像是一次可怕的黑客攻击。

本质上类似于PostgreSQL的PostGIS,但都在我的Python应用程序的记忆中。

EN

回答 7

Stack Overflow用户

发布于 2012-01-31 19:36:38

是的,试试geopy

代码语言:javascript
复制
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

之后,您可以查询您的点列表:

代码语言:javascript
复制
[pt for pt in points if geopy.distance.distance(orig, pt).km < 5.]
票数 20
EN

Stack Overflow用户

发布于 2012-01-31 20:00:15

我知道这不是您想要的,但是您可以将GeoDjango与内存中的SQLite数据库一起使用。它是作为Web应用程序公开的一整套GIS工具,这使其成为快速开发GIS应用程序的瑞士军刀,特别是用于小型即席查询。

票数 5
EN

Stack Overflow用户

发布于 2012-02-01 21:53:18

在GIS中,通常的方法是在兴趣点周围创建缓冲区并查询交叉点。正如@RyanDalton建议的那样,如果你计划做很多地理定位的事情,使用Shapely,GIS API for Python。即使你仍然想要一个空间索引(见下文),了解Shapely也是很好的。下面是如何在Shapely中创建缓冲区:

代码语言:javascript
复制
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的链接!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9078776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档