Zeb*_*ebs 44
TL; DR:使用Shapely
您将在本文末尾找到此代码:
import json
from shapely.geometry import shape, Point
# depending on your version, use: from shapely.geometry import shape, Point
# load GeoJSON file containing sectors
with open('sectors.json') as f:
js = json.load(f)
# construct point based on lon/lat returned by geocoder
point = Point(-122.7924463, 45.4519896)
# check each polygon to see if it contains the point
for feature in js['features']:
polygon = shape(feature['geometry'])
if polygon.contains(point):
print 'Found containing polygon:', feature
Run Code Online (Sandbox Code Playgroud)
使用这些类型数据的一个很好的选择是PostGIS,它是PostgreSQL的空间数据库扩展器.我亲自将我的所有地理数据保存在PostGIS数据库中,然后使用python在python中引用它psycopg2
.我知道它不是纯粹的python,但它在纯python上有令人难以置信的性能优势(如下所述).
PostGIS具有内置功能,以确定点或形状是否在另一个形状内.关于ST_Within函数的优秀文档扩展了这个简单的例子:
SELECT
ST_WITHIN({YOUR_POINT},boundary)
FROM census;
-- returns true or false for each of your tracts
Run Code Online (Sandbox Code Playgroud)
您可能从其他地方获得的PostGIS中获得的好处是索引,这可以提高您的速度1,000x [1],使其比最好的书面C程序更好(除非C程序还创建了一个索引你的数据).正确设置后,数据库将缓存有关您的小册子的信息,当您询问某个点是否在某个区域内时,它不必搜索所有内容......它可以利用它的索引.
将数据输入和输出PostGRES非常简单.您可以在此处找到一个很棒的教程,它将引导您完成PostGIS的基础知识,其中的样本数据集与您的样本数据集并无太大差异.这是相当长的,但如果你是PostGIS的新手(就像我一样),你会一直很受欢迎和兴奋:
http://workshops.boundlessgeo.com/postgis-intro/
[1]索引减少了我的一个巨大数据库中的最近邻搜索(从53秒到8.2毫秒20米).
归档时间: |
|
查看次数: |
17336 次 |
最近记录: |