我正在尝试开发一个应用程序,它可以充分利用(Py)Qt图形框架应用于地理地图(想想在平铺背景上渲染KML文件,非常类似于谷歌地图)。
在Web地图上,由于Earth Sphericity,像素位置(i,j)和地理位置(纬度,经度)之间的转换不是线性的,我已经使用以下函数成功执行了此转换:
TILE_SIZE = 256
EARTH_RADIUS = 6378137
EQUATOR_CIRCUMFERENCE = 2 * math.pi * EARTH_RADIUS
INITIAL_RESOLUTION = EQUATOR_CIRCUMFERENCE / TILE_SIZE
ORIGIN_SHIFT = EQUATOR_CIRCUMFERENCE / 2.0
def latlontopixels(lat, lon, zoom):
mx = (lon * ORIGIN_SHIFT) / 180.0
my = math.log(math.tan((90 + lat) * math.pi/360.0))/(math.pi/180.0)
my = (my * ORIGIN_SHIFT) /180.0
res = INITIAL_RESOLUTION / (2**zoom)
px = (mx + ORIGIN_SHIFT) / res
py = (my + ORIGIN_SHIFT) / res
return px, py
def pixelstolatlon(pos, zoom):
px, py = pos
res = INITIAL_RESOLUTION / (2**zoom)
mx = px * res - ORIGIN_SHIFT
my = py * res - ORIGIN_SHIFT
lat = (my / ORIGIN_SHIFT) * 180.0
lat = 180 / pi * (2*atan(exp(lat*pi/180.0)) - pi/2.0)
lon = (mx / ORIGIN_SHIFT) * 180.0
return lon, lat
我的问题是:
有没有办法在Scene,View或甚至每个Item中透明地“嵌入”这些转换,子类化和/或覆盖某些metod?
例如,当我有一个“GeoPolyLine”QGraphicsItem时,我想在内部将它的点存储为(lat,lon)对,可能使用QPoint
,但我希望它被“看到”场景和视图通过“latLonToPixels”坐标。
另外,由于我希望我的几何形状是“模型”,我不认为我应该让它们继承QGraphicsView,我想知道Qt的Model / View编程模型是否对处理这个映射本身很有用,而不是场景/视图模型。