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 英里。关于如何做到这一点的建议?
更新:
这是一个画得很差的图表。在网格正方形内,我想识别落在正方形边界内的所有标记和多边形,即使它们超出了它的一侧。我想列出在网格正方形中有一些存在的所有功能。我用黄色突出显示了这些区域。
我查看了交叉点,它可能会这样做。今晚会试试。
解决方案
你可以试试这个:
首先,创建网格。
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))
推荐阅读
- jupyter - Jupyter Lab 扩展@jupyterlab/git 安装问题
- c# - 如何模拟 AbstractValidator
- c++ - 如何为自动售货机构建简单的变更制造商?
- python - HTTP 请求期间发生错误:HTTP 错误 404:未找到 GetOldTweets3
- html - Div 仅通过更改名称不显示?
- amazon-web-services - 具有 Internet 访问权限的 AWS VPC 有时会因外部请求而超时
- python - 给定字符串的正则表达式模式匹配
- sql - MS Access:具有许多条件的平均值
- python - pkill -f 在 shell 脚本中不起作用
- typescript - 如何通过拆分字符串来推断嵌套对象值中的字符串文字?