我正在使用python和geojson进行此操作,我想指定一个点,并且该点将是正方形的中心,假设正方形是1英里乘1英里,我想列出所有在正方形,包括大于正方形的多边形。
我有多个geojson文件,因此需要进行几次检查,这很好。我一直在玩下面的代码,该代码检查单元格中心是否在正方形的中心附近,但是会遇到形状奇异的多边形的问题。我真的很想知道广场上所有的物品/功能。
import json
from shapely.geometry import shape, Point
from shapely.geometry import asShape, mapping
point = Point(14.9783266342289, 16.87265432621112)
max_distance_from_center = 1
with open('cells.geojson') as f:
js = json.load(f)
for feature in js['features']:
polygon = asShape(feature['geometry'])
distance = point.distance(polygon.centroid)
# print(f'{distance} - {polygon.centroid}')
if distance < max_distance_from_center:
print (f'Found cells containing polygon:{feature}')
对于源数据,我正在使用从https://azgaar.github.io/Fantasy-Map-Generator/导出的地图,网格应为10英里乘10英里。有关如何执行此操作的建议?
更新:
这里是绘制不良的图表。在网格正方形内,我想确定所有落在正方形范围内的标记和多边形,即使它们超出了正方形的范围。我想列出所有在网格正方形中都存在的功能。我用黄色突出显示了这些区域。
我看着相交,它可能会做到。今晚将尝试。
您可以尝试以下方法:
首先,创建网格。
from shapely.geometry import Point
from matplotlib.pyplot as plt
point = Point(0, -10)
square = point.buffer(0.5).envelope
fig, ax = plt.subplots(figsize=(5,5))
gpd.GeoSeries(square).plot(ax=ax)
gpd.GeoSeries(point).plot(ax=ax, color = "black",markersize=30)
plt.grid()
plt.show()
import geopandas as gpd
# get geodataframe from geojson file
geo_df = gpd.GeoDataFrame.from_file('cells.geojson')
geo_df['grid_yn'] = geo_df['geometry'].apply(lambda x : x.intersects(square))