Самый простой метод для отображения полигонов в GeoDjango - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть простое приложение с серверной частью PosGIS. Я хочу иметь страницу для каждой функции в базе данных. Я использовал пули и маршрутизацию URL.

В объектах PostGIS полигон хранится в столбце geom, который моделируется как MultiPolygonField с использованием geodjango.

Какой самый простой способ проанализировать этот столбец geom в geojson, чтобы я мог добавить его на карту листовки?

Ниже приведен мой код, который пытается использовать сериализатор geojson, хотя я получаю этот код ошибки на своей странице.

Error Message Views.py

from django.shortcuts import render
from Countries_App.models import Countries
from django.core.serializers import serialize
# Create your views here.

def show_country(request, country_slug):
# Create a context dictionary which we can pass
# to the template rendering engine.
context_dict = {}
try:
# Can we find a category name slug with the given name?
# If we can't, the .get() method raises a DoesNotExist exception.
# So the .get() method returns one model instance or raises an exception.
        country = Countries.objects.get(slug=country_slug)
        Country_geojson = serialize('geojson', 
Countries.objects.get(slug=country_slug))
# We also add the category object from
# the database to the context dictionary.
# We'll use this in the template to verify that the category exists.
        context_dict['Countries'] = country
except KeyError:
    country = []
    context_dict['Countries'] = Countries
    country_slug = none
    Country_geojson = serialize('geojson', 
Country.objects.filter(name=country_slug))
# Go render the response and return it to the client.
return render(request, 'Countries_App/country.html', {'context_dict': 
context_dict, 'Country_geojson': Country_geojson})

urls.py

urlpatterns = [
url(r'^admin/', admin.site.urls),
# url(r'^country/(?P<country_slug>[\w\-]+)/$', 
GeoJSONLayerView.as_view(model=Countries), name='data'),
url(r'^country/(?P<country_slug>[\w\-]+)/$', views.show_country, 
name='show_country'),
]

Выдержка из шаблона, в котором я пытаюсь добавить геойсон на карту листовки

        var geojsonfeature = '{{ Countries_geojson }}'
    L.geoJSON(geojsonFeature).addTo(map);

Правильно ли я подхожу к этому? Какой самый простой способ просто добавить геометрию полигона PostGIS в шаблон? Принимая во внимание, я только хочу добавить геометрию объекта, который соответствует слаг.

1 Ответ

0 голосов
/ 28 сентября 2018

В документации django-geojson есть ссылка на то, как использовать теги модуля в шаблонах django:

В основном полезно для вывода функций в выводе HTML и обхода вызова AJAX:

// Leaflet JS L.geoJson({{
object_list|geojsonfeature|safe}}).addTo(map);

Будет работать для модели, геометрического поля или набора запросов.

{% load geojson_tags %}

var feature = {{ object|geojsonfeature|safe }};

var geom = {{ object.geom|geojsonfeature|safe }};

var collection = {{ object_list|geojsonfeature|safe }};

Могут быть предоставлены свойства и имя поля пользовательской геометрии.

{{ object|geojsonfeature:"name,age" }}
{{ object|geojsonfeature:"name,age:the_geom" }}
{{ object|geojsonfeature:":geofield" }}
...