Страница 1 из 1

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

Добавлено: 26 май 2016, 10:29
xtxskif
Привет всем. Помогите посчитать дистанции между центроидами полигонов.
Спасибо

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

Добавлено: 26 май 2016, 13:06
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
В выборке получите значения расстояний от выбранного объекта до всех других объектов в таблице. Вообще же под подобные задачи удобнее писать код.

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

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

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

Добавлено: 27 май 2016, 22:28
thegeo
Нужно несколько изменить текст запроса

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

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

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

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

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

Добавлено: 05 июн 2016, 15:25
xtxskif
это значит что в вашем случае расстояние от name1 к name5 = 82,6276, от name2 к name5 = 41.3458, ...?

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

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

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

Добавлено: 05 июн 2016, 22:14
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 КБ) 4949 просмотров
brws2.png
brws2.png (17.24 КБ) 4949 просмотров
brws1.png
brws1.png (9.66 КБ) 4949 просмотров

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

Добавлено: 06 июн 2016, 10:57
xtxskif
Спасибо

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

Добавлено: 14 июн 2016, 00:48
xtxskif
а как просто создать центроиды полигонов и записать их в отдельный слой?