问题描述
我正在尝试使用 shapely 缩放 GeoJSON 多边形(只要我可以在 AWS Lambda 函数上运行它,任何其他方法都可以)。我的目标是在 GeoJSON 中描述的区域附近找到纬度和经度点。 GeoJSON 文件变化的一个例子是:
{"type": "FeatureCollection","features": [{"type": "Feature","properties": {},"geometry": {"type": "Multipolygon","coordinates": [[[[-1.4502,51.2757],[-1.7798,51.3443],[-3.7793,50.9446],[-5.2515,50.8059],[-5.4053,50.6947],[-5.6689,50.3455],50.3034],[-5.5371,50.2332],[-4.5923,50.2191],[-3.7134,[-3.4058,50.4855],[-2.3511,[-1.7139,50.8198],[-1.626,50.8476],[-1.4502,51.0276],51.2757]]]]}}]}
我目前拥有的代码是:
import json
from shapely import affinity
from shapely.geometry import shape,Point,mapping
def handler(event,context):
with open('polygon.json') as f:
js = json.load(f)
polygon = shape(js['features'][0]['geometry'])
polygon_nearby = affinity.scale(polygon,xfact=1.1,yfact=1.1)
print(json.dumps({"type": "FeatureCollection",'properties': {},'geometry': mapping(polygon)}]}))
print(json.dumps({"type": "FeatureCollection",'geometry': mapping(polygon_nearby)}]}))
for point in [(-1.7798,51.3442),(-1.7798,51.3444),(-1.4504,51.27),(-1.4503,51.28)]:
if polygon.contains(Point(point)):
print('Found point in polygon',point)
elif polygon_nearby.contains(Point(point)):
print('Found point nearby',point)
else:
print("Not found",point)
if __name__ == '__main__':
handler(None,None)
问题是当多边形缩放时,它当前是从中心点缩放的。中心点上方的边界未缩放,如下图所示:
上图是原始 GeoJSON(深灰色)和附近 GeoJSON(浅灰色)的表示。 普尔上方(地图上)的边界对两者来说是相同的。我认为这是因为边界在其缩放的中心点上方。
我想要实现的是对 polygon_nearby
进行缩放,以便所有边界都比原始 polygon
中的边界或在所描述的区域附近查找纬度和经度点的任何其他方法更大在原始 GeoJSON 中。