我正在创建地图的GUI表示,但是无法正确缩放画布。我目前正在绘制杜布罗夫尼克市,杜布罗夫尼克的所有点都有42N到43N之间的纬度和18E到19E之间的经度。我想知道是否有办法设置画布,以便窗口的左上角是坐标(42,19),右下角是(43,48)?非常感谢任何帮助。
答案 0 :(得分:3)
据我所知,你没有内置的方法可以做到这一点。 但你当然可以实现自己的画布来完成这项工作。
类似的东西:
class GeoCanvas(Tk.Canvas):
def __init__(self, master, uperleftcoords, bottomrightcoords, **kwargs):
Canvas.__init__(self, master, **kwargs)
self.minLat = uperleftcoords.getLat()
self.maxLong = uperleftcoords.getLong()
self.maxLat = bottomrightcoords.getLat()
self.minLong = bottomrightcoords.getLong()
self.width = **kwargs["width"]
self.height= **kwargs["height"]
self.geoWidth = self.maxLat - self.minLat
self.geoHeight= self.maxLong - self.minLong
def fromLatLong2pixels(self, coords):
""" Convert a latitude/longitude coord to a pixel coordinate use it for every point you want to draw."""
if ( not self.minLat <= coords.getLat() <= self.maxLat) or (not self.minLong <= coords.getLong() <= self.laxLong ):
return None
else:
deltaLat = coords.getLat() - self.minLat
deltaLong= coords.getLong()- self.minLong
latRatio = deltaLat / self.geoWidth
longRatio= deltaLong/ self.geoHeight
x = latRation * self.width
y = longRatio * self.height
return x,y
然后,您可以覆盖用于将每个纬度/经度坐标转换为画布上的点的绘图方法。