[geos-devel] [GEOS] #609: GEOSPointOnSurface returns EMPTY for single-point linestring

Martin Davis mtnclimb at telus.net
Fri Jan 11 16:39:58 PST 2013


Fixes to JTS Centroid and InteriorPoint have been committed to SVN 
(along with appropriate unit tests)

On 1/11/2013 9:45 AM, Martin Davis wrote:
> I just realized some corner cases, which require some clarification to 
> deal with.
>
> One is geometries with multiple zero-length lines.  In this case I 
> think the geometries should be treated as points, and the centroid and 
> interior point computed accordingly.
>
> A similar situation exists for polygons with no area (which are 
> invalid, but it's still nice to return a sensible answer).  A similar 
> strategy should work - treat them as points.  Polygons with extent but 
> no area (eg POLYGON ((200 200, 200 300, 200 200, 200 200))) can be 
> treated as if they are lines.
>
> In all cases, if geometry components of higher dimension are present, 
> the lower-dimension geometries are ignored.
>
> This is going to require more significant change to handle - in 
> particular, it points toward having single class for Centroid to 
> handle all geometry types.
>
> On 1/11/2013 9:32 AM, Martin Davis wrote:
>> Just to clarify my original response, the primary constraint on 
>> functions that return geometry values is that they return a valid 
>> geometry that makes some sort of sense.
>>
>> So in the case of centroid, regardless of what is "mathematically 
>> correct" a valid sensible geometry should be returned (as opposed to 
>> a meaningless geometry with NaN ordinates, as now happens).
>>
>> In the case of interiorPoint the situation is even more clearcut - 
>> obviously the interior point should be one of the points in the 
>> geometry.
>>
>> On 1/11/2013 6:01 AM, GEOS wrote:
>>> #609: GEOSPointOnSurface returns EMPTY for single-point linestring
>>> ------------------------+--------------------------------------------------- 
>>>
>>>   Reporter:  strk        |       Owner:  geos-devel@…
>>>       Type:  defect      |      Status:  new
>>>   Priority:  major       |   Milestone:  3.3.7
>>> Component:  Default     |     Version:  3.3.6
>>>   Severity:  Unassigned  |    Keywords:
>>> ------------------------+--------------------------------------------------- 
>>>
>>>
>>> Comment(by strk):
>>>
>>>   So for GEOSCentroid the answer is correct, in that by definition the
>>>   CentroidLine class computes the centroid of all segment's midpoint
>>>   weighted by segment length, so a zero-length segment is not 
>>> considered.
>>>
>>>   Now, the algorithm of InteriorPointLine [1] is:
>>>
>>>      - Find an interior vertex which is closest to the centroid of the
>>>   linestring.
>>>      - If there is no interior vertex, find the endpoint which is 
>>> closest to
>>>   the centroid.
>>>
>>>   [1]
>>> http://www.vividsolutions.com/jts/javadoc/com/vividsolutions/jts/algorithm/InteriorPointLine.html 
>>>
>>>
>>>   But if there's no interior vertex both endpoints are equidistant 
>>> to the
>>>   centroid, aren't them ?
>>>   Martin: am I missing anything ?
>>>
>>
>> _______________________________________________
>> geos-devel mailing list
>> geos-devel at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/geos-devel
>>
>> -----
>> No virus found in this message.
>> Checked by AVG - www.avg.com
>> Version: 2013.0.2805 / Virus Database: 2637/6000 - Release Date: 
>> 12/31/12
>> Internal Virus Database is out of date.
>
> _______________________________________________
> geos-devel mailing list
> geos-devel at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/geos-devel
>
> -----
> No virus found in this message.
> Checked by AVG - www.avg.com
> Version: 2013.0.2805 / Virus Database: 2637/6000 - Release Date: 12/31/12
> Internal Virus Database is out of date.



More information about the geos-devel mailing list