Как создать карту мира HTML с GeoDjango? - PullRequest
1 голос
/ 05 июня 2010

В учебнике 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, "???")

Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 июня 2010

Чтобы использовать широту / долготу в SVG, вам необходимо спроецировать их в пиксельное (х / у) пространство. Простое преобразование может выглядеть так:

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

Для изображения, где image_width == 2 * image_height, это даст вам что-то вроде карты по опубликованной ссылке (которая выглядит как равносторонняя проекция ).

Чтобы использовать другую проекцию (например, Mercator ), используйте метод GEOSGeometry.transform в GeoDjango перед применением преобразования.

0 голосов
/ 05 июня 2010

В примере с миром границ атрибут mpoly - это место, где фактически хранится географический многоугольник.

В вашем примере вы хотите получить доступ к v.mpoly

Однако вы не сможете использовать его напрямую, поскольку mpoly само по себе является MultiPolygon полем . Рассмотрим такую ​​страну, как Канада, которая имеет множество островов, каждый остров и основная территория которых являются многоугольником. Таким образом, чтобы добраться до ваших пунктов и полное описание границ Канады, вам необходимо:

  1. Перебирать полигоны внутри мультиполигона. Каждый полигон соответствует области (поэтому ваше предположение на примере одной области на страну неверно).
  2. Перебирать точки внутри каждого многоугольника .
  3. Преобразуйте ваши точки координаты (широта / долгота) в координаты, используемые графикой SVG.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...