2010-06-05 37 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方法。