From dfa35bd5cdf8c485e6a50da907603214409afda4 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 29 Jan 2025 22:07:07 +0100 Subject: [PATCH] gml:CircleByCenterPoint(): return a 5-point CIRCULARSTRING for compliance with ISO/IEC 13249-3:2011 Fixes #11750 --- autotest/ogr/ogr_gml_geom.py | 2 +- ogr/gml2ogrgeometry.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/autotest/ogr/ogr_gml_geom.py b/autotest/ogr/ogr_gml_geom.py index a9a60667f7d5..343c257e3c72 100755 --- a/autotest/ogr/ogr_gml_geom.py +++ b/autotest/ogr/ogr_gml_geom.py @@ -2398,7 +2398,7 @@ def test_gml_CircleByCenterPoint(): geom = ogr.CreateGeometryFromGML(gml) ogrtest.check_feature_geometry( - geom, ogr.CreateGeometryFromWkt("CIRCULARSTRING (-1 2,3 2,-1 2)") + geom, ogr.CreateGeometryFromWkt("CIRCULARSTRING (-1 2,1 4,3 2,1 0,-1 2)") ) diff --git a/ogr/gml2ogrgeometry.cpp b/ogr/gml2ogrgeometry.cpp index 5f79556f82c0..6ce1d011d5f9 100644 --- a/ogr/gml2ogrgeometry.cpp +++ b/ogr/gml2ogrgeometry.cpp @@ -2043,9 +2043,15 @@ GML2OGRGeometry_XMLNode_Internal(const CPLXMLNode *psNode, const char *pszId, p.setX(dfCenterX - dfRadius); p.setY(dfCenterY); poCC->addPoint(&p); + p.setX(dfCenterX); + p.setY(dfCenterY + dfRadius); + poCC->addPoint(&p); p.setX(dfCenterX + dfRadius); p.setY(dfCenterY); poCC->addPoint(&p); + p.setX(dfCenterX); + p.setY(dfCenterY - dfRadius); + poCC->addPoint(&p); p.setX(dfCenterX - dfRadius); p.setY(dfCenterY); poCC->addPoint(&p);