缩放 GeoJSON 以查找附近的经纬度点

问题描述

我正在尝试使用 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 rendered to show problem with scaling

上图是原始 GeoJSON(深灰色)和附近 GeoJSON(浅灰色)的表示。 普尔上方(地图上)的边界对两者来说是相同的。我认为这是因为边界在其缩放的中心点上方。

我想要实现的是对 polygon_nearby 进行缩放,以便所有边界都比原始 polygon 中的边界或在所描述的区域附近查找纬度和经度点的任何其他方法更大在原始 GeoJSON 中。

解决方法

我想出来了:

polygon_nearby = polygon.buffer(0.1)

enter image description here