django-rest-framework-gis GeoFeatureModelSerializer возвращает измененные / неправильные координаты при сериализации - PullRequest
0 голосов
/ 26 июня 2018

В настоящее время у меня есть GeometryField, который содержит Polygon, который является GEOSGeometry. Я печатаю координаты многоугольника, и они кажутся хорошими, именно там, где я указал. Затем я сохраняю экземпляр модели, а затем десериализую с помощью GeoFeatureModelSerializer, только чтобы узнать, что координаты моего многоугольника были изменены на нечто очень маленькое и близкое к экватору.

Это GEOSGeometry, сохраненный в GeometryField изначально, который сохраняется в базе данных.

POLYGON ((-79.94751781225206 40.44287206073545, 
          -79.94751781225206 40.44385187931003, 
          -79.94502872228624 40.44385187931003, 
          -79.94502872228624 40.44287206073545, 
          -79.94751781225206 40.44287206073545))

После этого сериализуется с GeoFeatureModelSerializer и возвращается.

[[-0.000718176362453, 0.000363293553554], 
 [-0.000718176362453, 0.000363316438548], 
 [-0.000718135112337, 0.000363316438548], 
 [-0.000718135112337, 0.000363293553554], 
 [-0.000718176362453, 0.000363293553554]]

Я понятия не имею, что может быть причиной этого.

Заранее большое спасибо.

1 Ответ

0 голосов
/ 27 июня 2018

Это было решено путем указания SRID. Согласно Django Docs, SRID составляет

Выбор подходящего SRID для вашей модели является важным решением, которое разработчик должен внимательно рассмотреть. SRID является целочисленным спецификатором, который соответствует проекционной системе, которая будет использоваться для интерпретации данных в пространственной базе данных. (https://docs.djangoproject.com/en/2.0/ref/contrib/gis/model-api/)

Я выполняю операции над полигонами с определенным SRID и возвращаю другой полигон с другим SRID. Мне просто нужно было «привести» полигон, который я возвращал, к SRID, который я хотел, с GEOSGeometry(polygon, srid=some_value). По сути, полигон, который я возвращал, проецировался в какой-то другой формат, который мне не нужен.

...