преобразовать точечный объект PostGIS в geoJSON для отображения - PullRequest
0 голосов
/ 17 октября 2018

У меня есть приложение Django с postgres db о действиях PostGIS, которые я пытаюсь отобразить в веб-интерфейсе, используя буклет и Mapbox.

Я сериализирую действия в представлении и отображаю их в шаблоне как geoJSON ({{ props.activitiesJson|safe }})

[могу отобразить это как html и увидеть объекты JSON на странице].

views.py (ex)

def map(request):

    mapbox_key = settings.MAPBOX_API_KEY
    activities = Activity.get_activities_near(lat, lng, radius)

    props = {'activitiesJson' : serializers.serialize('geojson', activities),}

    context = {
    'props' : props,
    'mapbox_key': mapbox_key
}

return render(request, 'app/map.html', context) 

template:

var map_activities = JSON.parse("{{ props.activitiesJson }}");
L.geoJSON(map_activities).addTo(map); 

, если я отображаю {{ props.activitiesJson }} или {{ props.activitiesJson|safe }} непосредственно в шаблоне (не внутрисценарий или синтаксический анализ) Я вижу эту структуру данных:

{"type": "FeatureCollection", "crs": {"type": "name", "properties": {"name": "EPSG:4326"}}, "features": [{"type": "Feature", "properties": {"cause": 1, "name": "Test Action", "slug": "test-action", "is_active": true, "image": "test.jpeg", "description": "test description", "date_start": null, "date_end": null, "skills_required": false, "on_site": false, "address_street": "123 Main St.", "address_street_2": "", "address_city": "New York", "address_state": "NY", "address_zip": "10013", "address_country": "", "location_city": "", "location_state": "", "location_country": "", "skills_list": [], "pk": "1"}, "geometry": null}]}

, но при попытке проанализировать его с помощью JSON.parse () выдается синтаксическая ошибка:

JSON.parse: expected property name or '}' at line 1 column 2 of the JSON data 

как правильно назначитьэтот объект geoJSON для моего map_activities var?я должен разобрать это вообще?(т. е. var map_activities = {{ props.activitiesJson|safe }};)

спасибо

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Кроме того, мы можем попробовать код ниже.

def map(request):    
   activities = Activity.get_activities_near(lat, lng, radius)
   activitiesData = []
   for activity in activities:
      listdata = {'id': activity.id, 'name': activity.name} # As per requirement
      activitiesData.append(listdata)
   response = HttpResponse(json.dumps(activitiesData))
   return response
0 голосов
/ 23 октября 2018

в конечном итоге (не уверен, что это лучшая практика), правильный подход для меня вообще не заключался в парсинге объекта geoJSON и передаче его прямо в переменную

var map_activities = {{ props.activitiesJson|safe }};
...