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

Стратегия по отображению данных postgresql/postgis

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Стратегия по отображению данных postgresql/postgis
 
Добрый день, уважаемые форумчане. Проконсультируйте, пожалуйста.
Стоит задача по отображению данных типа geometry(субд postgresql с расширением postgis) на карте ГИС-конструктора. Есть ли какие-либо соображения, как это сделать наиболее безболезненным (простым) путем? Имеется ввиду перевод типа geometry в геометрию ГИС-конструктора. Пока наиболее подходящим вариантом вижу выгрузку в файл geojson, но хотелось бы избежать промежуточных файлов.
 
Добрый день. У нас существует технология прямого подключения к базе данных. При этом осуществляется полная синхронизация данных в обе стороны. Для этого создается файл настроек dbm (xml), в котором описываются параметры подключения к базе и поля для доступа информации (подробнее вы можете ознакомиться в документации к ГИС Серверу - руководство системного программиста). Создать его можно вручную, с помощью ГИС Панорама 13 или через администратор ГИС Сервера или GIS WebSrvice SE.  Примеры файлов также представлены в этих продуктах. Далее вы можете работать с данным dbm, как с обычной картой sit, подав путь к файлу в функцию mapopendata. При этом вам доступны все функции по работе с векторной картой.

Код
TEMPHMAP hmap = mapOpenAnyData(dbmname);
        PANLOGASSERT(hmap, TESTNAME);

        XIMAGEDESC imagedesc;
        imagedesc.Width     = 900;          // Ширина строки в пикселах
        imagedesc.Height    = 700;          // Число строк
        imagedesc.Depth     = 32;           // Размер элемента в битах (8,15,16,24,32)
        imagedesc.CellSize  = 4;            // Размер элемента(пиксела) в байтах
        imagedesc.RowSize   = (imagedesc.Width) * imagedesc.CellSize;// Ширина строки в байтах

        char* bitsLinux = 0;
        NEW_ARR(bitsLinux, char, imagedesc.RowSize * imagedesc.Height);
        PANLOGASSERT(bitsLinux, TESTNAME);
        imagedesc.Point = bitsLinux;               // Адрес начала области пикселов


        DFRAME frame = {-1376037, 1884768, -1375852, 1885051};
        int ret = 0;
        ret = mapPaintByFrameToXImage(hmap, &imagedesc, &frame, 700, 900, 1);
        PANLOGASSERT(ret == 0, TESTNAME);

        TEMPHOBJ info = mapCreateSiteObject(hmap, hmap);
        PANLOGASSERT(info, TESTNAME);

        ret = mapRegisterObjectByKey(info, "S1000000002");
        PANLOGASSERT(ret, TESTNAME);

        mapAppendPointPlane(info, -1375981, 1884727);
        mapAppendPointPlane(info, -1375901.294358, 1884727.092931);
        mapAppendPointPlane(info, -1375901.294358, 1884793.332672);
        mapAppendPointPlane(info, -1375951.264689, 1884794.107406);
        mapAppendPointPlane(info, -1375981, 1884727);

        const uint32_t maxTimeWait = 15 * 60; // 15 минут максимум, чтобы не ждать вечно
        uint32_t timeWait = 0;

        while(1)
        {    
            if (mapGetLoadState(hmap, hmap) == 0)
            {
                ret = mapCommitObjectAsNew(info);
                int ret2 = mapPaintByFrameToXImage(hmap, &imagedesc, &frame, 700, 900, 1);
                PANLOGASSERT(ret2, TESTNAME);
                PANLOGASSERT(ret, TESTNAME);
                break;
            }
            else
            {
                ret = mapCommitObjectAsNew(info);
                PANLOGASSERT(ret == 0, TESTNAME);
            }
            SleepTheThread(1000);
#ifndef _DEBUG
            PANLOGASSERT((++timeWait < maxTimeWait), TESTNAME);
#endif
        }

        ret = mapUpdatePointPlane(info, -1375015, 1884828, 3);
        PANLOGASSERT(ret, TESTNAME);

        ret = mapCommitObject(info);
        PANLOGASSERT(ret, TESTNAME);

        ret = mapDeleteObject(info);
        PANLOGASSERT(ret, TESTNAME);

        ret = mapGetObjectCount(hmap, 1);
        PANLOGASSERT(ret > 5000, TESTNAME);
Изменено: Владимир Железняков - 16.06.2020 11:31:57
Страницы: 1
Читают тему (гостей: 1)



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

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