Это должно было быть очевидным предшественником (который я не задавал) к моему другому вопросу: Как создать диаграммы паука (линии центра) в PostGIS?
Если я не знаю взаимосвязи между точкой на уровне A (магазины) и точкой на уровне B (клиенты), я бы хотел сказать, что «Клиент 1 обслуживается ближайшим магазином». Хотя я понимаю, что этот факт не может быть правдой, это может быть достойной заменой.
Используя PostGIS, каков наиболее эффективный способ присвоения идентификатора ближайшей точки в слое A (магазины) каждой точке в слое B (клиенты). Вывод, который я ищу, выглядит примерно так.
Customer | Store
1 | A
2 | A
3 | B
4 | C
postgis
geoprocessing
business
nearest-neighbor
RyanKDalton
источник
источник
Похоже, что если у вас гораздо больше покупателей, чем в магазинах, то может быть более эффективно создать слой многоугольников вороной для магазинов, а затем создать пространственное объединение покупателей с магазинами полигонов.
источник
Обсуждение некоторых основных решений для ближайших соседей можно найти здесь: http://www.bostongis.com/?content_name=postgis_nearest_neighbor#120
/ Никлас
источник
С http://www.bostongis.com/?content_name=postgis_nearest_neighbor :
Это позволит найти минимальные расстояния до 300 единиц. Итак, вы должны сначала проверить свои данные и выяснить, насколько велики будут ваши минимальные расстояния.
источник
Вы должны найти самую короткую пару в окне поиска, и если в коробке ничего нет, разверните ее. Это не красиво, но это работает. Здесь приведен пример кода PL / PgSQL http://trac.osgeo.org/postgis/wiki/UsersWikiNearest
источник
Спасибо за вклад каждого. В конечном итоге я согласился с сочетанием предложений Эпранда и Подземья. Последний код, который я использовал, был:
Затем я создал диаграмму Вороного в слое магазинов, чтобы убедиться, что результаты работают правильно, что, конечно, они и сделали. Спасибо всем за отличную работу!
источник