mirror of
https://github.com/django/django.git
synced 2025-06-03 18:49:12 +00:00
Refs #31014 -- Added srid argument to FromWKB/FromWKT() GIS functions.
This commit is contained in:
parent
7646b9023d
commit
10b31eea33
@ -367,15 +367,28 @@ class ForcePolygonCW(GeomOutputGeoFunc):
|
|||||||
|
|
||||||
|
|
||||||
class FromWKB(GeoFunc):
|
class FromWKB(GeoFunc):
|
||||||
output_field = GeometryField(srid=0)
|
arity = 2
|
||||||
arity = 1
|
|
||||||
geom_param_pos = ()
|
geom_param_pos = ()
|
||||||
|
|
||||||
|
def __init__(self, expression, srid=0, **extra):
|
||||||
|
expressions = [
|
||||||
|
expression,
|
||||||
|
self._handle_param(srid, "srid", int),
|
||||||
|
]
|
||||||
|
if "output_field" not in extra:
|
||||||
|
extra["output_field"] = GeometryField(srid=srid)
|
||||||
|
super().__init__(*expressions, **extra)
|
||||||
|
|
||||||
class FromWKT(GeoFunc):
|
def as_oracle(self, compiler, connection, **extra_context):
|
||||||
output_field = GeometryField(srid=0)
|
# Oracle doesn't support the srid parameter.
|
||||||
arity = 1
|
source_expressions = self.get_source_expressions()
|
||||||
geom_param_pos = ()
|
clone = self.copy()
|
||||||
|
clone.set_source_expressions(source_expressions[:1])
|
||||||
|
return super(FromWKB, clone).as_sql(compiler, connection, **extra_context)
|
||||||
|
|
||||||
|
|
||||||
|
class FromWKT(FromWKB):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class GeoHash(GeoFunc):
|
class GeoHash(GeoFunc):
|
||||||
|
@ -359,24 +359,36 @@ are returned unchanged.
|
|||||||
``FromWKB``
|
``FromWKB``
|
||||||
===========
|
===========
|
||||||
|
|
||||||
.. class:: FromWKB(expression, **extra)
|
.. class:: FromWKB(expression, srid=0, **extra)
|
||||||
|
|
||||||
*Availability*: MariaDB, `MySQL
|
*Availability*: MariaDB, `MySQL
|
||||||
<https://dev.mysql.com/doc/refman/en/gis-wkb-functions.html#function_st-geomfromwkb>`__,
|
<https://dev.mysql.com/doc/refman/en/gis-wkb-functions.html#function_st-geomfromwkb>`__,
|
||||||
Oracle, `PostGIS <https://postgis.net/docs/ST_GeomFromWKB.html>`__, SpatiaLite
|
Oracle, `PostGIS <https://postgis.net/docs/ST_GeomFromWKB.html>`__, SpatiaLite
|
||||||
|
|
||||||
Creates geometry from `Well-known binary (WKB)`_ representation.
|
Creates geometry from `Well-known binary (WKB)`_ representation. The optional
|
||||||
|
``srid`` argument allows to specify the SRID of the resulting geometry.
|
||||||
|
``srid`` is ignored on Oracle.
|
||||||
|
|
||||||
|
.. versionchanged:: 5.1
|
||||||
|
|
||||||
|
The ``srid`` argument was added.
|
||||||
|
|
||||||
``FromWKT``
|
``FromWKT``
|
||||||
===========
|
===========
|
||||||
|
|
||||||
.. class:: FromWKT(expression, **extra)
|
.. class:: FromWKT(expression, srid=0, **extra)
|
||||||
|
|
||||||
*Availability*: MariaDB, `MySQL
|
*Availability*: MariaDB, `MySQL
|
||||||
<https://dev.mysql.com/doc/refman/en/gis-wkt-functions.html#function_st-geomfromtext>`__,
|
<https://dev.mysql.com/doc/refman/en/gis-wkt-functions.html#function_st-geomfromtext>`__,
|
||||||
Oracle, `PostGIS <https://postgis.net/docs/ST_GeomFromText.html>`__, SpatiaLite
|
Oracle, `PostGIS <https://postgis.net/docs/ST_GeomFromText.html>`__, SpatiaLite
|
||||||
|
|
||||||
Creates geometry from `Well-known text (WKT)`_ representation.
|
Creates geometry from `Well-known text (WKT)`_ representation. The optional
|
||||||
|
``srid`` argument allows to specify the SRID of the resulting geometry.
|
||||||
|
``srid`` is ignored on Oracle.
|
||||||
|
|
||||||
|
.. versionchanged:: 5.1
|
||||||
|
|
||||||
|
The ``srid`` argument was added.
|
||||||
|
|
||||||
``GeoHash``
|
``GeoHash``
|
||||||
===========
|
===========
|
||||||
|
@ -101,6 +101,11 @@ Minor features
|
|||||||
* :attr:`.OGRGeometry.centroid` is now available on all supported geometry
|
* :attr:`.OGRGeometry.centroid` is now available on all supported geometry
|
||||||
types.
|
types.
|
||||||
|
|
||||||
|
* :class:`FromWKB() <django.contrib.gis.db.models.functions.FromWKB>` and
|
||||||
|
:class:`FromWKT() <django.contrib.gis.db.models.functions.FromWKT>` functions
|
||||||
|
now support the optional ``srid`` argument (except for Oracle where it is
|
||||||
|
ignored).
|
||||||
|
|
||||||
:mod:`django.contrib.messages`
|
:mod:`django.contrib.messages`
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
@ -348,20 +348,24 @@ class GISFunctionsTests(FuncTestMixin, TestCase):
|
|||||||
@skipUnlessDBFeature("has_FromWKB_function")
|
@skipUnlessDBFeature("has_FromWKB_function")
|
||||||
def test_fromwkb(self):
|
def test_fromwkb(self):
|
||||||
g = Point(56.811078, 60.608647)
|
g = Point(56.811078, 60.608647)
|
||||||
g2 = City.objects.values_list(
|
pt1, pt2 = City.objects.values_list(
|
||||||
functions.FromWKB(Value(g.wkb.tobytes())),
|
functions.FromWKB(Value(g.wkb.tobytes())),
|
||||||
flat=True,
|
functions.FromWKB(Value(g.wkb.tobytes()), srid=4326),
|
||||||
)[0]
|
)[0]
|
||||||
self.assertIs(g.equals_exact(g2, 0.00001), True)
|
self.assertIs(g.equals_exact(pt1, 0.00001), True)
|
||||||
|
self.assertIsNone(pt1.srid)
|
||||||
|
self.assertEqual(pt2.srid, 4326)
|
||||||
|
|
||||||
@skipUnlessDBFeature("has_FromWKT_function")
|
@skipUnlessDBFeature("has_FromWKT_function")
|
||||||
def test_fromwkt(self):
|
def test_fromwkt(self):
|
||||||
g = Point(56.811078, 60.608647)
|
g = Point(56.811078, 60.608647)
|
||||||
g2 = City.objects.values_list(
|
pt1, pt2 = City.objects.values_list(
|
||||||
functions.FromWKT(Value(g.wkt)),
|
functions.FromWKT(Value(g.wkt)),
|
||||||
flat=True,
|
functions.FromWKT(Value(g.wkt), srid=4326),
|
||||||
)[0]
|
)[0]
|
||||||
self.assertIs(g.equals_exact(g2, 0.00001), True)
|
self.assertIs(g.equals_exact(pt1, 0.00001), True)
|
||||||
|
self.assertIsNone(pt1.srid)
|
||||||
|
self.assertEqual(pt2.srid, 4326)
|
||||||
|
|
||||||
@skipUnlessDBFeature("has_GeoHash_function")
|
@skipUnlessDBFeature("has_GeoHash_function")
|
||||||
def test_geohash(self):
|
def test_geohash(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user