Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
DragonFire
Зарегистрирован: 12.07.2009 Сообщения: 35
|
Добавлено: Вт Июл 28, 2009 4:26 pm Заголовок сообщения: Земная проекция |
|
|
День добрый всем.
Вопрос вот такой, допустим, у нас есть карта с системой координат такого вида:
CoordSys Earth Projection 1, 0
Теперь я хочу нарисовать круг с радиусом 10 в некоторой точке. Как мне правильно задать СК для рисования?
Т.Е. мне нужно что-то вроде CoordSys Earth Projection 1, 0, "km" но так не работает...
Заранее спасибо огромное! |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Вт Июл 28, 2009 10:52 pm Заголовок сообщения: |
|
|
Set CoordSys Earth Projection 1, 0
Set Distance Units "km"
obj = CreateCircle(x,y,radius) |
|
Вернуться к началу |
|
|
DragonFire
Зарегистрирован: 12.07.2009 Сообщения: 35
|
Добавлено: Ср Июл 29, 2009 8:46 am Заголовок сообщения: |
|
|
Создается эллипс с радиусом в 10 градусов (а может еще чего?), но точно не километров, т.к. километров в нем получается по горизонтале примерно 91 а по вертикали 110. |
|
Вернуться к началу |
|
|
DragonFire
Зарегистрирован: 12.07.2009 Сообщения: 35
|
Добавлено: Пт Июл 31, 2009 12:01 am Заголовок сообщения: |
|
|
И чего, никто не знает как работать с земной проекцией? |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Вс Авг 02, 2009 11:10 am Заголовок сообщения: |
|
|
Воссоздал все действия, которые я описал в окне MapBasic в MapInfo. Все получилось. В чем у вас проблема?
|
|
Вернуться к началу |
|
|
DragonFire
Зарегистрирован: 12.07.2009 Сообщения: 35
|
Добавлено: Вс Авг 02, 2009 11:58 am Заголовок сообщения: |
|
|
Открываю таблицу
Open Table "C:\Table1.tab"
Map From "Table1"
Задаю проекцию и расстояние (как у Вас)
Set CoordSys Earth Projection 1, 0"
Set Distance Units \"km\"
Создаю временную таблицу
Create Table tmp ("Номер" SmallInt,"Название" Char(50)) File "C:\tmp.tab" Type DBF CharSet "WindowsCyrillic"
Create Map For tmp
Add Map Window FrontWindow() Layer tmp
Рисую объект
Dim o_Ellipse as Object
Create Ellipse Into Variable o_Ellipse (X-0.5,Y-0.5) (X+0.5,Y+0.5)
Insert Into tmp (Название,obj) Values ("Круг",o_Ellipse)
Получаю такую картинку:
Как видно из рисунка - получился не круг с радиусом 0.5, а эллипс 110 на 60 км... |
|
Вернуться к началу |
|
|
DragonFire
Зарегистрирован: 12.07.2009 Сообщения: 35
|
Добавлено: Вс Авг 02, 2009 12:03 pm Заголовок сообщения: |
|
|
А вот я тоже воссоздал свои действия в окне MapBasic. Тот же результат:
|
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Вс Авг 02, 2009 1:39 pm Заголовок сообщения: |
|
|
1. Не видно координатной системы некой таблицы "C:\Table1.tab". Если она отличается от CoordSys Earth Projection 1, 0, то это может повлиять на результат.
2. Не понял как вы воссоздали последовательность действий в окне MapBasic? Просто так скопировать туда текст - это не приводит к реализации этих действий. Нужно на каждой команде нажать клавишу Enter, последовательно. В вашем случае я не смог, на командах:
Set CoordSys Earth Projection 1, 0"
Set Distance Units \"km\"
выдает ошибку. На первой команде кавычка в конце лишняя. На второй - маскировка \" не нужна, нужно просто "
Это говорит о том, что их окна MapBsic вы не производили эти действия. |
|
Вернуться к началу |
|
|
DragonFire
Зарегистрирован: 12.07.2009 Сообщения: 35
|
Добавлено: Вс Авг 02, 2009 2:53 pm Заголовок сообщения: |
|
|
1. Именно у этой таблицы и задана такая координатная система... И от этого все проблемы...
2. Прошу прощения, несколько команд было в буфере, поэтому не обратил внимания что ошибки произошли.
Вот точно работающий код:
Close All Interactive
Open Table "F:\Projects\C#\MapInfo\TestMapInfo\Map\MAP\Гидр_l.TAB" Interactive
Map From Гидр_l
Set CoordSys Earth Projection 1, 0
Set Distance Units "km"
Create Table tmp ("Номер" SmallInt,"Название" Char(50)) File "C:\tmp1.tab" Type DBF CharSet "WindowsCyrillic"
Create Map For tmp
Add Map Window FrontWindow() Layer tmp
Dim o_Ellipse as Object
Create Ellipse Into Variable o_Ellipse (36-0.5,51.5-0.5) (36+0.5,51.5+0.5)
Insert Into tmp (Название,obj) Values ("Круг",o_Ellipse)
А вот таблица:
http://ifolder.ru/13367452
З.Ы. Только путь к карте надо поправить...
З.З.Ы А если еще дописать потом
print SessionInfo(1)
print TableInfo(Гидр_l,37)
print TableInfo(tmp,37)
То отчетливо видно что СКвсех таблиц и сессии совпадают... |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Вс Авг 02, 2009 4:04 pm Заголовок сообщения: |
|
|
Подождите, вам надо нарисовать круг радиусом 10 км, в исходном посте.
Круг радиусом 10 км рисуется командой CreateCircle. Команда Create Ellipse, рисует эллипс, причем ее формат:
Create Ellipse
[ Into { Window window_id | Variable var_name } ]
( x1, y1) ( x2, y2)
[ Pen . . . ]
[ Brush . . . ]
т.е. вы задаете КООРДИНАТЫ границ эллипсы. Координаты у вас в градусах! Это расстояние у вас в километрах, но оно никак не влияет на команду Create Ellipse. Поэтому или вы самостоятельно переводите координаты в километры, или пользуйтесь CreateCircle.
Вставил вместо вашей команды
Create Ellipse Into Variable o_Ellipse (36-0.5,51.5-0.5) (36+0.5,51.5+0.5)
такую
o_Ellipse = CreateCircle(36,51.5,1)
и все получилось. |
|
Вернуться к началу |
|
|
DragonFire
Зарегистрирован: 12.07.2009 Сообщения: 35
|
Добавлено: Вс Авг 02, 2009 4:35 pm Заголовок сообщения: |
|
|
Да, у меня теперь тоже
Гениально, спасибо огромное!
Еще вопрос - а как добавить фиксированный текст в ту же таблицу к кругу? Проблема вот какая - там надо указать размер блока, в который текст вписываться, причем установки размера шрифта игнорируются.
А как определить какой по размеру блок нужен тексту? Сейчас у меня это сложная функция зависящая от масштаба карты и количества символов.
А нет ли стандартных методов? |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Вс Авг 02, 2009 8:09 pm Заголовок сообщения: |
|
|
1. Может быть проще будет подписать круг, т.е. вписать необходимый текст в одно из полей таблицы с кругом, и включить вывод подписей из этого поля. Подписи в MapInfo очень неплохо реализованы.
2. CreateText(window_id , x , y , text , angle , anchor , offset) |
|
Вернуться к началу |
|
|
DragonFire
Зарегистрирован: 12.07.2009 Сообщения: 35
|
Добавлено: Вс Авг 02, 2009 9:26 pm Заголовок сообщения: |
|
|
А может тогда стоит создать объект "точка" с подписью?) |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Пн Авг 03, 2009 4:21 pm Заголовок сообщения: |
|
|
Можно и точку с подписью, если есть желание плодить объекты на слое |
|
Вернуться к началу |
|
|
DragonFire
Зарегистрирован: 12.07.2009 Сообщения: 35
|
Добавлено: Пн Авг 03, 2009 9:24 pm Заголовок сообщения: |
|
|
Мне нужно перемещать надпись отдельно от круга
Кстати, не подскажите в сторону каких команд копать... |
|
Вернуться к началу |
|
|
|