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

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

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

Сообщение xtxskif »

Привет всем. Помогите посчитать дистанции между центроидами полигонов.
Спасибо
Вложения
8888888888888888.png
8888888888888888.png (13.44 КБ) 5253 просмотра
thegeo
Активный участник
Сообщения: 161
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

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

Сообщение thegeo »

Введите в окно 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 КБ) 5229 просмотров
xtxskif
Завсегдатай
Сообщения: 455
Зарегистрирован: 17 фев 2016, 14:02
Репутация: -5
Откуда: Lviv
Контактная информация:

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

Сообщение xtxskif »

Спасибо. Все работает. Но подскажите пожалуйста как мне добавить к этой таблице еще 2 колонки (1-название изначального полигона, 2-название конечного полигона). Потому что дистанции я посчитал, с помощью ваших команд, но мне также нужна информация о этих дистанциях. В таблице с полигонами есть колонка Name.
Спасибо
thegeo
Активный участник
Сообщения: 161
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

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

Сообщение thegeo »

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

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

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 КБ) 5166 просмотров
thegeo
Активный участник
Сообщения: 161
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

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

Сообщение thegeo »

Не вижу смысла в еще одной колонке с именами. Имя объекта, до которого выполняются измерения, расположено в строке, где Distance=0.
xtxskif
Завсегдатай
Сообщения: 455
Зарегистрирован: 17 фев 2016, 14:02
Репутация: -5
Откуда: Lviv
Контактная информация:

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

Сообщение xtxskif »

это значит что в вашем случае расстояние от name1 к name5 = 82,6276, от name2 к name5 = 41.3458, ...?
thegeo
Активный участник
Сообщения: 161
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

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

Сообщение thegeo »

Результат запроса (то что на картинке) это расстояния от центроида (в терминах MI) выделенного объекта (name5) до всех других объектов в таблице (name5- name1, name5- name2, name5- name3 и т.д.). Мне казалось, что это вполне понятно из предложенного кода.
Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

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

Сообщение Boris »

Если начальная задача состоит в том, что получить расстояние между ВСЕМИ полигонами, и тогда колонки "начало" и "конец" имеют смысл. И это быстрее всего это сделать через создание копии исходной таблицы, которая содержит центроиды объектов исходной таблицы. Каждая строка должна иметь уникальный идентификатор, и каждая строка, участвующая в расчете должна иметь колонку со значением, которое совпадает для всех строк. Это необходимое условие для построения "квадратной" таблицы, т.к. в языке 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 КБ) 5002 просмотра
brws2.png
brws2.png (17.24 КБ) 5002 просмотра
brws1.png
brws1.png (9.66 КБ) 5002 просмотра
xtxskif
Завсегдатай
Сообщения: 455
Зарегистрирован: 17 фев 2016, 14:02
Репутация: -5
Откуда: Lviv
Контактная информация:

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

Сообщение xtxskif »

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

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

Сообщение xtxskif »

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

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

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

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