Как быстро достать координаты точки

MapInfo, MapBasic
Ответить
pogoreli
Новоприбывший
Сообщения: 11
Зарегистрирован: 03 мар 2009, 09:24
Репутация: 0

Как быстро достать координаты точки

Сообщение pogoreli » 06 мар 2009, 09:28

Прошу прощения что туплю, но не могу никак понять

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

ObjectGeography(name_opened_table.obj,OBJ_GEO_POINTX)


, где name_opened_table имя открытой таблицы, т.е. String, с точки зрения объекта это не таблица, как таковые таблицы или ссылки на нее пока не нашел. Компилятор жалуется не правильный код, говорит. В примерах используются уже заранее известные таблицы в вставляют их:

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

Open Table "city" 
Map From city        // Но тут она уже не строка?!?!?!?!
f_x = ObjectGeography(city.obj, OBJ_GEO_LINEBEGX)
Помогите пожалуйста понять что в моем коде не правильно?

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

Re: Как быстро достать координаты точки

Сообщение Boris » 07 мар 2009, 05:54

Правильным синтаксисом, в случае, если
name_opened_table - это строковая переменная, не имеющая отношение к таблице, открытой с именем "name_opened_table", и содержащая только имя как текст, т.е. когда имя таблицы было ВЫЧИСЛЕНО и присвоено переменной:

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

dim name_opened_table as string
open table "world"
name_opened_table="world"
будет использование name_opened_table везде, как имени таблицы, во всех командах кроме команды обращения к колонке world.obj - правильно, name_opened_table.obj - нет
Для обхода используется следующий синтаксис:

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

dim iObj as Alias
iObj=name_opened_table+".obj"
f_x = ObjectGeography(iObj, OBJ_GEO_LINEBEGX)
На вопрос "почему так , через ...?" Могу ответить, только - "Because" :shock:
------
Теперь общие замечания
а) правильная форма команды Open Table :
Open Table "c:\world.tab" As world - вот тут видно, что здесь явно создается переменная world, которая до этого создавалась НЕ явно.
b) Если только вы не читаете названия таблиц командой TableInfo( table_id, TAB_INFO_NAME), предположение о правильном имени таблицы может оказаться неверным. Безопасный способ - проверять имя открытой таблицы и сразу же сохранять его в строковой переменной

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

Dim name_tab as string
Open Table "world" 
name_tab = TableInfo([b]0[/b], TAB_INFO_NAME)
c) обращаться к таблице ДО выполнения команды Fetch - небезопасно

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

Fetch first from name_tab ' здесь можно использовать строковую переменную
dim iObj as Alias
iObj=name_tab+".obj" ' возможен и вариант с синтаксисом col - name_tab+".COL1" или name_tab+".COL(" + 1 + ")" 
fx=ObjectGeography([b]iObj[/b], OBJ_GEO_LINEBEGX) 
d)Разумнее предполагать, что
Fetch first from name_tab и Fetch first from "world" и Fetch first from world будут в начале указывать на одну и туже строку таблицы,
А после использования команды Fetch next from name_tab - уже на разные
--------------
Ну и напоследок, что бы достать координаты точки циклы использовать - не обязательно, можно использовать и запрос
select ObjectGeography(Obj, OBJ_GEO_LINEBEGX) from name_tab
даст то же самый результат, кроме того, что либо вы сами зададите имя новой таблицы results_table в синтаксисе:
select ObjectGeography(Obj, OBJ_GEO_LINEBEGX) from name_tab Into results_table Noselect
либо отобранные данные будут помещены в таблицу-запрос Selection

pogoreli
Новоприбывший
Сообщения: 11
Зарегистрирован: 03 мар 2009, 09:24
Репутация: 0

Re: Как быстро достать координаты точки

Сообщение pogoreli » 11 мар 2009, 15:14

Спасибо за помощь спасся, обходные пути :arrow: надо знать.

Ответить

Вернуться в «MapInfo»

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

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