Создать многоугольную сетку, которая покрывает Землю - PullRequest
2 голосов
/ 12 марта 2019

TL; DR:

Точный вопрос заключается в том, как создать полуравные полигоны желаемого размера, например, около 100x100m, 1000x1000m, сетка 5000x5000m, которая покроет Землю? **

Фоновая история:

Я строю микросервис на основе Python, который для заданного LAT LON (WGS84) вернет json с некоторыми данными, например. подходящая страна / город / или выбранная сетка полигонов.

Деталь со страной / городом / беспорядком работает нормально, поскольку я использую шейп-файл и R-дерево для быстрой проверки, находится ли точка в пределах области.

Я борюсь со следующим случаем: представьте, что у меня есть большое количество выборок на основе GPS с некоторыми данными, которые я хотел бы, например, усреднить по некоторым геобинам (сетке).

Я пытаюсь разделить Землю на полукруглые области (для проекции Меркатора), которые позже я смог бы использовать с функциями «содержит» или «внутри».

В настоящее время это делается с помощью SQL-запроса и «GROUP BY» с использованием SIN / COS и округления

Образцы

в ящики

(ССЫЛКИ НА ФОТОГРАФИИ)

Поскольку при работе с шейп-файлами и поступающими данными из запросов я работаю с WGS84, моя идея заключалась в том, чтобы перейти в merkator (или webmerkator), сгенерировать геопанды и использовать функцию to_crs для возврата к WGS84.

world = world[(world.name != "Antarctica") & (world.name != "Fr. S. Antarctic Lands")]
world = world.to_crs({'init': 'epsg:3857'})
plotworld = world.plot( figsize=(20,10))    
plotworld.set_title("Merkator")
# Keep map proportionate
plotworld.axis('equal')

#Draw saple polygon rectangle (in merkator)
x_point_list = [0.5*1e7,0.75*1e7,0.75*1e7,0.5*1e7]
y_point_list = [-0*1e7,0*1e7,0.25*1e7,0.25*1e7]
polygon_geom = Polygon(zip(x_point_list, y_point_list))
crs = {'init': 'epsg:3857'}
polygon = gp.GeoDataFrame(index=[0], crs=crs, geometry=[polygon_geom])       
polygon.plot(ax=plotworld,color='red')

#transform to WGS84
world = world.to_crs({'init': 'epsg:4326'})
polygon = polygon.to_crs({'init': 'epsg:4326'})
plotworld2= world.plot( figsize=(20,10))

polygon.plot(ax=plotworld2,color='red')

У меня вопрос: как создать полуравные полигоны желаемого размера, например, около 100x100mx 1000x1000m, сетка 5000x5000m, которая покроет Землю?

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

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

Любая помощь приветствуется!

...