CreateCircle

MapInfo, MapBasic
Krom
Новоприбывший
Сообщения: 9
Зарегистрирован: 31 май 2012, 12:36
Репутация: 0

CreateCircle

Сообщение Krom » 31 май 2012, 12:39

Здравствуйте. Помогите пожалуйста разобраться. Задача создать окружность с возможностью изменять радиус, изменяя значение в таблице.
С помощью вот такого кода научился создавать окружность в нужном месте и нужного радиуса:

Open Table "rad"
Insert Into rad (obj)
Values ( CreateCircle(-72, 42, 10000) )

Но я не могу найти как добавить в таблицу значение радиуса для последующего интерактивного редактирования. Буду очень благодарен за подсказку

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: CreateCircle

Сообщение dab » 31 май 2012, 12:47

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

Insert Into rad (obj, field_name) Values ( CreateCircle(-72, 42, 10000), 10000 )
Естественно, поле field_name должно присутствовать в таблице rad.

Krom
Новоприбывший
Сообщения: 9
Зарегистрирован: 31 май 2012, 12:36
Репутация: 0

Re: CreateCircle

Сообщение Krom » 31 май 2012, 12:57

dab, спасибо Вам большое, работает!
Я поменял теперь радиус в таблице, как обновить карту чтобы новый радиус применился?

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: CreateCircle

Сообщение dab » 31 май 2012, 13:22

Например так

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

Update rad Set obj =  CreateCircle(CentroidX(obj), CentroidY(obj), field_name)

Krom
Новоприбывший
Сообщения: 9
Зарегистрирован: 31 май 2012, 12:36
Репутация: 0

Re: CreateCircle

Сообщение Krom » 31 май 2012, 13:40

хм. не обновляет. ошибок не выдает но и ничего не меняется. в геоинформации прежнее значение

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: CreateCircle

Сообщение dab » 31 май 2012, 13:47

Krom писал(а):хм. не обновляет. ошибок не выдает но и ничего не меняется. в геоинформации прежнее значение
Смотрите предложение CoordSys относительно карты и таблицы rad.
Я прежде чем писать код на форуме всегда пробую у себя.
Моя таблица rad в Долготе-Широте. Всё работает, радиус окружностей меняется.
Попозже ещё в метрах проверю.

Krom
Новоприбывший
Сообщения: 9
Зарегистрирован: 31 май 2012, 12:36
Репутация: 0

Re: CreateCircle

Сообщение Krom » 31 май 2012, 13:54

Я пробовал в план-схеме, а теперь сделал заново в долготе/широте и все работает. Спасибо Вам огромное, очень выручили.

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: CreateCircle

Сообщение dab » 31 май 2012, 14:21

Krom писал(а):Я пробовал в план-схеме, а теперь сделал заново в долготе/широте и все работает. Спасибо Вам огромное, очень выручили.
Работать будет и с план-схемой, только предварительно нужно выполнить

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

Set Map XY Units "m" CoordSys NonEarth Units "m"

SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: CreateCircle

Сообщение SergS » 31 май 2012, 16:04

dab писал(а): Работать будет и с план-схемой, только предварительно нужно выполнить

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

Set Map XY Units "m" CoordSys NonEarth Units "m"
не-е, это не пройдет, (точнее, если пройдет, то случайно). требуется так:

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

set coordsys table rad
set distance units "m"
это дает возможность не выяснять специально как выглядит строка проекции для данной таблицы, а просто использовать заданную в ней же. кроме того, для createcircle() требуется задать единицы измерения расстояний, в примере - метры, строка установки СК на этот параметр не влияет. а что там по умолчанию в MI установлено - уже забыл, т.к. всегда принудительно ставлю по необходимости.

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: CreateCircle

Сообщение dab » 31 май 2012, 18:08

SergS писал(а):[

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

set coordsys table rad
set distance units "m"
это дает возможность не выяснять специально как выглядит строка проекции для данной таблицы, а просто использовать заданную в ней же. кроме того, для createcircle() требуется задать единицы измерения расстояний, в примере - метры, строка установки СК на этот параметр не влияет. а что там по умолчанию в MI установлено - уже забыл, т.к. всегда принудительно ставлю по необходимости.
+100500 :)

Krom
Новоприбывший
Сообщения: 9
Зарегистрирован: 31 май 2012, 12:36
Репутация: 0

Re: CreateCircle

Сообщение Krom » 07 июн 2012, 10:16

А можно ли создавать окружность не в конкретной координате а в центроиде другого объекта?

Я привык что слой является представлением таблицы. Одна таблица - один слой. А возможно ли что есть два слоя и они описываются одной таблицей? Мне нужно чтобы в одном слое были допустим квадраты а в другом - круги посаженные по центроидам квадратов...

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2240
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1513
Откуда: Казань

Re: CreateCircle

Сообщение Игорь Белов » 07 июн 2012, 10:49

Вычислите координаты центроидов квадратов как CentroidX(obj), CentroidY(obj) и воспользуйтесь ими.
The purpose of computing is insight, not numbers

Krom
Новоприбывший
Сообщения: 9
Зарегистрирован: 31 май 2012, 12:36
Репутация: 0

Re: CreateCircle

Сообщение Krom » 07 июн 2012, 10:54

ErnieBoyd писал(а):Вычислите координаты центроидов квадратов как CentroidX(obj), CentroidY(obj) и воспользуйтесь ими.
Вы имеете ввиду вычислить координаты и вбить их вручную при создании окружности? Мне надо чтобы положение кругов было привязано к положению квадратов. Подвинули квадрат - подвинулись круги. Или я не так Вас понял может быть...
Я думал может иметь место конструкция вида
Insert Into rad (obj, field_name) Values ( CreateCircle(-72, 42, 10000), 10000 )
но вместо -74, 42 прописывается что-то вроде ссылки на центроид квадрата...

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2240
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1513
Откуда: Казань

Re: CreateCircle

Сообщение Игорь Белов » 07 июн 2012, 11:04

Как-то так:

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

  Dim square_table, circle_table As String
  Dim square_obj As Alias
  ...
  square_obj = square_table + ".Obj"
  ...
    Update circle_table
      Set Obj = CreateCircle(CentroidX(square_obj), CentroidY(square_obj), radius)
      Where RowID = TableInfo(circle_table, TAB_INFO_NROWS)
The purpose of computing is insight, not numbers

Krom
Новоприбывший
Сообщения: 9
Зарегистрирован: 31 май 2012, 12:36
Репутация: 0

Re: CreateCircle

Сообщение Krom » 07 июн 2012, 11:18

ErnieBoyd, объясните пожалуйста поподробнее.
То есть у меня одна таблица должна быть circle_table и колонки в ней square_table и circle_table?
Для меня это тема честно говоря нова поэтому Ваш код понятен только местами

Ответить

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

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

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