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

gis toolkit и python

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active
Страницы: 1
RSS
gis toolkit и python, странное поведение вызываемых функций
 
Здравствуйте! Помогите разобраться с такой проблемой. Возникла необходимость занести в базу данных координаты объекта. Для этой простой задачи естественно использовать язык сценариев, например python. С помощью пакета ctypes  я подгружаю mapacces.dll и вызываю оттуда функции. Все работает нормально, кроме функций получения координат. При вызове таких функций как mapGetMapX1, mapXPlane и т.д. выводятся странные числовые значения, причем, что удивительно, одинаковые для всех точек, входящих в состав объекта. А функции типа mapGetMapX? выводят абсолютно одинаковые числа для всех координат все углов карты. Вот пример кода :
Код
from ctypes import *
...
hlib = windll.LoadLibrary('mapaccess.dll')
hmap = hlib.mapOpenData(c_char_p(mapfilename),c_long(0))
print hlib.mapGetMapX1(hmap)....


Спасибо!
Изменено: ivandasch - 09.06.2008 15:20:26
 
Судя по Вашему списку проблемы возникают с теми функциями, которые возвращают значение типа double.
Возможно не так объявлены прототипы функций (в Вашем тексте их нет).
Мы сами не программировали на python и точнее сказать не готовы.
 
Питон - это язык с динамической типизацией, поэтому никаких избыточных шагов предпринимать не требуется. Приведенные три строчки в скрипте вполне работоспособны, просто выдается некорректный результат. Было бы неплохо, если бы вы привели хотя бы часть исходного кода этой функции, особенно куски где значение возвращается.
 
Проблема решена. Привожу решение, вдруг кому пригодится. ctypes не всегда корректно динамически определяет тип возвращаемой переменной, т.к. это все-таки не нативный python-овский модуль. Поэтому его надо задать.
Код
handle.load_function.restype = c_sometype

Где load_function - имя функции, которую вы грузите, с_sometype - тип ctypes, handle - хэндл разделяемой библиотеки.
 
Здравствуйте! В настоящее время реализую соответствующее приложение с использованием Python.
Понимаю, что официальных библиотек нет, но таково требование заказчика.
Компоненты официально приобретены, корректно установлены, примеры из состава компонентов запускаются и работают.
Если есть возможность, прошу помочь с следующим вопросом - нужно осуществить отображение карты на Python.
Исходный код примера (при разработке примера использовал пример . ./SDK/X11/test1.c)

1) заголовочный mapapi_struct.py
import ctypes

class  xcontext(ctypes.Structure):
   _fields_ = [('Display', ctypes.c_long),
               ('Window', ctypes.c_long),
               ('GC', ctypes.c_long),
               ('DRAWPOINT', ctypes.c_long),]

class  rect(ctypes.Structure):
   _fields_ = [('x', ctypes.c_long),
               ('y', ctypes.c_long),
               ('width', ctypes.c_long),
               ('height', ctypes.c_long),]




2) исходный простейший пример py_gui.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
#

import sys
import ctypes
from PyQt4 import QtCore, QtGui
import mapapi_struct

import pprint
#pprint.pprint(sys.path)

a = QtGui.QApplication(sys.argv)

w = QtGui.QWidget()
w.resize(1280, 960)
w.setWindowTitle("Show Map")
w.show()


hlibqdmapacces = ctypes.cdll.LoadLibrary('/usr/lib64/libqdmapacces.so')

hmap = hlibqdmapacces.mapOpenMap("/usr/lib64/qt46/examples/gisdesigner11/Data/Podolsk/Podolsk­.map", 0)

hdc = mapapi_struct.xcontext()
#hdc.Display =
#hdc.Window =
#hdc.GC =
#hdc.DRAWPOINT =

rect = mapapi_struct.rect()
rect.x = 0
rect.y = 0
rect.width = 900
rect.height = 900

hlibqdmapacces.mapPaint(hmap, hdc, 1, rect)

#pprint.pprint(dir(hdc))
#pprint.pprint(dir(ctypes))

sys.exit(a.exec_())





В сухом результате
mapOpenMap- работает, историю обращений к карте в лог-файл пишет.
mapPaint - не работает.

Соответственно, вопрос - что мне нужно писать в
hdc.Display =
hdc.Window =
hdc.GC =
hdc.DRAWPOINT =
                  из QtCore,   QtGui или из PyQt4, чтобы mapPaint заработал?

--
С уважением,
Евгений.
 
Не ясно как Вы проверяете работоспособность функции.
Сначала ей нужно задать корректные параметры.

Например, DRAWPOINT - это структура.
С какой областью памяти связан графический контекст - не очевидно.

Параметры xcontext относятся к графической системе XWindow и должны заполнятся по ее правилам.
Примеры следует смотреть в составе ГИС Конструктор для Qt Designer.

Есть еще функции, в названии которых присутствует "XImage". Они рисуют в явно заданную область памяти.
Можно применить их.
Страницы: 1
Читают тему (гостей: 1)



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

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