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

идентификация линий по объектам

Добавлено: 08 дек 2011, 08:14
1985student
Версия MI 10.5; Операционная система Windows7; Тип геообъектов - линии;СК-42;Долгота/Широта WGS_84;
Вопрос: можно ли линиям, берущим своё начало от различных объектов(полигонны,точки, линии) присвоить идентификатор этого объекта? Если можно, то как это сделать для линий, берущих своё начало от центра полигонов?

Re: идентификация линий по объектам

Добавлено: 08 дек 2011, 14:50
Пётр Дубоделов
как понять идентификатор? некоторое свойство с таким именем? тогда:
Запрос вида "меню таблица/обновить колонку..." щелкаем кнопку "объединить" и выбираем нужный вариант.

при необходимости центроиды полигонов можно выдрать на новый слой. если линии начинаются не точно в центре или есть топологические погрешности, можно выстроить небольшие буферы-круги около центроидов полигонов.

Re: идентификация линий по объектам

Добавлено: 08 дек 2011, 21:52
1985student
Говоря идентификатор, я имею в виду что полигоны проидентифицированны как 1,2,3 и мне нужно,чтобы линии, также показанные на рисунке имели идентификацию,такую же как и соответствующие им полигоны. Только нужно учесть, что линий, как и полигонов,очень и очень много:
Спойлер
Изображение
попробовал ваш метод выходит ошибка,что не удалось обновить таблицу.

Re: идентификация линий по объектам

Добавлено: 09 дек 2011, 08:00
reasonat
скорее всего таблица неупакованная (с серыми строками от удаленных записей). Упакуйте ее (Таблица\Изменить\Упаковать)

Re: идентификация линий по объектам

Добавлено: 09 дек 2011, 09:31
1985student
А если вот такой вариант, когда линии, начинаясь в одном полигоне, пересекают несколько, а нужно, чтобы линия была проидентифицированна, как тот полигон от которого она берёт своё начало,что тогда делать?
Спойлер
Изображение

Re: идентификация линий по объектам

Добавлено: 09 дек 2011, 09:55
Пётр Дубоделов
Если объекты действительно линии (имеют 2 вершины) и только одна (начальная) из этих вершин попадает в полигон, тогда порядок такой:
1. разваливаем линии на точки (утилита OBJ_CONV.MBX)
2. обновляем для точек поле "идентификатор"
3. из полученного результата удаляем все пустые значения (точки, которые не попадают в полигоны) и упаковываемся
4. обновляем идентификатор слоя линий по значениям слоя точек

Re: идентификация линий по объектам

Добавлено: 09 дек 2011, 10:09
1985student
А после того как мы обновили идентификатор слоя линий по значениям слоя точек, можно автоматически построить линии, которые будут идти к какому либо одному объекту?
Спойлер
Изображение

Re: идентификация линий по объектам

Добавлено: 09 дек 2011, 10:32
Дубоделов Петр
а фиг знает, наверно можно... только в мапинфо руками скорее всего значительно быстрее получится

Re: идентификация линий по объектам

Добавлено: 09 дек 2011, 10:38
1985student
Спасибо

Re: идентификация линий по объектам

Добавлено: 10 дек 2011, 18:52
Boris
если еще не решили вторую половину задачи. то ее можно быстро и без усилий автоматизировать, если вы знаете начало и конец линий.

Re: идентификация линий по объектам

Добавлено: 12 дек 2011, 08:04
1985student
Да я действительно знаю координаты начала и конца линий, вы бы мне очень помогли...

Re: идентификация линий по объектам

Добавлено: 12 дек 2011, 17:13
Boris
1985student писал(а):Да я действительно знаю координаты начала и конца линий, вы бы мне очень помогли...
Функция MapBasic
CreateLine( ) function
Returns an Object value representing a line.

Syntax
CreateLine( x1, y1, x2, y2 )
является, простите за тавтологию - ФУНКЦИЕЙ. А значит ее без проблем можно вызывать в запросах типа INSERT и UPDATE к гео-объекту OBJ. Пример с INSERT есть в хелпе по мапбасику. Сам мапбасик есть в любой последней мапинфо. Я не говорю, что его надо использовать для этой простейшей задачи - хватит окна MapBasic в самой мапинфо, но хелп содержит все функции и все их можно использовать внутри мапинфо.
Теперь по шагам:
а) устанавливаем верную систему координат внутренних команд MapBasic
set coordsys table имя_таблицы
иначе все координаты получите в неизвестной системе координат
б) делаем запрос на пары точек или объетов, что вам нужно соединить в него включаем функции CentroidX / centroidy для обеих концов линии (отрезка).
в) сохраняем его как отдельную таблицу. в него будут сохранены гео-объекты от первой таблицы в запросе
г) делаем update что бы присвоить имеющимся объектам линии соединяющие точки. координаты точек берем из соответсвующих столбцов, созданных в запросе