我有一个map.geojson
文件,其中包含各个城市的区域边界。
如何计算由(纬度,经度)给出的点的区域?
答案 0 :(得分:1)
你可以解析geojson并提取点/坐标
import json
data = json.loads(datastring)
data['features'][0]['geometry'] #Your first point
(How can I parse GeoJSON with Python)
使用json库加载GeoJSON文件时,会得到一个dict 包含条目功能,其中包含功能列表。 每个特征又由一个字典组成,其中包括: 包含一个条目几何。几何是包含的几何 条目类型和坐标。所以你可以遍历你的GeoJSON文件 像这样:
import json
with open('test.json') as f:
data = json.load(f)
for feature in data['features']:
print feature['geometry']['type']
print feature['geometry']['coordinates']
(https://gis.stackexchange.com/questions/73768/how-to-convert-geojson-to-python-objects)
现在您已经使用坐标/点创建了一个多边形,以获得城市边界的几何表示:How to create a Polygon given its Point vertices?
点在多边形
现在您有一个多边形,确定一个点是否在其中 很容易有两种方法可以做到。
`point.within(polygon)` `polygon.contains(point)`
point应该是Point类的实例,而poly当然是 Polygon的一个实例。 in和contains是每个的相反 另外,所以你使用哪种方法完全取决于你。
https://streamhacker.com/2010/03/23/python-point-in-polygon-shapely/
in shapely是一个处理点的特定类,只有在此类中表示的点才能在point.within(polygon)
中起作用
和polygon.contains(point)
函数。
点类型由Point类实现;曲线由 LineString和LinearRing类;并由Polygon类表面。 形状上不实现平滑(即具有连续切线)曲线。 所有曲线必须用线性样条近似。所有圆形补丁 必须用由线性样条限定的区域近似。
(https://toblerity.org/shapely/manual.html)
因此您必须使用小数lat
,lon
值并将其插入到匀称的点类中:
from shapely.geometry import Point
point = Point(0.0, 0.0)
q = Point((0.0, 0.0))
(https://toblerity.org/shapely/manual.html#points)
使用此point.within(polygon)
和polygon.contains(point)
函数将有效...