Это специфично для ArcGIS.
У меня есть 2-точечные шейп-файлы, A
и B
первая ( A
) - это отдельная точка, содержащая длинный лат, вторая ( B
) - множество точек (более 12 КБ), каждая из которых содержит свои широту и длину. Я пытаюсь автоматизировать выбор 75% B
точек шейп - файла на основе расстояния от шейп-файла A
. Другими словами, я хочу выбрать ближайшие 75% B
точек шейп A
- файла в одну точку шейп - файла .
arcgis-10.0
spatial-statistics
Фарлонг
источник
источник
Ответы:
Вы можете создать множественный кольцевой буфер для шейп-файла A, а затем выполнить пространственное объединение буфера с шейп-файлом B. Когда вы выполняете пространственное соединение полигонов и точек, вы получаете количество точек в каждом полигоне в атрибуте. таблица соединения. Затем, изучив общее количество точек в буферах, вы можете получить в пределах 75% точек в шейп-файле B.
Немного другой подход заключается в том, чтобы написать скрипт на Python и проверить на 75% в цикле, но если это однократное вычисление, вам это может не понадобиться.
источник
Для 1200 точек (или даже до точки сказать 12M?) Я просто положил их в памяти как Generic Collection - в этом случае SortedList из списков . Это можно упростить, просто пропустив точки, когда вы столкнетесь с ситуацией, когда несколько точек находятся на одинаковом расстоянии от исходной точки. Также для производительности рассмотрите возможность использования хеш-таблицы вместо SortedList и сортировки один раз после вставки всех расстояний. Это заняло бы еще несколько строк кода (?).
У меня не было времени проверить это, но этот c # может помочь вам начать:
источник
Скрипт геообработки Python является очевидным выбором:
источник
У меня была эта проблема несколько лет назад. Я обнаружил, что легче сохранять данные как «плоские данные», циклически просматривая все данные и вручную вычисляя расстояние, а затем взяв верхние 75% (я фактически сохранил верхние 10%). Затем я сделал то же самое в ArcIMS, используя их расчеты расстояния, и это заняло намного больше времени.
Буферизация - это огромные накладные расходы, но математические расчеты - это сильная сторона. Если вы буферизуете 12 тыс. Баллов, я думаю, у вас будут проблемы с производительностью.
источник