Определение точек и многоугольников в квадрате сетки - PullRequest
0 голосов
/ 24 января 2020

Я использую python и geo json, чтобы сделать это, я хочу указать точку, и эта точка будет центром квадрата, предполагая, что квадрат равен 1 миле на одну милю. Я хочу перечислить все точки и полисы найдены в квадрате, в том числе полисы больше квадрата

У меня есть несколько файлов geo json, поэтому необходимо выполнить проверку несколько раз, и это нормально. Я играл с кодом ниже, который проверяет, находится ли центр ячейки рядом с центром квадрата, но будут ли проблемы с многоугольниками странной формы. Я действительно хочу знать все предметы / особенности, которые находятся на площади.

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 миль. Предложения о том, как это сделать?

Обновление:

Вот плохо нарисованная диаграмма. В квадрате сетки я хочу идентифицировать все маркеры и многоугольники, которые попадают в границы квадрата, даже если они go вне его. Я хочу иметь список всех объектов, которые присутствуют в квадрате сетки. Я выделил области желтым цветом.

Плохо нарисованное изображение

Я посмотрел на пересечения, и это может сделать это. Постараюсь сегодня вечером.

1 Ответ

0 голосов
/ 25 января 2020

вы можете попробовать это:

Сначала создайте сетку.

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