Есть много способов сделать это. Один простой эффективный состоит из:
Вычислить координаты x и y как поля в таблице атрибутов.
Объединить эти координаты в идентификатор.
Суммируйте таблицу по этому идентификатору, запрашивая сумму числового поля, а также первые экземпляры x и y.
Создайте тему точечного события в сводной таблице, используя (x, y) для координат.
редактировать
В комментарии @myClone пишет
точки точно не перекрывают друг друга (то есть координаты xy близки, но не равны друг другу), но мне просто нужно объединить точки, которые находятся в пределах 100 футов друг от друга.
В общем, нет единственного решения. Рассмотрим, например, три точки на линии, каждая из которых отделена на 75 футов от соседа:
* * *
a b c
Вы объединяете все три, несмотря на расстояние (a, c)> 100? Если нет, какое решение вы выберете: (a, b), (c) или (a), (b, c)?
Два подхода , дающие разные ответы в таких случаях:
(i) Буферизуйте все точки на 50 = 100/2 фута, требуя объединения буферов. Пространственно объедините буферы обратно к точкам: это наделяет каждую точку атрибутом объединенного буфера, содержащего ее. Это достигает цели шага (2) в моем исходном решении. Действуйте оттуда точно так же, как и раньше. В примере это будет кластеризовать a, b и c вместе.
(ii) Создайте сетку размером 100 на 100 футов и определите точки по их ячейкам. Для этого не требуется рисовать сетку или даже сохранять ее элементы, потому что ячейка, в которой лежит (x, y), определяется упорядоченной парой (Floor ((x-x0) / 100), Floor ((y-y0) ) / 100)) где (x0, y0) - любой источник сетки, который вам нравится. Объедините эти координаты, чтобы идентифицировать ячейку, снова достигнув шага (2) в моем исходном решении. Продолжайте, как и раньше.
Очевидно, что метод (ii) не совсем агрегирует все пары точек в пределах 100 футов, потому что он способен агрегировать пары до 100 * Sqrt (2) = 141 футов друг от друга. Вы можете компенсировать это, уменьшив размер сетки до 100 / Sqrt (2) = 71 фут, но тогда некоторые пары в пределах 100 футов не будут агрегированы. Выбрать свой яд.
Обратите внимание, что решения в методе (ii) зависят от происхождения и расстояния сетки. Используя 100-футовую сетку, он даст либо {(a, b), (c)}, либо {(a), (b, c)}, в зависимости от источника. Используя сетку в 71 фут, он будет держать все три точки отдельно, независимо от происхождения.
Есть и другие методы , которые я собираю в группы:
(iii) Использовать статистическую процедуру кластеризации , такую как k-средних или иерархическая кластеризация, чтобы сделать эту работу. Об этом есть много полезной информации на нашем родственном сайте stats @ SE . Как правило, программное обеспечение статистики принимает (id, x, y) тройки в качестве входных и выходных данных (или их можно убедить вывести) таблицу (id, кластер) троек. Присоедините эту выходную таблицу обратно к таблице атрибутов точек, еще раз вернув нас к шагу (2) в исходном решении и т. Д.
(iv) Некоторые геостатистические программы , такие как GSLib , включают в себя различные процедуры «декластеризации», предназначенные для подготовки данных для вариографии и кригинга. Их выходные данные обычно могут быть импортированы обратно в программное обеспечение ГИС и преобразованы в точечный слой.
Методы, описанные до сих пор, дают вам полный контроль над тем, что происходит, позволяя вам выполнять свою работу хорошо и профессионально (без необходимости перепроектировать свои программные инструменты).
Наконец, стоит отметить, что
(v) последние копии ArcGIS имеют инструмент для декластеризации . Насколько я помню, неясно, как это работает; Вы должны прочитать основной код, чтобы выяснить, что происходит.