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

координаты

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
координаты
 
Помогите пожалуйста. Запутался. Перевожу метры в градусы. Метры с минусом на карте мира. :cry:

procedure TfrmTestMap.mvMapMouseMove(Sender: TObject; Shift: TShiftState;
 X, Y: Integer);
var
 Point: TDOUBLEPOINT;
 Height : double;
 gradus  : array[0..32] of char;
begin
 Point.X        := mvMap.MapLeft + X;
 Point.Y        := mvMap.MapTop + Y;
 mvMap.ConvertMetric(Point.X,Point.Y,PP_PICTURE,PP_GEO);
 FillChar(gradus[0], 32, 0);
 mapPlaneToPointFormatString(mvMap.MapHandle, Point.X, Point.Y, Height, gradus, 32);
 sbStatus.Panels[0].Text := Trim(gradus);
end;

Выдаёт ошибку
[dcc32 Error] Frmmap.pas(294): E2010 Incompatible types: 'PDouble' and 'Double'
[dcc32 Error] Frmmap.pas(294): E2010 Incompatible types: 'PDouble' and 'Double'
[dcc32 Fatal Error] Createobj.dpr(5): F2063 Could not compile used unit 'Frmmap.pas'
 
Функция mapPlaneToPointFormatString принимает на вход указатели на переменные  X, Y, H.

Вызов должен выглядеть примерно так
mapPlaneToPointFormatString(mvMap.MapHandle, @Point.X, @Point.Y, @Height, gradus, 32);

Код
// Пересчитать значение координат из плоских прямоугольных координат документа (метры)
 // в систему, определяемую форматом отображения текущих координат
 // и сформировать строку
 // hmap    - идентификатор открытых данных
 // x, y    - координаты точки в радианах в соответствии с текущими параметрами
 //           проекции (mapGetDocProjection)
 // h       - высота точки (указатель может быть равен нулю)
 // place   - адрес строки для записи результата
 // size    - размер выделеной строки (не менее 256 байт)
 // Пример строки:
 // B= -73° 27' 04.53"  L= 175° 51' 21.07"  H= 109.51 m (WGS84)
 // X= 6 309 212.12 м   Y= 7 412 249.25 м (СК42)
 // При ошибке возвращает ноль

function mapPlaneToPointFormatString(aMap : HMAP; X, Y, H : PDouble;        
                                     place : GTKPCHAR; size : integer) : integer;
 {$IFNDEF LINUXAPI} stdcall {$ELSE} cdecl {$ENDIF}
external sGisAcces;
 
Выдает странные цифры...
 
Просьба подсказать значения пары координат, для которых неправильно выполняется пересчет.
Вариант установки-получения координат через свойства компонента оставлен для совместимости со старыми версиями.
Вместо
Point.X        := mvMap.MapLeft + X;
Point.Y        := mvMap.MapTop + Y;
надо использовать GetPoint, SetPoint (особенно для геодезии)
 
Цитата
Andrey Gheleznyakov написал:
Загрузить файлыросьба подсказать значения пары координат, для которых неправильно выполняется пересчет.
Андрей Владиславович, а зачем Вам эти пары если у него
Цитата
procedure TfrmTestMap.mvMapMouseMove(Sender: TObject; Shift: TShiftState;
 X, Y: Integer);
var
 Point: TDOUBLEPOINT;
 Height : double;
 gradus  : array[0..32] of char;
begin
   Point.X        := mvMap.MapLeft + X;
   Point.Y        := mvMap.MapTop + Y;
   mvMap.ConvertMetric(Point.X,Point.Y,PP_PICTURE,PP_GEO); /// экранные ==> радианы
   FillChar(gradus[0], 32, 0);
   mapPlaneToPointFormatString(mvMap.MapHandle, Point.X, Point.Y, Height, gradus, 32); /// радианы берутся как метры и переводяться в ===> строку
   sbStatus.Panels[0].Text := Trim(gradus);
end;
Естественно у человека получится  геодезия соответствующая 0,0 проекции карты , как правило осевой и параллель главной (средней) точки


+ и вообще, функция очень странно описана

Цитата
// Пересчитать значение координат из плоских прямоугольных координат документа (метры)
// в систему, определяемую форматом отображения текущих координат
// и сформировать строку
// hmap    - идентификатор открытых данных
// x, y    - координаты точки в радианах в соответствии с текущими параметрами
//           проекции (mapGetDocProjection)
// h       - высота точки (указатель может быть равен нулю)
// place   - адрес строки для записи результата
// size    - размер выделеной строки (не менее 256 байт)
// Пример строки:
// B= -73° 27' 04.53"  L= 175° 51' 21.07"  H= 109.51 m (WGS84)
// X= 6 309 212.12 м   Y= 7 412 249.25 м (СК42)
// При ошибке возвращает ноль
Это как ?  :|  
Изменено: KFF - 25.10.2017 21:44:06
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
В описании функции опечатка. Координаты в метрах. Исправим, спасибо!
Страницы: 1
Читают тему (гостей: 1)



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

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