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

PanApi - буфер объекта

Поиск  Пользователи  Правила  Войти
Форум » Архивные темы (доступны только для чтения) » ГИС Карта 2011
Страницы: 1 2 След.
RSS
PanApi - буфер объекта, Создание буфера площадного объекта через MAPACCES.DLL
 
Здравствуйте господа разработчики !
1. Просьба пояснить чем отличаются две функции mapInsideZoneObject и mapZoneLineObject ?
2. Правильный ли результат работы этих функций в ядре ГИС Карта 2011

(жёлтая зона - результат работы mapInsideZoneObject, голубая зона - mapZoneLineObject)
Карта с зонами отправлена на ящик КБ
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
mapInsideZoneObject строит зону внутри (снаружи) замкнутого объекта, а mapZoneLineObject вокруг незамкнутого.
В присланной карте не понял вокруг какого объекта строится зона.
 
Андрей, в присланной карте всего три объекта.
Красный - базовый и два буфера построенные функциями ядра ГИС Карты 2011
---
При построении буфера средствами элементов управления ГИС Карты 2011, получается вообще третья картинка которая не совпадает ни с тем ни другим.
Этот факт наталкивает меня на мысль, что элементы управления "завязаны" на какую то третью функцию или выполняется коррекция объекта.
Странно, что даже голубой объект, который более-менее правильный имеет на картинке "выпуклость" при том, что базовый красный объект
в этой части - линейный.

Просьба проверить работу функций по базовому красному объекту, с шириной буфера 4500 метров
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
При построении зоны в Панораме (верхняя кнопка панели "Расчеты по карте"):
Если объект незамкнутый или замкнутый и выбран тип зоны - внутренняя и внешняя, то вызывается mapZoneObjectEx.
Если объект замкнутый и зона строится снаружи или внутри - вызывается mapInsideZoneObjectEx.
Вы используете функции, которые вызывают эти базовые функции:

_MAPIMP long int _MAPAPI mapInsideZoneObject(double radius,
HOBJ info, long int subject)
{
 if (fabs(radius) < DELTANULL || info == 0 || subject < 0 ) return 0;
 TMap *Map = ((TObjectInfo*) info)->Map;
 return mapInsideZoneObjectEx(radius, info, subject, 0, 0.001 * Map->Scale(), 3.);

_MAPIMP long int _MAPAPI mapZoneLineObject(HMAP hmap, HOBJ info, double radius)
{
 if (hmap == 0 || info == 0 || radius  < DELTANULL ) return 0;
 return mapZoneObjectEx(radius, info, 0, 1, 0.001 * mapGetMapScale(hmap), 3., 3);
}
 
Я использую функции указанные на рисунке в посте номер 1.
Вопрос состоит в том, правильно ли работает mapInsideZoneObject (без ЕХ) ...
если не правильно то (варианты решения):
1. перенаправьте внутри ядра на рабочую функцию
2. удалите вообще неработающую функцию с ядра.
не очень приятно получать "месиво" в результате работы функции ,которая должна строить адекватный буффер.

Если Вы до сих пор не поняли сути проблемы Андрей, просьба пригласить более "тяжёлую артиллерию" (имею ввиду программистов КБ) или
выполнить функцию mapInsideZoneObject(4500, Obj, 0) где Obj - красный объект на карте

П.С. не буду уточнять как его создавать и находить по ключу
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Цитата
KFF пишет:
Я использую функции указанные на рисунке в посте номер 1.

Ну так используйте другие функции - хоть будете понимать почему у зоны такие края

Цитата
KFF пишет:
Вопрос состоит в том, правильно ли работает mapInsideZoneObject (без ЕХ)
.

Работает она так же как и с Ex, потому что она её вызывает (для кого писал её текст)
А Ex работает правильно потому-что зона в Панораме строится нормально.

Цитата
KFF пишет:
если не правильно то (варианты решения):
1. перенаправьте внутри ядра на рабочую функцию
2. удалите вообще неработающую функцию с ядра.

1. именно так и есть
2. да, и все кто её использовал со следующим обновлением ядра получат ошибку линковки

Цитата
KFF пишет:
Если Вы до сих пор не поняли сути проблемы Андрей, просьба пригласить более "тяжёлую артиллерию" (имею ввиду программистов КБ)

Более тяжелой нет - функции построения зоны писал я

Цитата
KFF пишет:
выполнить функцию mapInsideZoneObject(4500, Obj, 0) где Obj - красный объект на карте

Я построил зону в Панораме, убедившись в том что зона строится.

PS
А какая у вас версия ядра. Если 10 то там и будет зона криво строится.
 
Спасибо за ответ, Андрей !

Версия ядра ГИС Карты 2011 , которой я строил зону с задачи PanTask - 11.11.4
Для пущей уверенности, вечером выложу ролик как Ваша функция строит буфер вокруг красной зоны.
Может быть тогда, всё станет на свои места.
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Не надо ролик.
Пришлите сам объект и построенную по нему зону (в общем случае это будет объект с подобъектами).
И напишите ключ исходного объекта.
По тому что вы прислали я не могу понять где что.
 
Цитата
Борзов Андрей пишет:
Не надо ролик.
Андрей, судя по Вашим ответам на тему ролик нужен, в придачу с проверочным кодом и картой которую мне прийдётся выложить на форум.
Если разработчик не признаёт своих ошибок, а пытается спорить с пользователем нужно подключать третью независимую сторону для проведения теста вышеуказанной функции.
Для теста вкладываю:
1. Карту с единственным объектом №166 СКАЧАТЬ
2. Версию ГИС Карты 2011 вместе с ядром mapacces.dll  в котором функция СКАЧАТЬ
3. Тестовую задачу на Паскале по технологии MapApi СКАЧАТЬ
4. Видеоролик(ссылка на ютуб) с пошаговым выполнением тестовой задачи и результатом "создания буфера" функцией, которая объявлена мной как не работающая вначале темы.


Андрей, можете мне верить можете нет, но почему то в ядре постоянные проблемы с геометрией и топологией. Исправляя одну ошибку вносится другая и так бесконечно. Мне очень не хочется переписывать ключевые геометрические расчёты на своей математике.
Причина, в ней нет HMAP, а мне бы хотелось что бы НМАР был, причём чем больше тем лучше.

--------
Теперь мои рассуждение по поводу ошибки внутри функции (может они Вас приблизят к решению проблемы)
Заметил, что если в метрике объекта находятся точки которые очень близко друг к другу (менее метра), внутренний алгоритм начинает "уплывать". Скорее всего это связано с неправильным вычислением углов...
...или, вычислением углов с учётом масштаба карты
...или выполнение расчётов в "виртуальной системе" координат (например PICTURE) у которых метрика загрубляется.
Если объект создаётся без сохранения на карте по которому строится буфер, и в объекте дублирующиеся координаты (которые без mapCoommitObject не удаляются) , буфер может иметь ещё более причудливые и далёкие от основного контура формы.
Изменено: KFF - 13.05.2014 20:32:22
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Не помню выкладывал ли свою библиотеку, но видимо придётся выложить
Может что-то полезное для топологии почерпнут читатели форума (на паскале)
Не тот глуп кто не знает, а тот, кто не знает где искать.
Страницы: 1 2 След.
Читают тему (гостей: 1)



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

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