2010-06-05 40 views
1

GeoDjango tutorial解释了如何将世界边界插入空间数据库。如何使用GeoDjango创建HTML世界地图?

我想用这些数据在maparea标签中创建HTML世界地图。 Something like that

我只是不知道如何检索每个国家的坐标(需要areacoords属性)。

from world.models import WorldBorders 

for country in WorldBorders.objects.all(): 
    print u'<area shape="poly" title="%s" alt="%s" coords="%s" />' % (v.name, v.name, "???") 

谢谢!

回答

0

在worldborders示例中,属性mpoly是实际存储地理多边形的位置。

在你的榜样,你会想要访问v.mpoly

你不是要能够直接但使用它,因为mpoly本身就是一个MultiPolygonfield。考虑一个像加拿大这样的国家,那里有许多岛屿,每个岛屿和主要陆地都是多边形。因此,要获得您的要点和加拿大边界的完整说明,您需要:

  1. 迭代多面体内部的多边形。每个多边形对应一个区域(因此,您假设每个国家/地区的一个区域是错误的)。
  2. 迭代每个polygon内部的点。
  3. 将您的point坐标(纬度/经度)转换为您的svg图形所使用的坐标。
+0

我明白你的逻辑,谢谢!当你说“将纬度/经度转换为SVG图形的坐标”时,你的意思是我只需要做一个简单的加法? – user176455 2010-06-06 08:39:58

0

要在SVG中使用纬度/经度,需要将它们投影到像素(x/y)空间中。一个简单的变换可能是这样的:

>>> x = (lon + 180)/360 * image_width 
>>> y = (90 - lat)/180 * image_height 

对于图像,其中image_width == 2 * image_height,这会给你类似的地图在发布的链接(这看起来像一个equirectangular projection)。

要使用不同的投影(例如Mercator),请在应用转换之前使用GeoDjango中的GEOSGeometry.transform方法。