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

Andrey Gheleznyakov (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » Andrey Gheleznyakov
Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 280 След.
Оживление старого проекта на GISToolActive12Free
 
До первого открытия карты (в инструкции это должно быть написано)  необходимо взывать функцию из библиотеки gislink. В примере я этого не увидел.
Оживление старого проекта на GISToolActive12Free
 
Библиотека gislink и набор dll из одного и того же комплекта (версии)?
Оживление старого проекта на GISToolActive12Free
 
Вы в итоге в какой версии GTK работаете (наборе библиотек)?
Из какого комплекта gislink?
Что значит "отвалился"? По мне, 2 мс лучше 140 мс.
Создание preview для элементов классификатора, Требуется создать форму с предварительном просмотром всех объектов классификатора
 
Воспользуйтесь функцией АПИ (описана в vecexapi.h)

// ============================================================­====
//              Экспорт изображения в SVG
// ============================================================­====

// Экспорт изображения карты в формат SVG
// Изображение формируется в базовом масштабе карты с заданным разрешением
// handle  - идентификатор диалога, которому посылаются сообщения WM_PROGRESSBARUN
// hmap    - идентификатор открытых данных
// hsite   - идентификатор открытой пользовательской карты
// hselect  - фильтр загружаемых объектов и слоев, если необходима выборочная обработка данных
// svgname - имя создаваемого файла SVG
// precision - число точек на метр изображения
// error - поле для записи кода ошибки (см. maperr.rh)
// При ошибке во входных данных возвращает ноль

_VECIMP long int _VECAPI SaveMapToSVG(HMESSAGE handle, HMAP hmap, HSITE hsite, HSELECT hselect,
                                     const WCHAR* svgname, double precision, long int* error);
1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
У Вас неправильно организовано задание условий поиска для случая нескольких карт (данный вопрос обсуждался неоднократно).

При наличии нескольких карт необходимо сначала задать все ограничения для всех карт (в цикле или еще как), а затем начинать поиск в цикле по объектам.
Например, у нас две карты:

// Условие для первой карты  
сMapSelect.SiteNumber = 0;
сMapSelect.AddSemantic(3099,"302539376",SC_EQUAL);  // идентификатор ОСМ

// Условие для второй карты  
сMapSelect.SiteNumber = 1;
сMapSelect.AddSemantic(3099,"302539376",SC_EQUAL);  // идентификатор ОСМ

Далее начинаем поиск.

У Вас оператора "сMapSelect.SiteNumber ="  нет совсем.

По Вашей логике поиск под GUID ведется по первой карте, а далее NEXT ищет любые объекты в следующих картах.
Масштабирование карты согласно выделенной зоне
 
Для QDMapView методов вычисления масштаба по фрейму и переход в центр изображения нет.
Тексты таких методов из GIS ToolKit ниже. Полные исходные тексты [URL=https://gisinfo.ru/download/?id=312]https://gisinfo.ru/download/?id=312[/URL]

Установить масштаб для отображения заданного фрагмента целиком
в окне.

procedure  ScaleByFrame(const frame: TDFRAME;  place: TPPLACE);

Описание:

Метод устанавливает текущий масштаб отображения  карты таким образом, чтобы заданный фрагмент целиком отображался в окне. Фрагмент задается прямоугольной областью,  которая указывается посредством координат левого нижнего и правого верхнего  углов. Координаты этих могут быть заданы либо структурой TDFRAME (X1,Y1 - левый нижний угол, X2,Y2 -  правый верхний угол), либо двумя точками  TDOUBLEPOINT.

Координаты могут быть заданы в разном формате представления  координат – в радианах, в метрах, в пикселях экрана. В каком именно виде  представлены координаты, определяется параметром place.

//==========================================================­==

// Установить масштаб для отображения заданного фрагмента в окне

// фрагмент - X1,Y1 - левый нижний угол, X2,Y2 - правый верхний угол

//==========================================================­==

procedure TMapViewWindow.ScaleByFrame(const frame: TDFRAME;

                                     place: TPPLACE);

var

 dmapframe: TMAPDFRAME;

 scale1, scale2, realscale : double;

 rend: boolean;

 tp : TDOUBLEPOINT;

begin

 if MapHandle = 0

   then exit;

 dmapframe.X1 := frame.X1;

 dmapframe.Y1 := frame.Y1;

 dmapframe.X2 := frame.X2;

 dmapframe.Y2 := frame.Y2;

 dmapframe := ConvertDFrame(dmapframe, place, PP_PICTURE);

 tp.X := dmapframe.X1 + (dmapframe.X2 - dmapframe.X1)/2;

 tp.Y := dmapframe.Y1 + (dmapframe.Y2 - dmapframe.Y1)/2;

 ConvertMetric(tp.X, tp.Y, PP_PICTURE, PP_GEO);

 scale1 := (Abs(dmapframe.X2 - dmapframe.X1) / ClientWidth);

 scale2 := (Abs(dmapframe.Y2 - dmapframe.Y1) / ClientHeight);

 scale1 := Max(scale1, scale2);

 realscale := mapGetRealShowScale(MapHandle);

 scale2 := scale1 * realscale;

 rend := FRendering;

 Rendering := false;

 SetViewScale(trunc(scale2));

 SetCenter(tp, PP_GEO);

 Rendering := rend;

end;

//==========================================================­==

//==========================================================­==
// установить указанную точку в центр карты
//==========================================================­==
procedure TMapViewWindow.SetCenter(const aPoint : TDOUBLEPOINT; aPlaceIn : TPPLACE = PP_PLANE);
var
 pp: TDOUBLEPOINT;
 ii : integer;
 hh1 : double;
begin
 if MapHandle = 0
   then exit;

 pp  := aPoint;
 ii  := 1;
 hh1 := 0;

 case aPlaceIn of
   PP_PLANE : mapPlaneToPicture(MapHandle, pp.X, pp.Y);
   PP_MAP   : mapMapToPicture(MapHandle, pp.X, pp.Y);
   PP_GEO   :  begin
                 ii := mapGeoToPlane(MapHandle, pp.X, pp.Y);
                 if (ii <> 0)
                    then mapPlaneToPicture(MapHandle, pp.X, pp.Y);
               end;
   PP_GEOWGS84 :  begin
                 ii := mapGeoWGS84ToPlane3D(MapHandle, pp.X, pp.Y, hh1);
                 if (ii <> 0)
                    then mapPlaneToPicture(MapHandle, pp.X, pp.Y);
               end;
 end;

 if (ii <> 0)
  then begin
   MapLeft := round(pp.X) - round(ClientWidth div 2);
   MapTop  := round(pp.Y) - round(ClientHeight div 2);
  end;

end;
//==========================================================­==
Изменено: Andrey Gheleznyakov - 10.01.2024 16:26:20
Оживление старого проекта на GISToolActive12Free
 
Это наш продукт GIS ToolKit Free. Версия 12, которая уже не поддерживается. При наличии у Вас комплекта библиотек все должно работать без ограничений. Данный продукт к GIS ToolKit Active Free имеет отношение в части общих библиотек ГИС-ядра.
1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
Для наглядного выделения необходимо устанавливать подходящий масштаб отображения карты. Также можно подобрать цвета выделения.
При выборе режима выделения необходимо учитывать тот факт, что объекты могут иметь разную локализацию, например, точечные лучше выделять условным знаком из классификатора, но требуемым цветом.
Константа должна иметь значение OS_SELECT = $00000002;
1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
Вот работающий код. Не надо вызывать методы для группового выделения. Пример по карте из инсталляции.

ПоискПоКарте = ЭтаФорма.ЭлементыФормы.axMapFind1;
ОбъектКартыДляПоиска = ПоискПоКарте.cMapObj;    

ПоискПоКарте.Active = Ложь;
ПоискПоКарте.FindPoint = Ложь;  

   SC_CMAND = 32; // выполняются все

поиск_фильтр = ПоискПоКарте.cMapSelect;
поиск_фильтр.ClearAll(); //сбросить фильтр поиска по всем картам (доступны все объекты)
// установить фильтр по двум занчениям семантики одновременно
   поиск_фильтр.SemanticLink = SC_CMAND; // должны совпасть оба значения семантики
   поиск_фильтр.AddSemantic(9,"Е-22, М-7",SC_EQUAL);  // собственное название
поиск_фильтр.AddSemantic(3,"Действующий",SC_EQUAL);  // состояние зададим как псевдоним для элемента списка значений

// способы выделения объектов карты
   OS_SELECT = 2; // выделить согласно настройкам MapObj

ОбъектКартыДляПоиска.St yle = OS_SELECT; // найденный объект необходимо подсветить контуром
ОбъектКартыДляПоиска.StyleSelect = 7; // выделение морганием

ПоискПоКарте.Active = true;

Если ПоискПоКарте.First() = Ложь Тогда
Сообщить("Объект автодорога с названием 'Е-22, М-7' и статусом 'Действующий' не найдена");
Возврат;
КонецЕсли;

ОбъектКартыДляПоиска.Center(); // сдвинем объект в центр  
Система координат карты
 
Да, правильно поняли.
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 280 След.



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

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