sort geojson

This commit is contained in:
Laura Klünder 2016-09-20 16:13:47 +02:00
parent e6cbe5bf27
commit f0eec51d45
3 changed files with 14 additions and 2 deletions

View file

@ -3,6 +3,8 @@ from rest_framework import serializers
from rest_framework.exceptions import ValidationError
from shapely.geometry import mapping, shape
from ..mapdata.utils import sort_geojson
class GeometryField(serializers.DictField):
"""
@ -13,7 +15,7 @@ class GeometryField(serializers.DictField):
}
def to_representation(self, obj):
geojson = mapping(obj)
geojson = sort_geojson(mapping(obj))
return super().to_representation(geojson)
def to_internal_value(self, data):

View file

@ -3,6 +3,8 @@ import json
from django.db import models
from shapely.geometry import mapping, shape
from .utils import sort_geojson
class GeometryField(models.TextField):
def from_db_value(self, value, expression, connection, context):
@ -14,4 +16,4 @@ class GeometryField(models.TextField):
return shape(json.loads(value))
def get_prep_value(self, value):
return json.dumps(mapping(value))
return json.dumps(sort_geojson(mapping(value)))

View file

@ -1,4 +1,5 @@
import json
from collections import OrderedDict
def _preencode(data, magic_marker):
@ -27,3 +28,10 @@ def json_encoder_reindent(method, data, *args, **kwargs):
else:
magic_marker = magic_marker.encode()
return result.replace(b'"'+magic_marker, b'').replace(magic_marker+b'"', b'')
def sort_geojson(data):
return OrderedDict((
('type', data['type']),
('coordinates', data['coordinates']),
))