Страница 1 из 1

Поиск двойных точек в одной таблице

Добавлено: 25 ноя 2009, 18:27
Andrew
есть одна таблица. в ней есть двойные точки (создавались с помощью snap). поиск точек содинаковыми координатами не проходит, появляются лишние. наверное из-за ограничений в 4 знака после запятой. как можно отловить двойные точки?

Re: Поиск двойных точек в одной таблице

Добавлено: 25 ноя 2009, 19:01
SS_Rebelious
Чтобы удалить точки надо воспользоваться двумя утилитами: "записать координаты" и "удалить дубли". Сначала, с помощью первой записываете координаты всех точек. Затем, с помощью второй удаляете дублирующиеся записи о координатах. Как указано в описании последней утилиты, она удаляет только дублирующиеся записи, но не связанные с ними объекты. Поэтому экспортируете результат чистки в txt, а из него уже создаёте новую таблицу и строите точки по координатам. Описывать дольше, чем делать)

Однако, я тут протестил, и вроде операцию экспорта/импорта можно пропустить. Может я не так понял смысл описания утилиты...

Re: Поиск двойных точек в одной таблице

Добавлено: 26 ноя 2009, 10:00
Andrew
SS_Rebelious писал(а):Чтобы удалить точки надо воспользоваться двумя утилитами: "записать координаты" и "удалить дубли". Сначала, с помощью первой записываете координаты всех точек. Затем, с помощью второй удаляете дублирующиеся записи о координатах. Как указано в описании последней утилиты, она удаляет только дублирующиеся записи, но не связанные с ними объекты. Поэтому экспортируете результат чистки в txt, а из него уже создаёте новую таблицу и строите точки по координатам. Описывать дольше, чем делать)

Однако, я тут протестил, и вроде операцию экспорта/импорта можно пропустить. Может я не так понял смысл описания утилиты...
удалить дубли просто. соглсен. мне же надо их отобрать и дальше с ними работать

Re: Поиск двойных точек в одной таблице

Добавлено: 26 ноя 2009, 10:46
geologic
Для всех случаев, где есть работа с координатами, существует два алгоритма:

1. Полноценная выборка точек, расположенных ближе друг к другу некоей окрестности dS. Понадобится вложенный запрос, который вокруг каждой точки ищет соседние. На общечеловеческом SQL это звучит примерно так:
SELECT POINTS.ID FROM POINTS as A, POINTS AS B
WHERE Abs (A.X - B.X) < dS AND Abs (A.Y - B.Y) < dS;
По сути, выборка квадратом со стороной dS - обычно этого достаточно. Не уверен что реализуемо на диалекте Mapinfo, но при больших объемах таблиц разумно работать с данными в СУБД.

2. Поглощение дубликатов без разбора, есть разные способы. Наиболее простой - округление координат до величины dS, по сути, притягивание всех точек к узлам некоей сетки с шагом dS. Координаты становятся одинаковыми, после чего идентичные точки уже значительно легче найти и слить. Наиболее грамотный - агрегирование точек с осреднением координат (можно тоже через SQL). Вместо облака дубликатов остается одна, средняя по положению точка.

Первый способ может применяться не только для равноценных точек, но и для пространственного анализа различных слоев - например, близости точек опробования и населенных пунктов. В идеале окрестность анализа желательно делать круглой - усложняя условие WHERE по теореме Пифагора, или еще сложнее, если надо.

Еще есть разные простые ГИС-скрипты по удалению точек-дубликатов. Обычно после них остается одна точка из дублей, непредсказуемо какая (обычно первая по физ. порядку). В большой информатике такое не приветствуется, хотя в принципе аналогично округлению.

Re: Поиск двойных точек в одной таблице

Добавлено: 26 ноя 2009, 10:52
Andrew
спасибо, буду пробовать

Re: Поиск двойных точек в одной таблице

Добавлено: 26 ноя 2009, 10:58
alexandr cherepanov
Andrew писал(а): мне же надо их отобрать и дальше с ними работать
Запускаете Удалить дубли по двум координатам, ставите галочку счетчик дублей.
Потом из созданного вектор выбираете все где в счетчике >1.

И делаете SQL запрос по двум координатам между исходным слоем и созданной выборкой дублей. И получаете искомый слой с дублирующимися точками.

Re: Поиск двойных точек в одной таблице

Добавлено: 26 ноя 2009, 11:32
Andrew
alexandr cherepanov писал(а):
Andrew писал(а): мне же надо их отобрать и дальше с ними работать
Запускаете Удалить дубли по двум координатам, ставите галочку счетчик дублей.
Потом из созданного вектор выбираете все где в счетчике >1.

И делаете SQL запрос по двум координатам между исходным слоем и созданной выборкой дублей. И получаете искомый слой с дублирующимися точками.
получилось. спасибо

Re: Поиск двойных точек в одной таблице

Добавлено: 08 дек 2009, 17:58
geologic
С одним но - если у вас координаты идеально равны. В жизни это редкость... :(