确定网格正方形中的点和多边形

2024-09-29 17:23:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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英里。如何做到这一点的建议

更新:

这是一张画得不好的图表。在网格正方形中,我想识别所有落在正方形边界内的标记和多边形,即使它们位于正方形的外侧。我想有一个在方格中存在的所有功能的列表。我用黄色突出显示了这些区域

Poorly draw image

我看了交叉点,它可能会这样做。我今晚试试


Tags: fromimportjsongeojson多边形中心featuredistance
1条回答
网友
1楼 · 发布于 2024-09-29 17:23:52

您可以尝试以下方法:

首先,创建网格

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()

enter image description here
然后呢,

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))

相关问题 更多 >

    热门问题