MapInfo. Обчисление
-
- Завсегдатай
- Сообщения: 455
- Зарегистрирован: 17 фев 2016, 14:02
- Репутация: -5
- Откуда: Lviv
- Контактная информация:
MapInfo. Обчисление
Привет всем. Помогите посчитать дистанции между центроидами полигонов.
Спасибо
Спасибо
- Вложения
-
- 8888888888888888.png (13.44 КБ) 5201 просмотр
-
- Активный участник
- Сообщения: 161
- Зарегистрирован: 17 янв 2012, 18:51
- Репутация: 74
Re: MapInfo. Обчисление
Введите в окно MapBasic следующую последовательность команд
В выборке получите значения расстояний от выбранного объекта до всех других объектов в таблице. Вообще же под подобные задачи удобнее писать код.
Код: Выделить всё
dim dd as object
dd=selection.obj
Select Distance(CentroidX(dd),CentroidY(dd),CentroidX(obj),CentroidY(obj),"m") from tst_2 into Selection
Browse * From Selection
- Вложения
-
- miHG578.png (15.19 КБ) 5177 просмотров
-
- Завсегдатай
- Сообщения: 455
- Зарегистрирован: 17 фев 2016, 14:02
- Репутация: -5
- Откуда: Lviv
- Контактная информация:
Re: MapInfo. Обчисление
Спасибо. Все работает. Но подскажите пожалуйста как мне добавить к этой таблице еще 2 колонки (1-название изначального полигона, 2-название конечного полигона). Потому что дистанции я посчитал, с помощью ваших команд, но мне также нужна информация о этих дистанциях. В таблице с полигонами есть колонка Name.
Спасибо
Спасибо
-
- Активный участник
- Сообщения: 161
- Зарегистрирован: 17 янв 2012, 18:51
- Репутация: 74
Re: MapInfo. Обчисление
Нужно несколько изменить текст запроса
здесь nm имя поля таблицы tst_2 с именами объектов.
Код: Выделить всё
Select nm,Distance(CentroidX(dd),CentroidY(dd),CentroidX(obj),CentroidY(obj),"m")("Distance") from tst_2 into Selection
- Вложения
-
- miHG586.png (12.29 КБ) 5114 просмотров
-
- Активный участник
- Сообщения: 161
- Зарегистрирован: 17 янв 2012, 18:51
- Репутация: 74
Re: MapInfo. Обчисление
Не вижу смысла в еще одной колонке с именами. Имя объекта, до которого выполняются измерения, расположено в строке, где Distance=0.
-
- Завсегдатай
- Сообщения: 455
- Зарегистрирован: 17 фев 2016, 14:02
- Репутация: -5
- Откуда: Lviv
- Контактная информация:
Re: MapInfo. Обчисление
это значит что в вашем случае расстояние от name1 к name5 = 82,6276, от name2 к name5 = 41.3458, ...?
-
- Активный участник
- Сообщения: 161
- Зарегистрирован: 17 янв 2012, 18:51
- Репутация: 74
Re: MapInfo. Обчисление
Результат запроса (то что на картинке) это расстояния от центроида (в терминах MI) выделенного объекта (name5) до всех других объектов в таблице (name5- name1, name5- name2, name5- name3 и т.д.). Мне казалось, что это вполне понятно из предложенного кода.
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: MapInfo. Обчисление
Если начальная задача состоит в том, что получить расстояние между ВСЕМИ полигонами, и тогда колонки "начало" и "конец" имеют смысл. И это быстрее всего это сделать через создание копии исходной таблицы, которая содержит центроиды объектов исходной таблицы. Каждая строка должна иметь уникальный идентификатор, и каждая строка, участвующая в расчете должна иметь колонку со значением, которое совпадает для всех строк. Это необходимое условие для построения "квадратной" таблицы, т.к. в языке MapInfo SQL строки двух таблиц обязательно должны иметь условие для связи - просто так прямое пересечение таблиц MapInfo делать не разрешает. Как то вот так:
Код: Выделить всё
Commit Table kr47_listgeo As "kr47_cp.TAB" TYPE NATIVE Charset "WindowsCyrillic" Interactive
Open Table "Y:\Rosreestr\F\KR\47v21\kr47_cp.TAB" Interactive
Add Map Auto Layer kr47_cp
update kr47_cp set obj=centroid(obj)
Commit Table kr47_cp Interactive
Select kr47_cp.PKK_ID, kr47_cp.CAD_NUM, kr47_cp.NAME, SphericalDistance( CentroidX(kr47_cp.Obj), CentroidY(kr47_cp.Obj), CentroidX(kr47_listgeo.Obj), CentroidY(kr47_listgeo.Obj),"km" ), kr47_cp.PKK_ID "Begin",kr47_listgeo.PKK_ID "End" from kr47_cp, kr47_listgeo where kr47_cp.Obj Within kr47_listgeo.Obj and kr47_cp.PKK_ID <> kr47_listgeo.PKK_ID into q001 noselect
Browse * From q001
-
- Завсегдатай
- Сообщения: 455
- Зарегистрирован: 17 фев 2016, 14:02
- Репутация: -5
- Откуда: Lviv
- Контактная информация:
Re: MapInfo. Обчисление
Спасибо
-
- Завсегдатай
- Сообщения: 455
- Зарегистрирован: 17 фев 2016, 14:02
- Репутация: -5
- Откуда: Lviv
- Контактная информация:
Re: MapInfo. Обчисление
а как просто создать центроиды полигонов и записать их в отдельный слой?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя