我有一个Django模型,它包含多边形的坐标:
geometria = models.PolygonField(srid=4326, null=True, geography=True)我手动从Google地图web界面获取一个多边形的lat长坐标,并将它们输入数据库。我相信谷歌地图提供的全球定位系统坐标是4326。
我使用@react google /api在谷歌地图上绘制了这些坐标,它与我所期望的相符。(见下图)
接下来,我尝试使用Postgis复制多边形形状,并创建其中的SVG,但这是我遇到问题的地方。如您所见,绿色多边形具有相同的基本形状,但与谷歌地图的输出相比,它已经被水平拉伸。
我认为问题在于svg使用的是4326投影,而不是谷歌地图使用的3857吗?我试图在postgis中转换数据,但我所做的一切似乎都没有什么不同。注意,当我在没有ST_Transform的情况下创建svg时,它的形状如下所示。我有什么办法解决这个问题吗?

我在Django中使用以下SQL从数据库中提取数据:
cursor.execute("SELECT ST_AsSVG(ST_AsEWKT(ST_Transform(ST_AsEWKT(geometria),3857))) FROM public.locations_locationdata WHERE id= %s", [self.id])其中geometria是包含多边形的数据库字段。
我使用以下python构建svg文件:
svg_string = []
svg_string.append('<svg viewBox="')
svg_string.append(calculated_view_box)
svg_string.append('" xmlns="http://www.w3.org/2000/svg" width="512" height="512" version="1.1" transform="scale(1 -1) rotate(90)" transform-origin="256 256">')
svg_string.append('<path fill="green" stroke="blue" stroke-width="1" d="')
svg_string.append(reconstruct_path_string)
svg_string.append('"/></svg>')
<svg viewBox="5735636.0 75092.0 419.0 619.0" xmlns="http://www.w3.org/2000/svg" width="512" height="512" version="1.1" transform="scale(1 -1) rotate(90)" transform-origin="256 256"><path fill="green" stroke="blue" stroke-width="1" d="M 5736044.89547394 75658.7303669334 L 5735771.38348506 75102.09404005 5735654.72065871 75164.2146256582 5735646.59433588 75700.4781146285 5735842.07136171 75663.4061145318 Z"/></svg>有什么想法吗?我怎样才能修复svg,使其与google地图形状相匹配?
发布于 2021-12-06 17:38:59
问题是在创建GEOSGeometry对象时,我不正确地转换了lat和lng值。后来,当我把lat和lng传递回谷歌地图时,我修复了这个换位,这掩盖了问题。
见下文:
#polygon = GEOSGeometry('POLYGON ((51.527768 -0.679638,51.525311 -0.674638,51.524263 -0.675196,51.524190 -0.680013,51.525946 -0.679680,51.527768 -0.679638))', srid=4326)
polygon = GEOSGeometry('POLYGON ((-0.679638 51.527768, -0.674638 51.525311, -0.675196 51.524263, -0.680013 51.524190, -0.679680 51.525946, -0.679638 51.527768))', srid=4326)坐标应该是(经纬度)对
https://stackoverflow.com/questions/70197673
复制相似问题