Подключили на рабочее место наше приложение у которого первая форма - информация с базы данных, вторая форма карта на базе TMapScreen [IMG]http://delphi-gis.ucoz.ua/Images/ForForum/2014/img057.png[/IMG]
Мониторы имеет разрешение: [IMG]http://delphi-gis.ucoz.ua/Images/ForForum/2014/img058.png[/IMG] [IMG]http://delphi-gis.ucoz.ua/Images/ForForum/2014/img059.png[/IMG]
ВОПРОС: почему на втором мониторе, метрика которого не совпадает с основным, чёрная полоса в нижей части.
П.С. в первом мониторе чёрная полоса снизу - это сам рисунок.
Здравствуйте господа разработчики ! Просьба ответить что меряет вот эта функция (при наличии подобъектов у линейного объекта) и второй вопрос, как измерить длину до точки по контуру конкретного подобъекта :?:
[CODE]// Вычисление длины объекта от начала до заданной точки // Obj - идентификатор объекта карты в памяти // point - координаты точки; расположенной вдоль(вблизи) объекта // Если точка не на объекте - ищется ближайшая точка на контуре // Координаты точки обновляются! // При ошибке возвращает 0
function mapLengthToPoint(Obj : HObj; Point : PDoublePoint): double; {$IFNDEF LINUXAPI} stdcall {$ELSE} cdecl {$ENDIF} external sGisAcces;[/CODE]
Просьба пояснить механизм работы со строчными семантиками длина значения которых превышает 255 символов. Сразу предупреждаю, [B]семантика не повторяемая [/B]! На данный момент, мне известны следующие функции mapAppendSemantic mapSetSemanticValue mapDeleteSemantic mapSemanticValue mapSemanticCodeValue
первые две добавляют, третья удаляет а четвёртая и пятая функции читают семантики с объекта. Например, у меня длина семантики 260 символов и содержит форматированный текст который разбирается внутри IML библиотеки [I]9-UKBB\+00:00;9-KR\+00:00;9-CH\+00:00;9-DORER\+00:00;9-VABOD\+00:00;9-OSDOR\+00:00;9-ESALO\+00:00;9-OGLAR\+00:00;9-ODS\+00:00;9-BULAN\+00:00;8-RABEN\09:46;8-MIMKO\09:55;8-TEPLO\09:57;8-KONIP\10:01;8-UKBB\10:07;8-USTIL\09:42;7-5[/I] Нужно получить то, что я отправляю с программы
работа ядра: Семантика [B]разбивается на 2 части[/B] которые не вписываются в логику работы семантик , в частности 1. при удалении с ГИС Карты, каким то "чудным" образом, приложение "знает" что нужно удалить "хвост" бОльший 255 значений 2. при таком же удалении семантики номер Х, удаляется только первая её часть, а "хвост" НЕ удаляется 3. при выполнении команд mapAppendSemantic для таких семантик - утверждение [B] // Если такая семантика была и она не повторяемая - значение заменяется // 10/07/06[/B] не выполняется. Объект дополняется новой парой значений 4. при попытке коррекции значения функцией mapSetSemanticValue корректируется только первая её часть 5. при чтении семантики - считывается только первая её часть
Как это вписывается в логику работы с НЕ ПЕРЕЧИСЛИМЫМИ семантиками ? Как работать с такими семантиками?
Я понимаю что созданная мною тема является очередным баяном. Эти баяны создаются не потому что я хочу кого-то в чём то упрекнуть, а потому что, вчера искал 15 минут ошибку. Ошибка оказалась в порядке организации доступа к функциям ядра. Описание: Создаётся объект у которого несколько подобъектов. Через функцию mapAppendPointGeoWgs84 добавляется метрика НО. Часть точек метрики является результатом функции mapGetCrossPoint (то есть в плане) В результате, получаю линейный объект-маршрут и вставленная точка "обрезки" в плане но через mapAppendPointGeoWgs84 На следующем витке приложения, эта метрика считывается функцией mapGetPointGeoWgs843d и получаю "рекламное табло" с красной надписью [B]Floating point overflov[/B] Средствами ГИС Оператора по клику на объект - получаю то же "рекламное табло"
Вопрос и просьба Почему нельзя поставить на вход функция mapAppendPointGeoХХХ ограничения по "ГЕО" на первый параметр -pi/2 .... pi/2 (широта) на второй параметр -2*pi .... 2*pi (долгота) - (диапазон распахнут потому что так сказала Е.Кузнецова http://gisweb.ru/forum/messages/forum14/topic6642/message46283/#message46283 )
то есть единственную строчку: if (ABS(X)>PI/2) || (ABS(Y)>2*PI) return 0
ЕСЛИ технология не позволяет сделать этого, например, есть негласное правило что mapAppendPointХХХХХХ должна что-то добавить в любом случае, тогда if (ABS(X)>PI/2) X=Sign(X)*PI/2; // обрезка до ±90° if (ABS(Y)>2*PI) Y=2*Sign(Y)*PI; // обрезка до ±360°
В таком случае, оконечный программист получит ТО что Вы декларируете (ошибка при выполнении mapAppendPointGeoХХХ) или корявые данные которые он вставил. НО это будет не "красная рекламная табличка"
П.С. кстати, эта же табличка вылетает при вставке координат ±90°(полюс) по широте при импорте с ARINC
Начну "с плеча". Прежде чем Бил Гейтс запустил в мир первую "многозадачную" операционную систему он приблизительно 10 лет изучат предметную область и сферы её применения. КБ Панорама, "ввела" режим "Автономная работа" с карами по принципу "авось пройдёт". Свои слова о обосновываю тем, что открыл уже несколько тем по функции установки автономного доступа к карте в которой мне ответили, что это режим работает по методу "кто хитрее тот и прав" то есть "кто первый залочил того и карта"
Такой подход называется не мультиплетностью и не автономностью, а принципом блокирования объекта... Причём принцип не базируется ни на каком правиле (кто раньше встал того и тапки)
------------- Теперь суть темы. В своих приложениях мы отказались от использования "автономной работы с картой" до лучших времён, то есть до тех пор, пока в КБ выработается чёткая концепция и внятный алгоритм работы нескольких приложений с одной картой..... НО проблема не в приложении, если я в этой ветке. Проблема в другом...
В ГИС Карте 2011, я открываю некую карту Х по умолчанию. Запускаю второй экземпляр программы, неважно в этом же профиле пользователей или другом И немогу редактировать объекты и их удалять. Закрываю оба экземпляра ГИС Карты, открываю по новому всё нормально. Теперь представьте ситуацию с общей картой которую редактирует два пользователя в пределах одного ПК с разными профилями. Один пошёл на обед, оставив открытой карту в своём экземпляре ГИС Карты, а второй в это время, что-то на ней пытается сделать в результате у человека ничего не получается.
ВОПРОС: можно ли как то упорядочить технологию работы с основными продуктами КБ Панорама (ГИС Карта, ГИС Оператор, ГИС Мини ...) в части касающейся "автономной работы" с картами. Если это сложно, то хотябы уберите флаг "Автономной работы" по умолчанию что-бы не вводить в заблуждение пользователей. П.С удаляю объект, а он не удаляется ни в какую
Здравствуйте господа разработчики ГТК. Возник вопрос по методу ScreenRepaint компоненты TMapScreen Наш код написан таким образом, что периодически, функция scrDrawMap внутри нижеописанного метода срабатывает аварийно (многонитевая программа - несколько TThread) После сбоя, методу "уходит" в ветку except Вопрос: Что делает ветка except и когда она срабатывает ???
[CODE]procedure TMapScreen.ScreenRepaint(aPaintRectInWin : PRect); var rect1 : TRECT; position : TPOINT; ScreenDc : HDC; begin
if Assigned(FOnMapScreenUpdate) then FOnMapScreenUpdate(Self, rect1, position.x, position.y);
// FScreenUpdateBeforePaint := false; 27/04/2009
except if ScreenDc <> 0 then pf_scrReleaseDC(FMapScreen); end;
end;[/CODE]
---------------- Код содержит следующую переменную "судба которой "выглядит вот так: [CODE]var ScreenDc : HDC; begin ScreenDc := 0; .... try .... except if ScreenDc <> 0 then pf_scrReleaseDC(FMapScreen); end; end;[/CODE] Второй вопрос, в каком случае срабатывает pf_scrReleaseDC ?
Здравствуйте уважаемый разработчики ! Просьба пояснить чем отличаются функции
[CODE] // Выполнить согласование данных электронной карты // в памяти и на диске (при многопользовательском доступе // к данным) // hmap - идентификатор открытых данных // Если состояние данных в памяти изменилось (по данным // с диска) - возвращает ненулевое значение (1), иначе 0 // Если карта должна быть закрыта - возвращает 2 // (доступ на ГИС Сервер прекращен!) // Если состояние изменилось - необходимо перерисовать // изображение карты // Опрос состояния целесообразно выполнять периодически // в процессе работы приложения _MAPIMP long int _MAPAPI mapAdjustData(HMAP hMap); [/CODE] и [CODE] // Сохранить данные на диск // при работе на Sparc-платформе также сохраняет данные в файлы Intel-платформы // hMap - идентификатор базовой карты // hSite - идентификатор пользовательской карты // При ошибке возвращает 0 _MAPIMP long int _MAPAPI mapFlushData(HMAP hMap, HSITE hSite);[/CODE]
Как и какую использовать в много-нитевой программе (TThread) -------------------- ПО двум открытыми темам. Имеется набор карт, на которых нужно выполнять "долгоиграющие" процессы не отвлекая пользователя от работы, например воссозданием аэронавигационной обсьтановки страны по состоянию на для этого, нужно периодически выполнять сравнение содержимого карты с содержимым базы данных. Из набора карт (12 штук) пользователь может выполнять какие то построения на одной из карт набора, при этом 4 карты обновлдяются воздушной обстановкой одной нитью (Thread) Ещё три карты обновляются другой нитью (локационная обстановка - метки воздушных судов)
[QUOTE] // Установить монопольный доступ ко всем открываемым векторным картам // Ускоряет все операции редактирования карт за счет буферизации // операций записи на диск при значении access не равном 0 // При монопольном доступе другие приложения не смогут // редактировать карту // Если какая-либо карта не может быть открыта в монопольном // доступе - признак автоматически сбрасывается // Возвращает новое значение признака монопольного доступа
_MAPIMP long int _MAPAPI mapSetExclusiveAccess(long int access);[/QUOTE]
Нужна консультация по этой функции. Как она работает в приложении которое может открывать/переоткрывать наборы карт Как она работает для много-нитевых приложений (TThread) Как и когда признак сбрасывается в ноль и как его восстановить не зацикливая программу кодом while mapGetExclusiveAccess()=0 do mapSetExclusiveAccess(1);