Страница 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
С одним но - если у вас координаты идеально равны. В жизни это редкость...
