Самый быстрый способ сравнить полигоны

Мне нужно разрешить компоненты адреса географической точки (красный).
введите здесь описание изображения

Запрос пересечения в mongodb находит мне несколько полигонов (см. рисунок). Зеленый многоугольник — муниципальный район, синий — город, коричневый — сельская местность. Я хочу показать адрес как «Страна, город, муниципальный район».

Проблема состоит в том, чтобы отсортировать результаты по размеру многоугольника. Вычисление площади с помощью python shapely или умножение сторон ограничивающей рамки занимает около одной секунды, и это очень медленно.

Каков самый быстрый способ сравнения полигонов?


person kz_sergey    schedule 08.08.2016    source источник
comment
занимает около одной секунды, если ваши полигоны такие огромные, что заставляет вас думать, что есть быстрый метод их сравнения?   -  person n. 1.8e9-where's-my-share m.    schedule 08.08.2016
comment
Как определяются многоугольники? Если это просто список отрезков по периметру, это не займет много времени, вы можете использовать теорему Грина.   -  person samgak    schedule 08.08.2016
comment
Полигоны определены как geojson. Я думаю, что этот быстрый метод используется в индексе R-Tree в postgis или mongodb. В этих системах рассчитываются миллионы ограничивающих прямоугольников в час (у меня скорость тысяч в час).   -  person kz_sergey    schedule 08.08.2016
comment
Почему нельзя просто предварительно рассчитать площадь каждого полигона и сохранить их все в БД?   -  person j_random_hacker    schedule 08.08.2016
comment
Вычисление площади или ограничивающей рамки полигона — простая операция, и она должна выполняться быстрее, чем синтаксический анализ geojson. Вы уверены, что именно здесь ваша программа работает медленно?   -  person Matt Timmermans    schedule 08.08.2016
comment
› Почему нельзя просто заранее рассчитать площадь каждого полигона и сохранить их все в БД   -  person kz_sergey    schedule 08.08.2016
comment
› Почему нельзя просто предварительно рассчитать площадь каждого полигона и сохранить их все в БД? Ведь в моей БД 100 000 документов. Я могу вычислить площадь, только если это быстро. › Вычисление площади или ограничивающей рамки многоугольника — простая операция Как получить ограничивающую рамку многоугольника?   -  person kz_sergey    schedule 08.08.2016


Ответы (1)


ST_Area в postgresql вычисляет 100 000 площадей за 1 минуту.

person kz_sergey    schedule 09.08.2016