如何使用 GeoDjango 创建 HTML 世界地图?
GeoDjango 教程 解释了如何将世界边界插入到空间数据库。
我想用这些数据创建一个 HTML 世界地图,并带有 map
和 area
标签。 类似的东西。
我只是不知道如何检索每个国家/地区的坐标(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, "???")
谢谢 !
The GeoDjango tutorial explains how to insert world borders into a spatial database.
I would like to create a world Map in HTML with these data, with both map
and area
tags. Something like that.
I just don't know how to retrieve the coordinates for each country (required for the area
's coords
attribute).
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, "???")
Thanks !
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 worldborders 示例中,属性
mpoly
是地理多边形实际存储的位置。在您的示例中,您将想要访问
v.mpoly
但是您将无法直接使用它,因为
mpoly
本身就是一个MultiPolygon
字段。考虑像加拿大这样的国家,它有很多岛屿,每个岛屿和主要陆地都是一个多边形。因此,要得出您的观点以及加拿大边界的完整描述,您需要:In the worldborders example, the attribute
mpoly
is where the geographic polygon is actually stored.In your example, you're going to want to access
v.mpoly
You're not going to be able to use it directly however because
mpoly
is itself aMultiPolygon
field. Consider a country like Canada that has a bunch of islands, each island and the main landmass is a polygon. So to arrive at your points and a complete description of Canada's borders you need to:要在 SVG 中使用纬度/经度,您需要将它们投影到像素 (x/y) 空间中。一个简单的转换可能如下所示:
对于
image_width == 2 * image_height
的图像,这将为您提供类似于发布链接处的地图的内容(看起来像 等距矩形投影)。要使用不同的投影(例如 Mercator),请使用 GEOSGeometry.transform 方法在 GeoDjango 之前应用转换。
To use lat/lon in an SVG, you need to project them into pixel (x/y) space. A simple transformation might look like this:
For an image where
image_width == 2 * image_height
, this will give you something like the map at the link posted (which looks like an equirectangular projection).To use a different projection (e.g. Mercator), use the GEOSGeometry.transform method in GeoDjango before applying the transform.