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

Денис Вицко (Все сообщения пользователя)

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

Страницы: Пред. 1 ... 65 66 67 68 69 70 71 72 73 74 75 ... 142 След.
Альтернатива основному маршруту (запасной маршрут), Запасной маршрут
 
[QUOTE]Александр Махин написал:
И опять тупик в передаче параметров nodeStart и nodeFinish.[/QUOTE]

Параметры передаются правильно. Проблема в том, что Вы в них ничего не заполнили.
mapCreateObject только создает экземпляр класса для работы с объектом карты в памяти, но пока Вы в него ничего не положили - там пусто.
Альтернатива основному маршруту (запасной маршрут), Запасной маршрут
 
[QUOTE]Александр Махин написал:
для сшивки двух объектов нужно или нет использовать компонент MapCross???[/QUOTE]

Можно. А можно использовать и MAPAPI. Результат должен быть одинаковый.
Возможно, вам было бы удобнее воспользоваться именно компонентами.

[QUOTE]Александр Махин написал:
И данная функция при работе с не замкнутыми линейными объектами ничего не происходит.[/QUOTE]

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

Проверьте, корректно ли установлены объекты в HOBJ1 и HOBJ2. Это должны быть линейные реально существующие объекты (не обязательно записанные в карту, но имеющиеся в памяти и заполненные в соотв. HOBJ).
При установке типа сшивки [URL=http://help.gisserver.ru/_extra/axGisTool/axGisTool/txobjectlocal.html]TxObjectLocal.OL_LINE[/URL] это могут быть незамкнутые объекты.
Справочно: TxObjectLocal.OL_LINE=0, то есть любое ненулевое значение будет восприниматься как метод сшивки площадных объектов (или замкнутых линейных).
Альтернатива основному маршруту (запасной маршрут), Запасной маршрут
 
[QUOTE]Александр Махин написал:
Вот как я передаю параметры:
[B]1 параметр - MapObj.ObjHandle (1 объектa)
2 параметр - MapObj.ObjHandle (2 объектa)[/B]
[B]3 параметр - написал 32812 (но не знаю это правильно или нет)[/B]
4 параметр - (int)TxLocalObject.OL_LINE
5 параметр - 0.001

Но выдает все равно 0.[/QUOTE]

[URL=http://help.gisinfo.ru/showresult.php?file=seekapi.htm&search=mapGetObjectsUnion#1]mapGetObjectsUnion :[/URL]

[QUOTE] // Объединение(сшивка) двух объектов
// Только для ПЛОЩАДНЫХ или ЛИНЕЙНЫХ объектов !!!
// Не допускается сшивать замкнутый и незамкнутый объекты !!!
[B] // info1 - первый объект карты
// info2 - второй объект карты[/B]
[B] // info - идентификатор объекта, в который будет записан результат[/B]
// method - тип результирующего объекта
//          LOCAL_SQUARE - площадной
//          (на входе только два площадных или линейных замкнутых объекта),
//          LOCAL_LINE - линейный
//          (на входе два площадных или линейных замкнутых объекта,
//           или два незамкнутых объекта)
// precision - точность при дотягивании (в метрах), при precision=0 устанавливается точность
//             0.001 для карт масштаба <= 500000,
//             0.01 для карт масштаба более 500000, если precision больше предложенной, то
//             устанавливается большее значение
// При успешном выполнении возвращает ненулевое значение (параметр info)
// При ошибке возвращает 0

_MAPIMP HOBJ _MAPAPI [B]mapGetObjectsUnion[/B](HOBJ info1, HOBJ info2, HOBJ info,
                                long int method, double precision);[/QUOTE]

Должно быть создано в памяти три разных экземпляра класса работы с объектами карты.
Для этого Вы можете воспользоваться компонентом MapObj, но придется использовать три экземпляра компонента, настроенных на один MapView.
В первый и второй надо установить сшиваемые объекты карты, в третьем будет результат.
TMapView
 
компонент TMapView описан в модуле mapcmp.pas.

Уточните, в связи с чем возник такой вопрос?
В какой среде Вы работаете?
Вопрос про матрицу высот mtw
 
Лучше использовать следующую функцию, особенно если у Вас с картой может быть открыто одновременно несколько матриц высот, - [URL=http://help.gisinfo.ru/showresult.php?file=mtrapi.htm&search=mapGetPrecisionHeightValue#1]mapGetPrecisionHeightValue[/URL]:

[QUOTE] // Выбор значения абсолютной высоты в заданной точке из
 // матрицы с наименьшим размером элемента (более точной)
 // hMap   - идентификатор открытой основной векторной карты
 // Координаты точки (x,y) задаются в метрах в системе координат
 // векторной карты. Возвращает значение высоты в метрах.
 // В случае ошибки при выборе высоты и в случае необеспеченности
 // заданной точки матричными данными возвращает ERRORHEIGHT

 _MAPIMP double _MAPAPI mapGetPrecisionHeightValue(HMAP hMap,double x, double y);[/QUOTE]
Как посчитать произвольную площадь на карте, Как посчитать произвольную площадь на карте
 
Сергей Викторович, тяжело разобраться в Вашем коде, тем более понять по нему логику того, что вы хотите сделать.

Судя по коду, Вы создаете два объекта с помощью функций MAPAPI. Один из них - ObjectSquare, Вы сохраняете в карту физически. Причем, зачем-то,  дважды.

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

Я Вам неоднократно рекомендовал не смешивать без особой необходимости использование компонентов и MAPAPI, так как такой подход требует большей внимательности и глубокого понимания физики процессов, происходящих в компонентах GTK.

Что мешает в данной ситуации всё реализовать только на компонентах?
[QUOTE]1. Создали объект, например, с помощью [URL=http://help.gisserver.ru/_extra/GisTool/GisTool/tmapobjcreateobjectbyexcode.html]TMapObj.CreateObjectByExcode[/URL];
2. Добавили в него метрику [URL=http://help.gisserver.ru/_extra/GisTool/GisTool/tmapmetricappend.html]TMapObj.Metric.Append[/URL];
3. Не сохраняя запросили площадь у него напрямую (без всяких лишних поисков) - метод [URL=http://help.gisserver.ru/_extra/GisTool/GisTool/tmapobjsquare.html]TMapObj.Square[/URL]
[/QUOTE]

или только на MAPAPI?
[QUOTE]1. Создали объект, например, с помощью mapCreateSiteObject;
2. Добавили в него метрику [URL=http://help.gisinfo.ru/showresult.php?file=mapapi.htm&search=mapAppendPointPlane#2]mapAppendPointPlane[/URL];
3. Не сохраняя запросили площадь у него напрямую (без всяких лишних поисков) - [URL=http://help.gisinfo.ru/showresult.php?file=mapapi.htm&search=mapSquare#1]mapSquare[/URL]
4. Освободили объект - mapFreeObject.
[/QUOTE]

Желательно, конечно, не создавать и удалять объект каждый раз (даже в памяти), а пока он нужен для работы режима просто очищать ему метрику и заполнять заново.
Сохранение векторной карты в изображение c помощью LoadMapToPicture (C#)
 
Примеры исправим, int вместо HMAP - это пережиток прошлого. В GTK версии 12 это ошибка.
Все так, [URL=http://www.gisweb.ru/forum/messages/forum2/topic10200/message77471/10200-sokhranenie-vektornoy-karty-v-izobrazhenie-c-pomoshchyu-loadmaptopicture-_c_#message77471]как Вам объяснил Dmitry_[/URL]: типы [B]HMAP[/B], [B]HSITE[/B], [B]HOBJ [/B]и другие типы GIS ToolKit, начинающиеся с H, являются типом [B]H[/B]ANDLE, то есть их размер равен размеру указателя.
Если такой параметр в функции описан как int, то это ошибка. Параметры идентификатора экземпляра класса работы с картой (HMAP), класса экземпляра работы с объектом (HOBJ) и т.п. должны быть описаны именно через типы (HMAP и HOBJ соответственно), а они уже в свою очередь должны быть определены исходя из разрядности системы.
Добавление точки к маршруту через определенное расстояние, Маршрут движения
 
[QUOTE]Александр Махин написал:
Я испробывал еще пару попыток. Результат на скринах.
Но происходит ошибка![/QUOTE]

Судя по скриншоту ошибок сразу несколько.

1. HMAP, HSITE, HOBJ - это указатели. К int их преобразовать получиться только в 32-разрядных приложениях, в x64 будет Access Violation.
2. Нельзя использовать библиотеки из разных сборок. У Вас и gisaccess.dll (11 версия GTK) и gisuaccess.dll (12 версия GTK).
3. Неправильно записан путь к dll. Во-первых, символы слэша надо экранировать. Во-вторых, не стоит зашивать путь к dll жёстко в программе. Используйте просто имя DLL. Причём только тех DLL, которые использует OCX Вашего GTK Active. Для 12-ой версии это gisuaccess.dll (в случае x32-приложения) и gisu64access.dll (в случае x64-приложения). Если карта у Вам будет открыта одной библиотекой и полученный HMAP или HOBJ Вы будете пытаться передать в библиотеку из другой сборки ГИС-ядра, в лучшем случае ничего не произойдет, а вообще должна быть ошибка по памяти. Такой же результат может быть в случае если Вы будете загружать DLL по полному пути, а OCX библиотека GTK Active будет использовать DLL из другого места, так как загружает её без полного пути по правилам, определяемым операционной системой (пусть даже из той версии сборки ГИС-ядра).
4. Параметр distance - это double (8 байт), у Вас int (4 байта).

[QUOTE]_MAPIMP long int _MAPAPI mapSeekVirtualPointByDistanceInMap(HOBJ info,
                                                          long int number,
                                                          double distance,
                                                          DOUBLEPOINT *point,
                                                          long int subject);[/QUOTE]
Добавление точки к маршруту через определенное расстояние, Маршрут движения
 
[QUOTE]Александр Махин написал:
Писал так MapNet.SeekVirtualPointByDistanceInMap и MapObj.SeekVirtualPointByDistanceInMap.[/QUOTE]

Перечисленные функции - это функции MAPAPI, а не методы компонентов MapNet и MapObj.

Прототипы функций описаны в seekapi.h, реализация находится в gisu64access.dll (x64) или в gisuaccess.dll (x32).

Использование API функций из динамических библиотек в C# выполняется с помощью директивы [[B]DllImport[/B]].
Удаление подобъекта, mapDeleteSubject
 
[QUOTE] // Найти точку метрики подобъекта, ближайшую к заданной
// info    - идентификатор объекта в памяти
// point   - координаты точки в прямоугольной
//           системе координат , в метрах на местности
[B] // subject - последовательный номер подобъекта
//           (0 - объект, 1 - первый подобъект и т.д.,
//           если равен -1  - поиск по всей метрике)[/B]
[B] // Возвращает номер точки (номер первой точки равен 1)[/B]
// При ошибке возвращает 0
[B] // Для определения номера найденного подобъекта при поиске
// по всей метрике применяется mapGetCurrentSubject()[/B]

_MAPIMP long int _MAPAPI [B]mapSeekNearPoint[/B](HOBJ info,
                                  DOUBLEPOINT * point,
                                  long int subject);[/QUOTE]


Если Вы в параметре subject указали не -1, поиск точки будет осуществлен только на том контуре (подобъекте), который Вы указываете.

Функция [B]возвращает номер точки[/B] на том подобъекте, на котором она найдена.

[QUOTE]Сергей Викторович написал:
Здесь выдает все время одно и то же число 13 на всех подобъектах, хотя их всего три
Что я делаю не правильно?[/QUOTE]

Число 13 - это номер точки в подобъекте 1, так как поиск Вы выполняете только по подобъекту 1.



Для примера приведу фрагмент кода компонента TMapEditMetric, который Вы используете:
[QUOTE]// РЕДАКТИРОВАНИЕ ТОЧКИ МЕТРИКИ
if FEditMode = emEdit then
 begin
   FPointNumber := mapSeekNearPoint(FObjTemp, FPointXY, -1);
   if FPointNumber = 0 then exit;
   FDragPoint := true; //тащим точку
   // Определение номера подобъекта
   FSubObj  := mapGetCurrentSubject(FObjTemp);
   FObjXY.X := mapXPlane(FObjTemp, FPointNumber, FSubObj);
   FObjXY.Y := mapYPlane(FObjTemp, FPointNumber, FSubObj);
   delta.X  := FPointXY.X - FObjXY.X;
   delta.Y  := FPointXY.Y - FObjXY.Y;
   exit;
 end;[/QUOTE]
Страницы: Пред. 1 ... 65 66 67 68 69 70 71 72 73 74 75 ... 142 След.



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

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