[ 
https://issues.apache.org/jira/browse/HIVE-29323?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated HIVE-29323:
----------------------------------
    Labels: pull-request-available  (was: )

> st_convexhull shouldn't return multipolygon
> -------------------------------------------
>
>                 Key: HIVE-29323
>                 URL: https://issues.apache.org/jira/browse/HIVE-29323
>             Project: Hive
>          Issue Type: Improvement
>            Reporter: Csaba Ringhofer
>            Assignee: Ayush Saxena
>            Priority: Minor
>              Labels: pull-request-available
>
> {code}
> select ST_AsText(ST_ConvexHull(ST_GeomFromText('multipoint ((0 0), (2 0), (2 
> 2), (0 2), (1 1))')));
> result: MULTIPOLYGON (((0 0, 2 0, 2 2, 0 2, 0 0)))
> {code}
> This is unexpected, because the convex hull of a geometry is usually a single 
> convex polygon. In postgis it is usually a polygon, with the exception of 
> some special cases.
> From https://postgis.net/docs/ST_ConvexHull.html :
> "In the general case the convex hull is a Polygon. The convex hull of two or 
> more collinear points is a two-point LineString. The convex hull of one or 
> more identical points is a Point."
> The issue was found while adding tests for ST_ConvexHull in Apache Impala 
> (which imports these UDFs from Hive): 
> https://gerrit.cloudera.org/#/c/23604/6/testdata/workloads/functional-query/queries/QueryTest/geospatial-esri.test
>  
> The current behavior comes from  
> https://github.com/Esri/spatial-framework-for-hadoop  The related code looks 
> unchanged in Hive.
> The type of the geometry is deduced by GeometryUtils.getInferredOGCType:
> https://github.com/apache/hive/blob/e34e87faf32b0167f438e30344f0a04fe10f6575/ql/src/java/org/apache/hadoop/hive/ql/udf/esri/ST_ConvexHull.java#L101
> https://github.com/apache/hive/blob/866cc7d2a69d2d8b018917488ab243244707aae8/ql/src/java/org/apache/hadoop/hive/ql/udf/esri/GeometryUtils.java#L197
> The underlying https://github.com/Esri/geometry-api-java  lib uses Polygon 
> class for both polygon/multipolygon.
> I think that getExteriorRingCount() should be used to decide whether it is 
> polygon or multipolygon before serializing the Geometry: 
> https://github.com/Esri/geometry-api-java/blob/020a1a9f6e1126663a0a669095e61d265ca95019/src/main/java/com/esri/core/geometry/Polygon.java#L144
> A related issue about ST_Aggr_ConvexHull: 
> https://github.com/Esri/spatial-framework-for-hadoop/pull/181
> [~ayushsaxena]



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to