From 96e7a752b6c44a84e18d82d37524c1df64b32e12 Mon Sep 17 00:00:00 2001 From: Denis Rouzaud Date: Fri, 6 Oct 2023 05:25:32 +0200 Subject: [PATCH] Fixed #34882 -- Fixed no options in AsGeoJSON() for geometries in non-default CRS. --- django/contrib/gis/db/models/functions.py | 3 +-- tests/gis_tests/geoapp/test_functions.py | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/django/contrib/gis/db/models/functions.py b/django/contrib/gis/db/models/functions.py index 19da355d28..bd02e3717d 100644 --- a/django/contrib/gis/db/models/functions.py +++ b/django/contrib/gis/db/models/functions.py @@ -195,8 +195,7 @@ class AsGeoJSON(GeoFunc): options = 1 elif crs: options = 2 - if options: - expressions.append(options) + expressions.append(options) super().__init__(*expressions, **extra) def as_oracle(self, compiler, connection, **extra_context): diff --git a/tests/gis_tests/geoapp/test_functions.py b/tests/gis_tests/geoapp/test_functions.py index b75f053b3d..777e17420e 100644 --- a/tests/gis_tests/geoapp/test_functions.py +++ b/tests/gis_tests/geoapp/test_functions.py @@ -11,7 +11,7 @@ from django.db.models import IntegerField, Sum, Value from django.test import TestCase, skipUnlessDBFeature from ..utils import FuncTestMixin -from .models import City, Country, CountryWebMercator, State, Track +from .models import City, Country, CountryWebMercator, ManyPointModel, State, Track class GISFunctionsTests(FuncTestMixin, TestCase): @@ -119,6 +119,25 @@ class GISFunctionsTests(FuncTestMixin, TestCase): chicago_json, ) + @skipUnlessDBFeature("has_AsGeoJSON_function") + def test_asgeojson_option_0(self): + p1 = Point(1, 1, srid=4326) + p2 = Point(2, 2, srid=4326) + obj = ManyPointModel.objects.create( + point1=p1, + point2=p2, + point3=p2.transform(3857, clone=True), + ) + self.assertJSONEqual( + ManyPointModel.objects.annotate(geojson=functions.AsGeoJSON("point3")) + .get(pk=obj.pk) + .geojson, + # GeoJSON without CRS. + json.loads( + '{"type":"Point","coordinates":[222638.98158655,222684.20850554]}' + ), + ) + @skipUnlessDBFeature("has_AsGML_function") def test_asgml(self): # Should throw a TypeError when trying to obtain GML from a