我正在运行一个django应用程序,我正在为我的db使用PostGis扩展。当我发送坐标时,我试图更好地理解引擎盖下发生了什么,特别是因为我使用的是不同的坐标系统,它们会转换成不同的SRID。我的问题有三个:
假设我有这样一个模型(请注意,我正在设置标准SRID=4326):
class MyModel(models.Model):
name = models.CharField(
max_length=120,
)
point = models.PointField(
srid=4326,
)
polygon = models.PolygonField(
srid=4326,
)我在这里读到django的文档:
此外,如果
位于与字段不同的坐标系统(具有不同的GEOSGeometry值),则将使用空间数据库的转换过程将其隐式转换为模型字段的SRID
因此,如果我正确地理解了这一点,这意味着当我发送这样的API请求时:
data = {
"name": "name"
"point": "SRID=2345;POLYGON ((12.223242267 280.123144553))"
"polygon": "SRID=5432;POLYGON ((133.2345662 214.1429138285, 123.324244572 173.755820912250072))"
}
response = requests.request("post", url=url, data=data)多边形和点都将正确地转换为SRID=4326?
编辑:
当我用SRID=25832;POINT (11.061859 49.460983)发送点时,我从DB获得'SRID=4326;POINT (11.061859 49.460983)'。当我用'SRID=25832;POLYGON ((123.2796155732267 284.1831980485285, ' '127.9249715130572 273.7782091450072, 142.2351651215613 ' '280.3825718937042, 137.558146278483 290.279508688337, ' '123.2796155732267 284.1831980485285))'发送多边形时,我从DB中得到一个多边形'SRID=4326;POLYGON ((4.512360573651161 0.002563158966576373, ' '4.512402191765552 0.002469312460126783, 4.512530396754145 ' '0.002528880231016955, 4.512488494972807 0.00261814442892858, ' '4.512360573651161 0.002563158966576373))'。
查询它吗?
不幸的是,我还没有找到一种方法来将相同的点查询回原来的SRID。这有可能吗?
,
SRID=4326是一个很好的标准吗?谢谢你提前给我的帮助。真的很感激。
发布于 2021-02-17 12:28:00
转换几何的SRS不仅仅是改变它们的SRID。因此,如果由于某种原因,在转换后坐标返回的值完全相同,很可能根本就没有转换。
此示例使用ST_Transform将几何从25832转换为4326。你自己看看结果:
WITH j (geom) AS (
VALUES('SRID=25832;POINT (11.061 49.463)'::geometry))
SELECT ST_AsEWKT(geom),ST_AsEWKT(ST_Transform(geom,4326)) FROM j;
st_asewkt | st_asewkt
---------------------------------+------------------------------------------------------
SRID=25832;POINT(11.061 49.463) | SRID=4326;POINT(4.511355210946569 0.000446125446657)
(1 Zeile)确保django确实在存储您提到的值。发送一个25832几何并直接检查数据库中的SRS。如果您只使用django进行检查,那么可能是因为它再次在请求中转换坐标,这可能解释您看不到任何不同之处。
关于你的问题:
是一个很好的SRID=4326标准吗?
WGS84是全世界使用最多的SRS,所以我倾向于说是,但这取决于您的用例。如果您不确定要使用哪个SRS,它可能表明您的用例没有对它施加任何限制。所以,坚持使用WGS84,但是要记住,在应用程序中不需要混合不同的SRS。顺便说一句:如果您试图将几何图形存储在同一个表中的多个SRS中,PostgreSQL将引发异常;)
发布于 2021-02-17 11:48:35
首先,我不是地理信息系统的专家(我在Django和GIS中创造了一些小东西),但是.在这篇关于GeoDjango:https://docs.djangoproject.com/en/3.1/ref/contrib/gis/tutorial/#automatic-spatial-transformations的文档中。根据该计划:
在进行空间查询时,GeoDjango会自动转换位于不同坐标系中的几何图形。..。
在控制台(./manage.py shell)中尝试:
from <yourapp>.models import MyModel
obj1 = MyModel.objects.all().first()
print(obj1)
print(obj1.point)
print(dir(obj1.point))
print(obj1.point.srid)-编辑--您可以手动测试与此页面类似的SRID之间的转换:https://gis.stackexchange.com/questions/94640/geodjango-transform-not-working
obj1.point.transform(<new-srid>)https://stackoverflow.com/questions/66239905
复制相似问题