[Qgis-developer] Interpretation of a 3 point CircularString with p0 == p2 (circle)

Marco Hugentobler marco.hugentobler at sourcepole.ch
Thu Jun 23 07:01:10 PDT 2016


Hi Even

I agree it will be good to follow the postgres / gdal interpretation. 
Reading S2, I somehow thought the segment midpoint would be the circle 
midpoint, but it's not the same.

Regards,
Marco

On 06/23/16 15:32, Even Rouault wrote:
> Hi,
>
> I just came into a difference how QGIS and GDAL interpret a CircularString made
> of a 3 points p0, p1, p2 where p0 == p2, which is a way of representing a full
> circle.
>
> GDAL interprets p1 as the symetrical point of p0 with respect to the center
> (https://github.com/osgeo/gdal/blob/trunk/gdal/ogr/ogrcircularstring.cpp#L640),
> that is p1 is on the perimeter of the circle, or said otherwise the center of
> the circle is the midpoint of [p0,p1].
> Whereas QGIS interprets p1 as the center of the circle (
> https://github.com/qgis/QGIS/blob/master/src/core/geometry/qgsgeometryutils.cpp#L359
> )
>
> I'd think GDAL interpretation is the right one, since according to
> http://jtc1sc32.org/doc/N1101-1150/32N1107-WD13249-3--spatial.pdf (ISO SQL MM
> Part 3), paragraph 4.1.6 :
> (let's call this sentence S1)
> """ In the case where the segment is a circle, then the center is located
> at the midpoint of the line connecting the start point with the intermediate
> point. """
>
> But if you look a bit above in the paragraph, there's a sentence (call it S2)
> : """In the special case where a segment is a complete circle, that is, the
> start and end points are coincident, then the intermediate point shall be the
> midpoint of the segment. """, which looks confusing at first. I think this
> sentence must be interpreted considering distances along the curve, in which
> case the "midpoint of the segment" when doing a full walk along the circle
> from p0 back to p0 is the symetrical point of p0 with respect to the center.
>
> I think this interpretation is also more logical since, even in that
> particular case, p0,p1,p2 are all on the arc, like in the general case.
>
> I can also see that PostGIS (in https://github.com/postgis/postgis/blob/svn-
> trunk/liblwgeom/lwalgorithm.c#L252 ) has the same interpretation as GDAL (*)
>
> I'd be happy to read opinions regarding this.
>
> Even
>
> (*) Can also be shown with :
>
> # SELECT
> ST_AsText(ST_Envelope(ST_CurveToLine(ST_GeomFromText('CIRCULARSTRING(-1 0,1
> 0,-1 0)'))));
>                st_astext
> --------------------------------------
>   POLYGON((-1 -1,-1 1,1 1,1 -1,-1 -1))
>
> And http://postgis.net/docs/manual-2.2/using_postgis_dbmanagement.html says
> "The exception to this is for a closed circle, where the start and end points
> are the same. In this case the second point MUST be the center of the arc, ie
> the opposite side of the circle.", which is another way to rephrase S2.
>
>


-- 
Dr. Marco Hugentobler
Sourcepole -  Linux & Open Source Solutions
Weberstrasse 5, CH-8004 Zürich, Switzerland
marco.hugentobler at sourcepole.ch http://www.sourcepole.ch
Technical Advisor QGIS Project Steering Committee



More information about the Qgis-developer mailing list