MapInfo. Обчисление

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
xtxskif
Завсегдатай
Сообщения: 455
Зарегистрирован: 17 фев 2016, 14:02
Репутация: -5
Откуда: Lviv
Контактная информация:

MapInfo. Обчисление

Сообщение xtxskif » 26 май 2016, 10:29

Привет всем. Помогите посчитать дистанции между центроидами полигонов.
Спасибо
Вложения
8888888888888888.png
8888888888888888.png (13.44 КБ) 5201 просмотр

thegeo
Активный участник
Сообщения: 161
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

Re: MapInfo. Обчисление

Сообщение thegeo » 26 май 2016, 13:06

Введите в окно 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
miHG578.png (15.19 КБ) 5177 просмотров

xtxskif
Завсегдатай
Сообщения: 455
Зарегистрирован: 17 фев 2016, 14:02
Репутация: -5
Откуда: Lviv
Контактная информация:

Re: MapInfo. Обчисление

Сообщение xtxskif » 27 май 2016, 19:41

Спасибо. Все работает. Но подскажите пожалуйста как мне добавить к этой таблице еще 2 колонки (1-название изначального полигона, 2-название конечного полигона). Потому что дистанции я посчитал, с помощью ваших команд, но мне также нужна информация о этих дистанциях. В таблице с полигонами есть колонка Name.
Спасибо

thegeo
Активный участник
Сообщения: 161
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

Re: MapInfo. Обчисление

Сообщение thegeo » 27 май 2016, 22:28

Нужно несколько изменить текст запроса

Код: Выделить всё

Select nm,Distance(CentroidX(dd),CentroidY(dd),CentroidX(obj),CentroidY(obj),"m")("Distance") from tst_2 into Selection
здесь nm имя поля таблицы tst_2 с именами объектов.
Вложения
miHG586.png
miHG586.png (12.29 КБ) 5114 просмотров

thegeo
Активный участник
Сообщения: 161
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

Re: MapInfo. Обчисление

Сообщение thegeo » 27 май 2016, 22:34

Не вижу смысла в еще одной колонке с именами. Имя объекта, до которого выполняются измерения, расположено в строке, где Distance=0.

xtxskif
Завсегдатай
Сообщения: 455
Зарегистрирован: 17 фев 2016, 14:02
Репутация: -5
Откуда: Lviv
Контактная информация:

Re: MapInfo. Обчисление

Сообщение xtxskif » 05 июн 2016, 15:25

это значит что в вашем случае расстояние от name1 к name5 = 82,6276, от name2 к name5 = 41.3458, ...?

thegeo
Активный участник
Сообщения: 161
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

Re: MapInfo. Обчисление

Сообщение thegeo » 05 июн 2016, 19:02

Результат запроса (то что на картинке) это расстояния от центроида (в терминах MI) выделенного объекта (name5) до всех других объектов в таблице (name5- name1, name5- name2, name5- name3 и т.д.). Мне казалось, что это вполне понятно из предложенного кода.

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: MapInfo. Обчисление

Сообщение Boris » 05 июн 2016, 22:14

Если начальная задача состоит в том, что получить расстояние между ВСЕМИ полигонами, и тогда колонки "начало" и "конец" имеют смысл. И это быстрее всего это сделать через создание копии исходной таблицы, которая содержит центроиды объектов исходной таблицы. Каждая строка должна иметь уникальный идентификатор, и каждая строка, участвующая в расчете должна иметь колонку со значением, которое совпадает для всех строк. Это необходимое условие для построения "квадратной" таблицы, т.к. в языке 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
map1.png
map1.png (19.25 КБ) 4950 просмотров
brws2.png
brws2.png (17.24 КБ) 4950 просмотров
brws1.png
brws1.png (9.66 КБ) 4950 просмотров

xtxskif
Завсегдатай
Сообщения: 455
Зарегистрирован: 17 фев 2016, 14:02
Репутация: -5
Откуда: Lviv
Контактная информация:

Re: MapInfo. Обчисление

Сообщение xtxskif » 06 июн 2016, 10:57

Спасибо

xtxskif
Завсегдатай
Сообщения: 455
Зарегистрирован: 17 фев 2016, 14:02
Репутация: -5
Откуда: Lviv
Контактная информация:

Re: MapInfo. Обчисление

Сообщение xtxskif » 14 июн 2016, 00:48

а как просто создать центроиды полигонов и записать их в отдельный слой?

Ответить

Вернуться в «Я новичок!»

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя