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

Не обновляются данные с ГИС Сервера

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

Возникла проблема обновления данных с ГИС Сервер.
Версия GisToolKit Free 14.1.1.0
Версия ГИС Сервера 8.3

Сначала наносим объект, назовем его условно ПЕРВЫЙ ОБЪЕКТ на карту,
с помощью визуального компонента TMapEditMetric

// Вписываем семантику
 form_main.MapObj1.Semantic.Delete(-1);
 form_main.MapObj1.Commit;

 SquareTmp := form_main.MapObj1.Square;

 form_main.MapObj1.Semantic.Add(10);
 form_main.MapObj1.Semantic.SemanticValue[1] := IDObject;
 form_main.MapObj1.Semantic.Add(1002);
 form_main.MapObj1.Semantic.SemanticValue[2] := 'не задано';
 form_main.MapObj1.Semantic.Add(1013);
 form_main.MapObj1.Semantic.SemanticValue[3] := 'не задано';
 form_main.MapObj1.Semantic.Add(1016);
 form_main.MapObj1.Semantic.SemanticValue[4] := 'не задано';
 form_main.MapObj1.Semantic.Add(1024);
 form_main.MapObj1.Semantic.SemanticValue[5] := 'не задано';
 form_main.MapObj1.Semantic.Add(1030);
 form_main.MapObj1.Semantic.SemanticValue[6] := 'не задано';
 form_main.MapObj1.Semantic.Add(1017);
 form_main.MapObj1.Semantic.SemanticValue[7] := 'не задано';
 form_main.MapObj1.Semantic.Add(1021);
 form_main.MapObj1.Semantic.SemanticValue[8] := 'не задано';
 form_main.MapObj1.Semantic.Add(1012);
 form_main.MapObj1.Semantic.SemanticValue[9] := FormatFloat('0.0',SquareTmp);
 form_main.MapObj1.Semantic.Add(15);
 form_main.MapObj1.Semantic.SemanticValue[10] := PChar(Num);
 form_main.MapObj1.Commit;

 form_main.mvMap.AdjustData;
 form_main.mvMap.Repaint;

Затем, с помощью компонента TMapFind
ищем на карте другой объект, назовем его условно ВТОРОЙ ОБЪЕКТ
form_main.MapFind1.Active := false;
form_main.MapFind1.FindPoint := false;
form_main.MapFind1.MapSelect.Clear;
form_main.MapFind1.MapSelect.ClearSemantic;
form_main.MapFind1.MapObj.Style := OS_SELECT;
form_main.MapFind1.MapObj.StyleSelect := SEL_LINE;
form_main.MapFind1.MapSelect.AddSemantic(10,bd2.QObjectRealtyIDObject.AsString,SC_EQUAL);
form_main.MapFind1.Active := true;
form_main.MapFind1.First;
form_main.MapFind1.MapObj.Center;
form_main.mvMap.Repaint;

 Затем, с помощью того же компонента TMapFind
 ищем на карте ПЕРВЫЙ ОБЪЕКТ объект
  form_main.MapFind1.Active := false;
  form_main.MapFind1.FindPoint := false;
  form_main.MapFind1.MapSelect.Clear;
  form_main.MapFind1.MapObj.Style := OS_SELECT;
  form_main.MapFind1.MapSelect.AddSemantic(10,bd_Zones.QSanitZonesDopIDObject.AsString,SC_EQUAL);
  form_main.MapFind1.Active := true;
  form_main.MapFind1.First;
  form_main.MapFind1.Center;

   If not form_main.MapFind1.Eof then
   begin
   
   // Вписываем семантику
   SquareTmp := form_main.MapObj1.Square;

   form_main.MapObj1.Semantic.Delete(-1);
   form_main.MapObj1.Commit;
   form_main.MapObj1.Semantic.Add(10);
   form_main.MapObj1.Semantic.SemanticValue[1] := bd_Zones.QSanitZonesDopIDObject.AsString;
   form_main.MapObj1.Semantic.Add(1002);
   form_main.MapObj1.Semantic.SemanticValue[2] := bd_Zones.QSanitZonesDopAdress.AsString;
   form_main.MapObj1.Semantic.Add(1013);
   form_main.MapObj1.Semantic.SemanticValue[3] := bd_Zones.QSanitZonesDopServiceOrg.AsString;
   form_main.MapObj1.Semantic.Add(1016);
   form_main.MapObj1.Semantic.SemanticValue[4] := bd_Zones.QSanitZonesDopINN.AsString;
   form_main.MapObj1.Semantic.Add(1024);
   form_main.MapObj1.Semantic.SemanticValue[5] := bd_Zones.QSanitZonesDopPhone.AsString;
   form_main.MapObj1.Semantic.Add(1030);
   form_main.MapObj1.Semantic.SemanticValue[6] := bd_Zones.QSanitZonesDopFIO.AsString;
   form_main.MapObj1.Semantic.Add(1017);
   form_main.MapObj1.Semantic.SemanticValue[7] := 'не задано';
   form_main.MapObj1.Semantic.Add(1021);
   form_main.MapObj1.Semantic.SemanticValue[8] := bd2.QObjectRealtyAdressShort.AsString;
   form_main.MapObj1.Semantic.Add(1012);
   form_main.MapObj1.Semantic.SemanticValue[9] := FormatFloat('0.0',SquareTmp);
   form_main.MapObj1.Semantic.Add(15);
   form_main.MapObj1.Semantic.SemanticValue[10] := 'П-'+IntToStr(bd_Zones.QSanitZonesDopNum.AsInteger);
   form_main.MapObj1.Commit;
   form_main.mvMap.AdjustData;
   form_main.mvMap.Repaint;
   
   end;

Все работает прекрасно, когда мы наносим и ищем ПЕРВЫЙ ОБЪЕКТ раз, два, бывает три, а вот на третий-четвертый раз
программа вдруг перестает видеть ПЕРВЫЙ ОБЪЕКТ, если быть точнее сам объект на карте есть, а вот семантики, которая вносилась при его создании на экране монитора уже нет.
Соответственно, MapFind не может в это раз найти ПЕРВЫ!Й ОБЪЕКТ на карте.
Причем, если в этот момент перезагрузить пользовательское приложение,
то семантика ПЕРВОГО ОБЪЕКТА появиться на экране монитора.

Такое впечатление, что нет четкого взаимодействия прикладной программы и ГИС Сервера.
Надеемся на команду
form_main.mvMap.AdjustData;
что она решит проблему быстрой синхронизации данных на сервере,
но похоже, что на третий-четвертый раз она или не срабатывает,
или я что-то ни так делаю,
или я чего-то не понимаю.
 
Цитата
Сергей Викторович написал:
Надеемся на команду form_main.mvMap.AdjustData;

Версия GisToolKit Free 14.1.1.0
Версия ГИС Сервера 8.3

При таком разрыве в версиях клиента и сервера не стоит сильно надеяться на корректную работу AdjustData.

Логика Вашей программы очень сильно фрагментирует хранение данных на сервере.
В связи с тем, что Вы каждый раз сначала удаляете все семантики найденного объекта, затем заново их заполняете, объект в хранилище не может быть помещен на то же место и всегда дописывается в новую область.
С времени версии 8.3 было великое множество изменений и в протоколах взаимодействия клиента с сервером, и в системе хранения данных на сервере.
Версия 8.3 просто физически может не знать о том, что от нее просит команда AdjustData, поступившая от клиента 14-ой версии, и вполне возможно, клиент 14 версии не получает полностью блоки данных.
В Вашем случае (сервер версии 8 и клиент версии 14) команда AdjustData скорее вредит, чем помогает.
Без нее и сохранение объекта и поиск будут выполняться по локальному кэшу данных и подобных ошибок быть не должно. Правда поиск не найдет и объектов, сохраненных на ГИС Сервере из других клиентских приложений. Периодически ГИС-ядро само выполняет команду AdjustData, так что даже если Вы не будете ее вызывать, рано или поздно всё равно получите ту картину, что имеете.

Отсюда два совета:

1. Обновить ГИС Сервер до актуальной версии 10.3.

2. При необходимости обновления семантик объекта выполнять именно их обновление (найти нужную у объекта и обновить значение), а не удаление и добавление семантик заново. В этом случае в момент сохранения объекта, если новые значения семантик не превышают по длине предыдущие, данные будут сохранены на том же месте в хранилище, что позволит избежать ненужного разрастания хранилища и его фрагментации.
 
Денис, спасибо.
Ответ как всегда,
просто и доходчиво.

---
Не вопросы, а пожелания.
Скачали последний дистрибутив ГИС Сервера,
посмотрели Руководство.
В нем есть ссылка на gisadmin64.exe
но самого файла нет.
Пришлось переносить эту программу из ГИС Сервер 8.3
причем за несколько раз, копируя нужные ему dll.
Сейчас эта программа gisadmin64.exe установлена вместе с ГИС Сервер 10.3
и запускается.
И еще при описании
MapObj1.Semantic.SemanticValue[2]
написано что оно возвращает значение семантики,
понятнее было бы, если написали: предназначено для редактирования значения семантики.
1.PNG (14.8 КБ)
 
Спасибо за сообщение.
Руководство поправим. Программа gisadmin64.exe в состав ГИС Сервер больше не входит и ее работа не поддерживается.
Функционал данной программы теперь полностью в web-приложении ГИС Администратор (см. раздел "Состояние ГИС сервера"), причем это теперь доступно удаленно - для всех у кого есть доступ к web-приложению.

Цитата
Сергей Викторович написал:
И еще при описании
MapObj1.Semantic.SemanticValue[2]
написано что оно возвращает значение семантики,
понятнее было бы, если написали: предназначено для редактирования значения семантики.

Согласен. Не сразу понятно, что данное свойство работает и на чтение, и на запись.
Поправим.
Спасибо!
 
Переустановили Panorama GIS Server 10.3 приобретенного нами по лицензии с компакт диска.
Возникла проблема при нанесении объекта
без диалога, с заранее заданным ExCode.

Дело в том, что если наносить площадной объект на пустое место карты,
то он сохраняется нормально при выполнении метода

procedure Tform_main.MapEditMetric1StopAction(Sender: TObject);

но если объект наноситься площадной поверх другого площадного объекта,
то тот объект который был внизу, стирается из карты,
на его место наноситься новый наносимый объект,
но уже с ExCode стертого объекта.
В связи с очень срочностью вопроса,
прошу это перепроверить и дать рекомендации.  

MapEditMetric1.EditRegime := erTakeRealPoint;
form_main.MapSelectObjectRsc.MapView := form_main.mvMap;
form_main.MapEditMetric1.EditMode := emCreate;
form_main.MapEditMetric1.StopAction;
MapObj1.CreateObjectByExCode(-1, KM_IDFLOAT2, 10000051, OL_SQUARE);
form_main.MapEditMetric1.StartAction;
Изменено: Сергей Викторович - 14.07.2022 14:26:33
 
Данного фрагмента не достаточно для анализа того, что происходит в приложении.
Пришлите полностью пример.
Страницы: 1
Читают тему (гостей: 1)



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

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