Здравствуйте господа разработчики ! 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 не удаляются) , буфер может иметь ещё более причудливые и далёкие от основного контура формы.