У меня есть модель GeoDjango (v5.2) («Местоположение») с MultiPolygonField («координаты»), и я использую PostGIS (v17-3.5) в качестве серверной части базы данных. Когда я аннотирую набор запросов с помощью центроида мультиполигона, я получаю немного другие результаты по сравнению с методом центроида одного экземпляра. Кажется, это только ошибки округления, но, учитывая имена функции и метода, я ожидал тех же результатов.
Может ли кто-нибудь подтвердить, что я действительно имею дело с ошибками округления (например, из-за немного других алгоритмов, как предложил @MartinBrown)? Или это непреднамеренное поведение?
from django.contrib.gis.db import models
from django.contrib.gis.db.models.functions import Centroid
class Location(models.Model):
coordinates = models.MultiPolygonField(
unique=True,
srid=DATABASE_SRID,
dim=2,
geography=True,
)
...
# Get an arbitrary location that is centered at (20°N, 20°E).
foo = Location.objects.get(pk=1)
bar = Location.objects.filter(pk=1).annotate(center=Centroid("coordinates"))
print(foo.coordinates.centroid.coords)
# > (21.99999999999877, 22.0000000000065)
print(bar.first().center.centroid.coords)
# > (22.000000000008804, 21.999999999992266)
Подробнее здесь: https://stackoverflow.com/questions/798 ... ferent-res