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

2024-05-23 20:03:56 发布

您现在位置:Python中文网/ 问答频道 /正文

GeoDjango tutorial解释了如何在空间数据库中插入世界边界。在

我想用HTML创建一个包含这些数据的世界地图,其中既有map和{}标记。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, "???")

谢谢!在


Tags: 数据name标记数据库maphtml世界空间
2条回答

要在SVG中使用lat/lon,需要将它们投影到像素(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方法。在

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

在您的示例中,您将要访问v.mpoly

但是您不能直接使用它,因为mpoly本身就是MultiPolygonfield。考虑一个像加拿大这样的国家,它有许多岛屿,每个岛屿和主要陆地都是一个多边形。因此,要达到您的观点并完整描述加拿大边界,您需要:

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

相关问题 更多 >