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

Контроль входящих данных

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

Вопрос. Кто контролирует входящие данные в эти функции  :?: "тело" функции ядре, или программист использующий функции

Код
// Преобразование из метров на местности (проекция карты)
 // в геодезические координаты в радианах (общеземной эллипсоид WGS84)
 // (поддерживается не для всех карт !)
 // Наличие высоты повышает точность расчетов;
 // функция mapPlaneToGeoWGS84() пытается
 // определить высоту из матрицы
 // Применение :
 // if (mapIsGeoSupported())
 //   {
 //     B = Xmet; L = Ymet;
 //     mapPlaneToGeoWGS84(hMap;B;L);
//   }
 // hmap  - идентификатор открытых данных
 // Bx;Ly - преобразуемые координаты
 // на входе метры; на выходе - радианы
 // H     - высота в точке (метры)
 // При ошибке возвращает 0

function  mapPlaneToGeoWGS84(Map : HMap;var Bx, Ly : double) : integer;
 {$IFNDEF LINUXAPI} stdcall {$ELSE} cdecl {$ENDIF}
external sGisAcces;
function  mapPlaneToGeoWGS843D(Map : HMap;var Bx, Ly,H : double) : integer;
 {$IFNDEF LINUXAPI} stdcall {$ELSE} cdecl {$ENDIF}
external sGisAcces;


Ситуация. На вход своей функции подал некорректные координаты.
Функция mapPlaneToGeoWGS84 выдала

Видимо что-то где-то внутри не проверяется на ноль
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Функция имеет множество веток. Прошу подсказать проекцию карты. Возможно это поможет в поисках ошибки.
 
Александр !
На входе "моего ящика" стоят две функции прямая и обратная
Код
function ххх.DrawTextMarker(ID, Code:Integer; gP1 : T3dPoint; Width : integer; 
  const Text : string; vAlign, hAligh : TValueSign) : integer;
var gPnt2 : T3dPoint;
begin
  gPnt2 := gP1;
  mapGeoWgs84ToPlane3d(FMap, gPnt2.X, gPnt2.Y, gPnt2.Z);
  gPnt2.Y := gPnt2.Y+Width;
  mapPlaneToGeoWgs84(FMap, gPnt2.X, gPnt2.Y);
  DrawTextMarker(id, code, gP1, gPnt2, Text,vAlign,hAligh);
end;


Таких функций у меня 4 (одноименных) перегружаются оператором overload
Проблему обнаружил когда вызвал не ту которую надо, в частности:

На указанную выше функцию попали входящие координаты в метрах (-1350, +14270)
первая функция   mapGeoWgs84ToPlane3d(FMap, gPnt2.X, gPnt2.Y, gPnt2.Z);
пропустила их корректно не выдав код ошибки 0 (я проверял)
результат: значения в +13 степени
который попали на вход второй функции
mapPlaneToGeoWgs84

Крайняя функция, выдала указанную выше ошибку.
-------------
Параметры карты:
тип карты - "Топографическая универсальна местная!
проекция - "Transverxe Mercator"
Эллипсоид - ПЗ90.02
Балтийская система высот
Масштаб 1:25000

Осевой : 49°17'
Параллель главной точки : 55°36'
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Цитата
KFF пишет:
На вход своей функции подал некорректные координаты.
Во времена DOS разработчики писали - ответственность за некорректный вызов лежит на прикладном программисте. В нынешние разработчики выдают бесплатные бета-версии. Ибо проверить все возможные ситуации они просто не могут. После ловли багов бета становится платным релизом.
Изменено: Газонокосильщик - 13.09.2013 21:27:26
 
По сабжу - Фёдор, а зачем рекурсивный вызов?
Цитата
KFF пишет:
Видимо что-то где-то внутри не проверяется на ноль
Далеко не факт. Сам на такие грабли наступал. На самом деле у меня ошибка была в динамических символьных массивах.
Изменено: Газонокосильщик - 13.09.2013 21:32:52
 
Цитата
Газонокосильщик пишет:
а зачем рекурсивный вызов?
нет рекурсивного вызова, есть
Цитата
На входе "моего ящика" стоят две функции прямая и обратная ..... Таких функций у меня 4 (одноименных) перегружаются оператором overload
Одна вызывает другую..
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Код
function ххх.DrawTextMarker(ID, Code : Integer; gP1 : T3dPoint; Width : integer; const Text : string; vAlign, hAligh : TValueSign) : integer;
begin
// .....
  DrawTextMarker(id, code, gP1, gPnt2, Text, vAlign, hAligh);
// .....
end;

Понял, разница в четвёртом параметре.
Страницы: 1
Читают тему (гостей: 1)



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

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