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

MapInfo, MapBasic
Ответить
Andrew
Активный участник
Сообщения: 134
Зарегистрирован: 01 окт 2009, 08:52
Репутация: 3
Откуда: Москва

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

Сообщение Andrew » 25 ноя 2009, 18:27

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

Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

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

Сообщение SS_Rebelious » 25 ноя 2009, 19:01

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

Однако, я тут протестил, и вроде операцию экспорта/импорта можно пропустить. Может я не так понял смысл описания утилиты...
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

Andrew
Активный участник
Сообщения: 134
Зарегистрирован: 01 окт 2009, 08:52
Репутация: 3
Откуда: Москва

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

Сообщение Andrew » 26 ноя 2009, 10:00

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

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

geologic
Гуру
Сообщения: 852
Зарегистрирован: 15 сен 2005, 13:19
Репутация: 6
Откуда: москва
Контактная информация:

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

Сообщение geologic » 26 ноя 2009, 10:46

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

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 по теореме Пифагора, или еще сложнее, если надо.

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

Andrew
Активный участник
Сообщения: 134
Зарегистрирован: 01 окт 2009, 08:52
Репутация: 3
Откуда: Москва

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

Сообщение Andrew » 26 ноя 2009, 10:52

спасибо, буду пробовать

alexandr cherepanov
Гуру
Сообщения: 534
Зарегистрирован: 30 ноя 2006, 13:31
Репутация: 116
Откуда: Moscow

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

Сообщение alexandr cherepanov » 26 ноя 2009, 10:58

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

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

Andrew
Активный участник
Сообщения: 134
Зарегистрирован: 01 окт 2009, 08:52
Репутация: 3
Откуда: Москва

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

Сообщение Andrew » 26 ноя 2009, 11:32

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

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

geologic
Гуру
Сообщения: 852
Зарегистрирован: 15 сен 2005, 13:19
Репутация: 6
Откуда: москва
Контактная информация:

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

Сообщение geologic » 08 дек 2009, 17:58

С одним но - если у вас координаты идеально равны. В жизни это редкость... :(

Ответить

Вернуться в «MapInfo»

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и 34 гостя