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

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

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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 12 ... 142 След.
Зона видимости воздушного объекта
 
[QUOTE]mikhail написал:
Спасибо, но я, наверное некорректно задал вопрос, наблюдатель находится на земле, и ему нужно увидеть объект, который летит на высоте, допустим, 200м. Возможно ли построить такую, «воздушную» зону видимости?  [/QUOTE]

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

Да, такая возможность есть.

[URL=https://gisweb.ru/forum/search/index.php?PAGE_NAME=search&tags=&q=%E7%EE%ED%E0+%E2%E8%E4%E8%EC%EE%F1%F2%E8&FORUM_ID%5B%5D=2&DATE_CHANGE=0&order=date&s=%CD%E0%E9%F2%E8]поиск по форуму по теме "зона видимости"[/URL]

При построении зоны видимости один из параметров отвечает за высоту наблюдения - DeltaHight (это в Вашем случае будет высота полета).

[URL=https://gisweb.ru/forum/messages/forum2/topic10609/message92722/10609-postroenie-zon-vidimosti#message92722]Уточнения тут[/URL].

[CODE]// Построение зоны видимости по матрице высот в виде растрового изображения
// hmap - идентификатор открытой векторной карты
// rstname - полное имя растра
// zoneparm - параметры построения зоны (см.maptype.h)
// hpaint - контекст поддержки многопоточного вызова (см. mapCreatePaintControl)
// flags - флаги режимов (1 - запретить нанесение границы зоны на растр)
// Построение производится при наличии открытой матрицы высот
// Результат записывается в файл namerst
// Возвращает номер растра в цепочке
// При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapVisibilityZonePro(HMAP hmap, const WCHAR * rstname,
                                            TBUILDZONEVISIBILITY * zoneparm, HPAINT hPaint, long int flags);

// ПАРАМЕТРЫ ПОСТРОЕНИЯ ЗОНЫ ВИДИМОСТИ
typedef struct TBUILDZONEVISIBILITY
{
DOUBLEPOINT PointCenter;      // Исходная точка
double      RadiusMeter;      // Расстояние (в метрах на местности)
double      Azimuth;          // Дирекционный угол (в радианах)
double      Angle;            // Угол обзора (в радианах)
                              // При Azimuth = 0, Angle = 2*M_PI (360 градусов) строится круговая зона
double      DeltaHight;       // Высота наблюдения (в метрах)
double      DeltaObservation; // Приращение наблюдаемой точки (в метрах)
int         VisionRst;        // Видимость зон пересечения: 0 - со всех точек, 1 - хотя бы с одной
int         StyleRst;         // Степень видимости растра: 0-прозрачный, 1-полупрозрачный, 2-заполненный
int         ColorRst;         // Цвет растра
int         Inversion;        // Инверсия видимости
}
TBUILDZONEVISIBILITY;[/CODE]
Выпуск проекта
 
Добрый день!

Уточните, пожалуйста, что имеется в виду?

Описание процесса создания приложений описано в п.3.2, 3.3 Руководства программиста (ПАРБ.00008-10 33 01).

Нюансы распространения готового приложения приведены там же в разделе "3.2.2 Формирование инсталляции ГИС-приложения".

Вопросы лицензирования приведены в п.3.4.
Как проверить уникальность семантики?, Как проверить уникальность семантики?
 
[QUOTE]Andrey Gheleznyakov написал:
Можно перебрать все объекты, прочитать значения семантики в массив и проконтролировать их уникальность.[/QUOTE]

Перебирать можно не все объекты, а только те, которые имеют указанную семантику (по условию наличия любого значения в ней - SC_ANY, см. [URL=https://help.gisserver.ru/_extra/GisTool/GisTool/tmapselectsemanticcondition.html]TMapSelect.SemanticCondition[/URL])
Добавление Sitx на MapView используя TFileStream, Возможность использования TFileStream
 
Методы открытия данных (и MapView1.MapOpen в частности) передают имя файла в базовые API-функции ГИС-ядра, которые реализованы для многих платформ и операционных систем.
Например:
[CODE] // Открыть данные с автоматическим определением их типа
 // (векторные,растровые,матричные...)
 // name - имя открываемого файла (MAP, SIT, MTW, RSW, MPT) в кодировке UNICODE
 // mode - режим чтения/записи (GENERIC_READ, GENERIC_WRITE или 0)
 // GENERIC_READ - все данные только на чтение, при этом не открываются
 // файлы \Log\name.log и \Log\name.tac - протокол работы и журнал транзакций
 // error - после выполнения функции переменная содержит код ошибки
 //        (когда HMAP равен 0) или 0; коды ошибок приведены в maperr.rh
 // password - пароль доступа к данным из которого формируется 256-битный код
 //            для шифрования данных (при утрате пароля данные не восстанавливаются)
 // size     - длина пароля в байтах !!!
 // Передача пароля необходима, если при создании карты он был указан.
 // Если пароль не передан, а он был указан при создании,
 // то автоматически вызывается диалог scnGetMapPassword из mapscena.dll (gis64dlgs.dll)
 // Если выдача сообщений запрещена (mapIsMessageEnable()), то диалог
 // не вызывается, а при отсутствии пароля происходит отказ открытия данных
 // После завершения использования карты необходимо освободить ресурсы функцией mapCloseData
 // При ошибке возвращает ноль


 function mapOpenAnyDataPro(const aName : PWCHAR;mode : integer;
                          error : PInteger;
                          const password : PWCHAR;
                          size : integer):HMap;
 stdcall external sGisAcces;[/CODE]

TFileStream - это класс среды разработки Embarcadero. ГИС-ядро про него ничего не знает.
То есть использовать TFileStream не получится никак.

При этом отдельные возможности работы с "картой в памяти" есть на уровне ГИС-ядра.

Например, Вы можете создать в памяти временную пользовательскую карту:
Скрытый текст


или загрузить карту в память из текстового буфера в формате TXF:
Скрытый текст


Но все данные, которые открываются с диска, указываются по прямому пути.
Вывод площади в момент использования TMapEditMetric, Получение площади
 
Добрый день!

[QUOTE]Andrey Prohorov написал:
День добрый, возможно ли получить площадь(длину) объекта во время перемещения точек метрики используя TMapEditMetric? или же как можно получить координаты перемещаемых точек до перезаписи объекта (прямо во время редактирования, для ручного подсчета площади или длины объекта).[/QUOTE]

Компонент TMapEditMetric сообщает наружу о событиях изменения метрики точки:
[CODE] // Вызывается при принятии редактирования очередной точки
   property OnMetricChange : TMapMetricChange read FOnMapMetricChange write FOnMapMetricChange;
   // Вызывается при принятии редактирования очередной точки
   property OnMetricPointDelete : TMapMetricPointDelete read FOnMapMetricPointDelete write FOnMapMetricPointDelete;
[/CODE]

В обработчике этих событий Вам доступен номер точки и номер контура (подобъекта), которому она принадлежит.
Вы можете также принять или отклонить изменение метрики точки или ее удаление внутри соответствующего обработчика.
1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
[QUOTE]Анатолий Рогатнев написал:
У меня фрагмент аналога кода, а он ннже, - не работает и, по прежнему, показывает последний найденный объект нулевого слоя !
(поиск производится по ObjectGUID семантики, общей для многих объектов разных карт.  )[/QUOTE]

Для того, чтобы утверждать, что поиск работает неправильно, стоит для начала посмотреть, какие объекты он находит.
Я бы рекомендовал перебрать все найденные объекты и посмотреть их свойства, в частности - семантики, по которым задаются условия.

Для найденного объекта вызвать:
[CODE]_axMapFind.cMapObj.ShowDialogInfo(0);[/CODE]
Можно это сделать в цикле по всем найденным объектам.

Что означает "по прежнему, показывает последний найденный объект"?
До этого поиск выполнялся с другими условиями и этот "последний найденный объект" отвечал его условиям?
Если выполнялся поиск с помощью метода SelectSample (по конкретно заданным объектам), то для нового поиска необходимо почистить список таких объектов:
[CODE]_axMapFind.cMapSelect.ClearSampleAll[/CODE]

Что должна выполнять строчка кода:
[CODE]_MapObj = OS_SELECT;[/CODE]
???
Смещение координат при пересчете, Пересчет из WGS84 в СК-166
 
[QUOTE]Andrey Prohorov написал:
[URL=/forum/user/35/]Денис Вицко[/URL], теперь все встало на свои места, спасибки :D[/QUOTE]

Рекомендация общего характера: проверяйте код возврата от функций MAPAPI - будет понятно в каком месте что-то пошло не так.
Смещение координат при пересчете, Пересчет из WGS84 в СК-166
 
Функция mapGetEllipsoidParameters принимает на вход параметр типа ELLIPSOIDKIND, это не код EPSG, это порядковый номер, описанный ниже:

[CODE]
// Запросить параметры эллипсоида по его номеру (см. MAPCREAT.H)
// ellipsoid - номер эллипсоида (см. MAPCREAT.H, ELLIPSOIDKIND)
// parm      - параметры заданного эллипсоида
// При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetEllipsoidParameters(long int ellipsoid, ELLIPSOIDPARAM *parm);
[/CODE]

[CODE]
typedef enum ELLIPSOIDKIND
{
  UNDEFINED     = -1,     // Не установлено
  KRASOVSKY42   =  1,     // Красовского 1940г.(6378245.0, 298.3)
  WGS_72        =  2,     // Международный 1972г.
  HEYFORD       =  3,     // Хейфорда 1910г. (6378388.0, 297.0)
  CLARKE_80     =  4,     // Кларка 1880г. (RGS) (6378249.145, 293.465)
  CLARKE_66     =  5,     // Кларка 1866г.
  EVEREST_56    =  6,     // Эвереста 1856г. (6377301.243, 300.8017)
  BESSEL        =  7,     // Бесселя 1841г.
  AIRY          =  8,     // Эри 1830г.
  WGS_84        =  9,     // Международный 1984г.
  SGS_85        = 10,     // ПЗ-90.02      (6378136.0, 298.2578393)
  GRS_80        = 11,     // GRS80         (6378137.0, 298.257222101)
  IERS_96       = 12,     // IERS 1996г.   (6378136.49, 298.25645)
  INTER_1924    = 13,     // Международный 1924г. (6378388.0, 297.00)
  SOUTHAM_69    = 14,     // Южно-Американский 1969г. (6378160.0, 298.25)
  INDONESIAN_74 = 15,     // Индонезийский 1974г. (6378160.0,  298.247)
  HELMERT       = 16,     // Гельмерта 1906г. (6378200.0,  298.3)
  FISCHER_60M   = 17,     // Фишера 1960г. Modified (6378155.0,  298.3)
  FISCHER_68    = 18,     // Фишера 1968г.   (6378150.0,  298.3)
  HOUGH         = 19,     // Хаф 1960г.      (6378270.0,  297.0)
  EVEREST_30    = 20,     // Эвереста 1830г. (6377276.345,  300.8017)
  AUSTRALIAN    = 21,     // Австралийский национальный (6378160.0,  298.25)
  CGCS2000       = 22,    // CGCS2000
  AIRYM          = 23,    // Airy Modified
  BESSELM        = 24,    // Bessel Modified
  BESSELNAMIBIA  = 25,    // Bessel Namibia
  BESSELGLM      = 26,    // Bessel Namibia (GLM)
  CLARKE1880ARC  = 27,    // Clarke 1880 (Arc)
  CLARKE1880SGA22 = 28,   // Clarke 1880 (SGA 1922)
  EVEREST1830D67 = 29,    // Everest 1830 (1967 Definition)
  EVEREST1830M   = 30,    // Everest 1830 Modified
  EVEREST1830RSO69 = 31,  // Everest 1830 (RSO 1969)
  EVEREST1830D75 = 32,    // Everest 1830 (1975 Definition)
  NWL9D          = 33,    // NWL 9D
  PLESSIS1817    = 34,    // Plessis 1817
  STRUVE1860     = 35,    // Struve 1860
  WAROFFICE      = 36,    // War Office
  GEM10C         = 37,    // GEM 10C
  OSU86F         = 38,    // OSU86F
  OSU91A         = 39,    // OSU91A
  GRS_67         = 40,    // GRS 1967
  ATS_77         = 41,    // Average Terrestrial System 1977
  IAG_75         = 42,    // IAG 1975
  GRS_67M        = 43,    // GRS 1967 Modified
  DANISH1876     = 44,    // Danish 1876
  SPHERE_WGS_84  = 45,    // Шар на WGS-84
  GCK_2011_EE    = 46,    // ГСК-2011 Общеземной эллипсоид (6378136.5, 298.2564151)
  SGS_85_2011    = 47,    // ПЗ-90.11      (6378136.0, 298.2578393)  (EPSG:7680)
  ELLIPSOIDCOUNT = 47,
  USERELLIPSOID  = 1000,  // Произвольный (пользовательский) эллипсоид
}
ELLIPSOIDKIND;
[/CODE]
1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
[QUOTE]Анатолий Рогатнев написал:
Как выделить объекты мне понятно .
А вот как выделенные объекты найти, используя ActiveX в 1С8.3, и  внести в эти  объекты изменения по семантике ?  [/QUOTE]


Перебор найденных объектов показан в примере, который у Вас есть:
[QUOTE]
//Пример группового выделения нескольких объектов по области, заданной объектом в axMapObj
Процедура ВыделитьПоОбласти()

карта1 = ЭтаФорма.ЭлементыФормы.axMapView1;
   карта_объект = ЭтаФорма.ЭлементыФормы.axMapObj1;

карта1.Rendering = Ложь;
карта_объект.Center();              

ПоискПоКарте = ЭтаФорма.ЭлементыФормы.axMapFind1;
ПоискПоКарте.Active     = Ложь;
ПоискПоКарте.FindPoint  = Ложь;  
ПоискПоКарте.cMapSelect.ClearAll();  

// код ниже для поиска, а мы будем выделять
ПоискПоКарте.cMapSelect.ClearAll();
ПоискПоКарте.cMapSelect.SiteNumber = 0;   // ищем в первой - основной карте
ПоискПоКарте.cMapSelect.UnselectSeekArea(-1);  // сбросим область если была    

// Для примера включим в поиск только объекты с локализацией "векторный" и "подпись"
ПоискПоКарте.cMapSelect.Local_set(-1, Ложь);
ПоискПоКарте.cMapSelect.Local_set(4, Истина);
ПоискПоКарте.cMapSelect.Local_set(3, Истина);

// установим фильтр для всех доступных карт,
// по контуру объекта карта_объект
// по расстоянию от границы = 0
// с учетом уже установленных фильтров в MаpSelect (можно задать только линейные, например) =1
// внутри области = 0
// без учета видимости = 0
// операция для выделения = 0
iret = ПоискПоКарте.cMapSelect.SelectSeekArea(-1, карта_объект.C_CONTAINER, 0, 1, 0, 0, 1);
Если iret = 0 Тогда
       Сообщить("Область поиска не установлена");  
       карта1.Rendering = Истина;
       Возврат;
КонецЕсли;  

ПоискПоКарте.Active = Истина;
ПоискИстина = ПоискПоКарте.First();

номер = 0;

ОчиститьСообщения();

[B]// перебор объектов [/B]
Пока ПоискИстина = Истина  Цикл  
номер = номер + 1;
   НайденныйОбъект = ПоискПоКарте.cMapObj;
локализация = "";
   Если НайденныйОбъект.Local = 0 Тогда локализация = "Линия";     КонецЕсли;
   Если НайденныйОбъект.Local = 1 Тогда локализация = "Полигон";   КонецЕсли;
   Если НайденныйОбъект.Local = 2 Тогда локализация = "Точка";     КонецЕсли;
   Если НайденныйОбъект.Local = 3 Тогда локализация = "Подпись";   КонецЕсли;
   Если НайденныйОбъект.Local = 4 Тогда локализация = "Векторный"; КонецЕсли;

информация = "" + номер + ". " + локализация + " " + НайденныйОбъект.Key + " (код " + НайденныйОбъект.Excode + ")";
Сообщить(информация);                    
ПоискИстина = ПоискПоКарте.Next();
КонецЦикла;

карта1.SetViewSelectedEx(Ложь, 0);  
карта1.SetObjSelectedEx(ПоискПоКарте.cMapSelect, 255, Истина);    

   карта1.Rendering = Истина;

КонецПроцедуры
[/QUOTE]

Для чтения и записи свойств объекта (метрики, семантики, условного знака), как Вы уже знаете, предназначен компонент [URL=https://help.gisserver.ru/_extra/axGisTool/axGisTool/tmapfind_mapobj.html]axMapObj[/URL].

Объект, на который настроен тот axMapObj (в примере - НайденныйОбъект), который используется в axMapFind (в примере - ПоискПоКарте.cMapObj), пока он используется в цикле перебора найденных объектов напрямую редактировать не стоит, так как это может нарушить список найденных объектов.

Поэтому следует использовать еще один экземпляр axMapObj, который в цикле перебора объекта настраивать на очередной найденный объект карты, после чего можно добавлять/удалять/редактировать его метрику ([URL=https://help.gisserver.ru/_extra/axGisTool/axGisTool/axmapobj_metric.html]axMapObj.Metric[/URL]) и/или семантику ([URL=https://help.gisserver.ru/_extra/axGisTool/axGisTool/axmapobj_semantic.html]axMapObj.Semantic[/URL]).
После редактирования объекта сохранить его на карте - [URL=https://help.gisserver.ru/_extra/axGisTool/axGisTool/axmapobj_commitobject.html]axMapObj.CommitObject[/URL].

Настроить axMapObj (2) на объект карты, который уже установлен в другом axMapObj (1), проще всего так:
[CODE]axMapObj2.Set_ObjHandle(axMapObj1.Get_ObjHandle());[/CODE]

[B]Примерно так [/B]будет выглядеть код редактирования объектов, найденных по каким-то условиям (модификация кода из примера выше):
[QUOTE]
// Разместить axMapObj2 на форме или создать динамически и настроить на axMapView
редактируемый_объект = ЭтаФорма.ЭлементыФормы.axMapObj2;

[B]// перебор объектов [/B]
Пока ПоискИстина = Истина  Цикл  
   номер = номер + 1;
   НайденныйОбъект = ПоискПоКарте.cMapObj;
   локализация = "";
   Если НайденныйОбъект.Local = 0 Тогда локализация = "Линия";     КонецЕсли;
   Если НайденныйОбъект.Local = 1 Тогда локализация = "Полигон";   КонецЕсли;
   Если НайденныйОбъект.Local = 2 Тогда локализация = "Точка";     КонецЕсли;
   Если НайденныйОбъект.Local = 3 Тогда локализация = "Подпись";   КонецЕсли;
   Если НайденныйОбъект.Local = 4 Тогда локализация = "Векторный"; КонецЕсли;

   информация = "" + номер + ". " + локализация + " " + НайденныйОбъект.Key + " (код " + НайденныйОбъект.Excode + ")";
   Сообщить(информация);        
   
[B] // Настроиться на текущий найденный объект карты
   редактируемый_объект.Set_ObjHandle(НайденныйОбъект.Get_ObjHandle());

   // Внести изменения в текущий найденный объект карты
   редактируемый_объект.Semantic.DeleteByCode(9, Истина);  // например, удалить семантику 9 (собственное название)
   редактируемый_объект.Semantic.AddWithValue(9, "Новое значение");  // добавить семантику 9 (собственное название) с новым значением

   // Сохранить отредактированный объект на карту
   редактируемый_объект.CommitObject();[/B]

   ПоискИстина = ПоискПоКарте.Next();
КонецЦикла;
[/QUOTE]
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 12 ... 142 След.



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

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