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

Конвертер SXF ->SHP

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: Пред. 1 2 3
RSS
Конвертер SXF ->SHP
 
Т.е. проблема решится простой подменой maptype.h и  на maptype.hpp в vecexapi.h?
 
Цитата
Алексей Антонов написал:
Т.е. проблема решится простой подменой maptype.h и  на maptype.hpp в vecexapi.h?

Не совсем. Функции, объявленные в vecexapi.h будут конфликтовать с объявлениями в  mapproc.hpp.

Поэтому:
Цитата
Денис Вицко написал:
Заголовочные файлы ГИС-ядра не допускается использовать совместно с компонентами GIS ToolKit.

Так исторически сложилось, что компоненты GIS ToolKit написаны на Delphi.
Все функции MAPAPI портируются в GIS ToolKit с их описанием на Delphi.
Когда компоненты устанавливаются в Builder, автоматически генерируются файлы *.hpp, то есть
описание типов данных будет в файле maptype.hpp, а описание функций в mapproc.hpp.

Прототипы функций для Delphi описаны в одноименных файлах *.inc (для vecexapi.h - это vecexapi.inc), но после компиляции GIS ToolKit они будут находиться в mapproc.hpp.

Появление прототипов функций в GIS ToolKit имеет некоторое отставание от их появления в ГИС-ядре.

Функции, которые Вы планируете использовать, являются новыми. В текущей сборке GIS ToolKit их пока нет (хотя в библиотеках ядра они уже присутствуют).
Однако, в ближайшее время они там появятся.

Для решения проблемы подключить vecexapi.h, заменив что-то в нем, не получиться.

Вообще мы рекомендуем функции не из основной библиотеки (gisuacces.dll / gisu64acces.dll) вызывать динамически (через LoadLibrary).
Прототип для динамического вызова Вы можете описать самостоятельно, взяв за основу описание в vecexapi.h.

Статически Вы также можете вызывать эти функции. Для этого Вам надо перенести к себе описания только этих (!) функций из vecexapi.h (тех, которые пока не описаны в mapproc.hpp).
Однако, когда в следующей версии GIS ToolKit эти функции появятся в mapproc.hpp, у Вас вновь будет конфликт уже ваших прототипов с mapproc.hpp.
Поэтому рекомендую использовать динамический вызов.
 
Цитата
Денис Вицко написал:
Однако, в ближайшее время они там появятся.
А дату выхода нового релиза когда можно ожидать?
 
Используя функцию shpLoadSheetFromFolder () я импортирую шейп-файлы, но переносится только метрика и все объекты попадают в системный слой.
Как можно (какими функциями) провести соответствие кодов из .dbf с кодами из классификатора  50t05g.rsc? Таблица приравнивания кодов у меня есть (пример в прикрепленном файле).
Можно ли для этого как-то использовать // Структура соответствия семантик RECORDLIST?
 
Функция shpLoadSheetFromFolder работает на основе предопределенных соответствий:
- имена полей атрибутов совпадают с ключами семантик в классификаторе;
- поля служебных атрибутов имеют следующие имена:
  - имя поля с кодом объекта - "ObjectCode";
  - имя поля с идентификатором объекта - "ObjectID";
  - имя поля с текстом подписи (для объектов типа подпись) - "ObjectText";
  - имя поля со значением угла поворота (для точечных объектов с поворотом) - "ObjectAngle".

Использование shpLoadSheetFromFolder для загрузки данных из dbf, в котором имена полей кода, идентификатора и текста подписи отвечают приведенным выше требованиям, а поля атрибутов не соответствуют ключам семантик в классификаторе, выполняется с помощью дополнительного "перекодировочного" классификатора.

Для переопределения поля служебных атрибутов предусмотрена (недокументированная на сегодняшний день) возможность - использование настроечного файла.
Это xml-файл с предопределенным именем - имя = имени классификатора (имя+расширение), расширение -  ".fromshp". (пример RSC="classifier.rsc", XML="classifier.rsc.fromshp")/
Располагаться он должен или рядом с исполняемым файлом, или рядом с классификатором, или в директории общих классификаторов, или в текущей директории с shp.
Пример содержимого xml-файла:
Код
<?xml version="1.0" encoding="UTF-8"?>
<shptomap rscname="200t05g.rsc">
 <dbf code="utf-8"/>
 <code type="digital"/>
 <fields>
  <item name="objectid">ObjectID</item>
  <item name="objectcode">ObjectCode</item>
  <item name="labeltext">ObjectText</item>
  <item name="dotangle">ObjectAngle</item>
 </fields>
</shptomap>

Атрибут "code" узла "dbf" определяет кодировку в dbf-файле (возможные значения - "utf-8", "ansi", "oem", "latin").
Атрибут "type" узла "code " тип кодового значения в поле "objectcode": "key" - ключ объекта в классификаторе, "digital" - код объекта в классификаторе, "text" - буквенно-цифровой код  объекта в классификаторе.

Не исключено, что *.fromshp-файл в перспективе будет дополняться или даже изменяться.

Второй способ потоковой загрузки набора SHP-файлов с возможностью "маппинга" - назначения соответствия полей dbf семантикам и служебным атрибутам - это применение функции shpShapeProcLoadList.
 
Цитата
Денис Вицко написал:
Пример содержимого xml-файла:
Например, у меня в .dbf файле есть запись (поля "Nature", "Type", "NOM")
   105, 1, CW24

Для которой я должен выполнить подмену из классификатора 50t05g.rsc - Код: 61210000, Ключ: L0061210000, Код семантики: 53 со значением: CW24


Как должен выглядеть XML файл?

<code type="key"/> <fields>
 <item name="objectid">105</item>
 <item name="objectcode">L0061210000</item>
</fields>
<code type="digital"/> <fields>
 <item name="objectid">105</item>
 <item name="objectcode">61210000</item>
</fields>
<code type="text"/> <fields>
 <item name="objectid">105</item>
 <item name="objectcode">53</item>
</fields>
 
Цитата
Алексей Антонов написал:
Как должен выглядеть XML файл?

Нет. Не так.
Внимательно читайте, что я Вам написал.
Цитата
Денис Вицко написал:
Для переопределения поля служебных атрибутов предусмотрена (недокументированная на сегодняшний день) возможность - использование настроечного файла.
Цитата
Денис Вицко написал:
- поля служебных атрибутов имеют следующие имена:
  - имя поля с кодом объекта - "ObjectCode";
  - имя поля с идентификатором объекта - "ObjectID";
  - имя поля с текстом подписи (для объектов типа подпись) - "ObjectText";
  - имя поля со значением угла поворота (для точечных объектов с поворотом) - "ObjectAngle".
Для shpLoadSheetFromFolder Вы можете переопределить только те поля, которые отвечают за код, идентификатор и текст подписи.
Семантики определяются по соответствию их ключей именам полей. То есть классификатором.
 
Вся беда в том, что в классификаторе нет кодов которые записаны в .dbf, и простая подмена имен полей ни чего не даст. :(
И если в Panorama эти преобразования можно сделать вручную, то заказчик требует выполнять их в автомате. Как это сделать через MAPI я пока не нашёл. :(
Изменено: Алексей Антонов - 20.09.2017 16:53:58
 
В классификаторе RSC код объекта может быть задан:
1) кодом и локализацией (например, 12340000 LINE); код может повторяться в серии однотипных объектов, имеющих разные знаки в зависимости от одной или двух характеристик;
2) ключом (уникальная строка в пределах классификатора);
3) буквенно-цифровым кодом (аналог цифрового кода, но может содержать любой текст).

Таблицей перехода служит сам классификатор. Вы можете настроить буквенно-цифровой код на значения из DBF, указать имя поля с этим значением
и указать, что регистрация объекта выполняется по буквенно-цифровому коду.
Пример вызова функций импорта из SHP в SDK12\Ready\Mapvectr\myform.cpp
http://gisinfo.ru/download?id=229
Страницы: Пред. 1 2 3
Читают тему (гостей: 1)



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

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