На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Странности с преобразованием координат

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: Пред. 1 2 3 След.
RSS
Странности с преобразованием координат, ошибка или так задумано?
 
Цитата
У нас есть координаты точек, но мы не можем проверить, возможно ли для них преобразование координат.

if (mapIsGeoSupported(hMap)!=0)
ТОГДА ПРЕОБРАЗОВЫВАЕТ
else
НЕ ПРЕОБРАЗОВЫВАЕТ.
======================
В терминологии КБ называется "поддерживается преобразование или нет"
Изменено: KFF (Фёдор) - 25.11.2010 19:57:19
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Это не то. Функция mapIsGeoSupported показывает, поддерживает ли карта геодезические координаты в принципе. А нужно узнать, возможно ли преобразование для конкретной точки. Это важно, поскольку не каждые исходные значения координат могут быть корректно преобразованы в той или иной проекции. Другими словами, у меня есть координаты XY или BL. Нужно узнать, можно ли их преобразовать соответственно в BL и XY. Было бы хорошо, если бы методы mapGeo2Plane и mapPlane2Geo возвращали ошибку в случае неудачи преобразования.
Изменено: snav - 25.11.2010 21:32:23
 
Не знаю откуда вызываются функции mapGeo2Plane

но в АПИ есть

// Преобразование из геодезических координат в радианах
// в метры на местности в соответствии с проекцией карты
// (поддерживается не для всех карт !)
// hmap - идентификатор открытых данных
// Bx,Ly  - преобразуемые координаты
// на входе радианы, на выходе - метры
// При ошибке возвращает 0

_MAPIMP long int _MAPAPI mapGeoToPlane(HMAP hmap,double *Bx, double *Ly);
которая При ошибке возвращает 0.
 
Название функций действительно спутал. Но суть не в этом. В первом сообщении я привел пример, где функции не возвращают код ошибки, при это преобразовывают некорректно.
 
Видимо нужно расставить точки над И.
Разрабочикам обьяснить в чём проблема, а господину snav помочь, обьяснив суть его вопроса
============================
Имеется базовая, пользовательская карта , допустим со следующими характеристиками:
WGS84, UTM, обзорно географическая, Масштаб 1:1 00 000
осевой = 37Е
первая главная 52N
вторая главная 50N
цетральный 51N
----------------
Создаю системный точечный объект
Код
procedure TForm1.Button1Click(Sender: TObject);
var  P   : TDoublePoint;
     Obj : HObj;
begin
  P.X:=pi*-42/180;
  P.Y:=pi*164/180;
  Obj:=mapCreateSiteObject(MapView1.MapHandle,MapView1.MapHandle);
  mapRegisterObject(Obj, 1000001,OL_MARK);
  Caption:=IntToStr(mapAppendPointGeoWGS84(Obj,P.X,P.Y));
  mapCommitObject(Obj);
end;

Координаты B=42S  L=164E (район Австралии)
----------------
Получаю точку с координатами
B=050.99999342N   L=037.00002571E
Результат выполнения функции mapAppendPointGeoWGS84(Obj,P.X,P.Y) = 1
Результат выполнения функции mapCommitObject(Obj) = 4;
---------------
Суть вопроса открывшего тему.
Почему при добавлении координат объектов которые явно не поодерживаются параметрами карты
функции добавления точек не возвращают нулевой результат, а срабатывают корректно ХОТЯ
координаты на входе не равны координатам на выходе.
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Ну что, так всё и останется?
 
Если на входе некоторой функции приходит широта севернее 90 градусов или южнее -90 градусов, то она автоматически будет преобразована к ближайшему полюсу без выдачи кода ошибки.
Функция выдаст ошибку, если указатель на координату или HMAP будут иметь нулевое значение.
Для любой проекции указанные области по широте являются недопустимыми.
В них не могут создаваться объекты.
Небольшие выходы за полюс, как в Вашем примере, могут происходить при преобразованиях проекций и
в других задачах. Программа корректирует эти ситуации.


Оценить насколько недопустимое значение координат на входе можно, но тогда нужно вводить допуск на расхождение координат (порог точности) и принудительный контроль. Что существенно замедлит вычисления.
Речь идет именно о вычислительных функциях, а не об интерфейсных функциях ввода с клавиатуры. Поэтому приоритет отдан скорости обработки.
 
Олег, ладно. За пределами 90 градусов по широте ваша политика ясна. Это хотя бы я могу отследить сам.
Но как быть с другими ситуациями, описанными здесь?
1. У меня есть точка на экране. Я перевожу ее в координаты (X,Y) на местности. Я не знаю (и не могу знать!), имеет ли эта точка корректные координаты (B,L). Всё что я могу - это вызвать вашу функцию PlaneToGeo, которая и должна мне это сообщить. Вместо этого я получаю не понятно что.
2. Другой случай описан Фёдором в сообщении #15. Там геодезические координаты лежат в пределах +-90 градусов. Как быть здесь?
 
Сложность в том, что нет формализованных правил определения допустимости координат точки для произвольной проекции.
Для некоторых проекций можно сделать предположения. Например, для всех топокарт (42,63,95,UTM) допустимые координаты по долготе должны быть от осевого меридиана в пределах +\- 30-40 градусов (условное значение, можно и больше, но начинает расти искажение при пересчете XY->BL->XY), для цилиндрической Меркатора широта должна быть где-то в пределах +\- 70 градусов и т.д.
Для многих проекций ограничение зависит от числовых параметров проекций.

Нужно отработать правила для разных проекций и сделать справочную функцию, которая будет предупреждать,
что данная точка за пределами допустимой области. Сейчас полного анализа по проекциям нет. Со временем добавим.
А сейчас функция PlaneToGeo получила одно число и вернула другое. Ей не с чем сравнить значение, чтобы вернуть код возврата.
 
Здравствуйте, господа разработчики!
Помогите разобраться с одной странностью, которая возникает у меня во время добавления объекта на карту из классификатора.
Суть в следующем при нажатии левой кнопкой мыши по карте я получаю ее координаты в пикселях (е.х , е.у), затем выбираю необходимый мне объект из открывшегося окна классификатора и нажимаю кнопку "Выбрать" и объект появляется именно там где я указал мышью.
Но при переводе в систему координат mapPlaneToGeo42 объект появляется совсем в другом месте?? Почему так происходит??? Я использую GIS ToolKit 11, пишу на C#.

Код получения координат при движении мышки по карте
private void MapView_OnMapMouseMove(object sender, AxaxGisToolKit.IaxMapViewEvents_OnMapMouseMoveEvent e)
       {
           if (!MapView.MapShow) return;
           xx = e.x;
           yy = e.y;
           slMap1.Text = MapView.MapName;
           slMap2.Text = "1 : " + MapView.ViewScale;
           MouseXY.SetPoint(MapView.MapLeft + xx, MapView.MapTop + yy);
           MouseXY.GetPoint(ref xx, ref yy);
           Program.ConvertCoordinates.mapPlaneToGeo42(MapView.MapHandle, ref xx, ref yy);
           xx = xx * 180 / Math.PI;
           yy = yy * 180 / Math.PI;
           slMap3.Text = "Широта= " + Math.Round(xx, 7);
           slMap4.Text = "Долгота= " + Math.Round(yy, 7) + "   (СК42)
       }


if (AddObj.Checked) //Добавление объекта на карту
           {
               if (!MapSelectObjectRsc.ExecuteForMapObj(MapObj.C_CONTAINER, true)) return;
               MapSelectObjectRsc.RestoreEnabled = true;
               MapEditMetric.MetEditMode = TxEditMode.emCreate;
               MapSelectObjectRsc.Show();
               MapPoint.PlaceInp = TxPPLACE.PP_PICTURE;
               MapPoint.SetPoint(xx, yy);
               MapObj.Metric.Append(0, MapPoint.C_CONTAINER);
               MapObj.Commit();
               MapView.Refresh();
           }

На скрине прилагаю паспорт карты, которую я использую.
Прошу Вас оказать помощь и подсказать как это реализовать кодом. Заранее спасибо!!
Страницы: Пред. 1 2 3 След.
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности