如何用GeoDjango创建HTML世界地图?

1 投票
2 回答
1566 浏览
提问于 2025-04-15 23:36

GeoDjango教程讲解了如何将世界边界数据插入到空间数据库中。

我想用这些数据在HTML中创建一个世界地图,使用maparea标签。就像这个例子

不过我不知道怎么获取每个国家的坐标(这是area标签的coords属性所需要的)。

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, "???")

谢谢!

2 个回答

0

要在SVG中使用经纬度,你需要把它们转换成像素坐标(x/y)。一个简单的转换方法可能是这样的:

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

如果你的图片宽度是高度的两倍(image_width == 2 * image_height),那么你得到的效果就像链接中展示的地图(看起来像是等距矩形投影)。

如果你想使用其他类型的投影(比如墨卡托投影),可以在应用转换之前,使用GeoDjango中的GEOSGeometry.transform方法。

0

在worldborders的例子中,属性mpoly就是存储地理多边形的地方。

在你的例子里,你需要访问v.mpoly

不过,你不能直接使用它,因为mpoly本身是一个MultiPolygon字段。想象一下像加拿大这样的国家,它有很多岛屿,每个岛屿和大陆都是一个多边形。所以,要获取你的点和完整的加拿大边界描述,你需要:

  1. 遍历多边形中的每一个多边形。每个多边形对应一个区域(所以你在例子中假设每个国家只有一个区域是错误的)。
  2. 遍历每个多边形中的点。
  3. 将你的坐标(经度/纬度)转换为你的svg图形所使用的坐标。

撰写回答