Package com.esri.hadoop.hive

Source Code of com.esri.hadoop.hive.ST_GeomCollection

package com.esri.hadoop.hive;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.io.BytesWritable;
import org.apache.hadoop.io.Text;
import org.apache.hive.pdk.HivePdkUnitTest;
import org.apache.hive.pdk.HivePdkUnitTests;

import com.esri.core.geometry.Geometry;
import com.esri.core.geometry.GeometryEngine;
import com.esri.core.geometry.SpatialReference;
import com.esri.core.geometry.ogc.OGCGeometry;

@Description(
  name = "ST_GeomCollection",
  value = "_FUNC_(wkt) - construct a multi-part ST_Geometry from OGC well-known text",
  extended = "Example:\n" +
  "  > SELECT _FUNC_('multipoint ((1 0), (2 3))') FROM src LIMIT 1;  -- constructs ST_MultiPoint\n" +
  "OGC Compliance Notes : \n" +
  " ST_GeomCollection on Hive does not support collections - only multi-part geometries.\n" +
  "ST_GeomCollection('POINT(1 1), LINESTRING(2 0,3 0)') -- not supported\n"
  )

@HivePdkUnitTests(
  cases = {
    @HivePdkUnitTest(
      query = "select ST_Equals(ST_GeomCollection('MULTIPOINT ((10 40), (40 30))'), ST_GeomFromText('MULTIPOINT ((10 40), (40 30))')) from onerow",
      result = "true"
      ),
    @HivePdkUnitTest(
      query = "select ST_Equals(ST_GeomCollection('multilinestring ((2 4, 10 10), (20 20, 7 8))'), ST_GeomFromText('multilinestring ((2 4, 10 10), (20 20, 7 8))')) from onerow",
      result = "true"
      ),
    @HivePdkUnitTest(
      query = "select ST_Equals(ST_GeomCollection('multipolygon (((3 3, 4 6, 5 3, 3 3)),((8 24, 9 25, 1 28, 8 24)))'), ST_GeomFromText('multipolygon (((3 3, 4 6, 5 3, 3 3)),((8 24, 9 25, 1 28, 8 24)))')) from onerow",
      result = "true"
      )
    }
  )

public class ST_GeomCollection extends ST_Geometry {

  static final Log LOG = LogFactory.getLog(ST_GeomCollection.class.getName());

  public BytesWritable evaluate(Text wkt) throws UDFArgumentException {
    return evaluate(wkt, 0);
  }

  public BytesWritable evaluate(Text wkwrap, int wkid) throws UDFArgumentException {

    String wkt = wkwrap.toString();

    try {
      Geometry geomObj = GeometryEngine.geometryFromWkt(wkt,
                                0,
                                Geometry.Type.Unknown);
      SpatialReference spatialReference = null// Idea: OGCGeometry.setSpatialReference after .fromText
      if (wkid != GeometryUtils.WKID_UNKNOWN) {
        spatialReference = SpatialReference.create(wkid);
      }
      OGCGeometry ogcObj = OGCGeometry.createFromEsriGeometry(geomObj, spatialReference);
      return GeometryUtils.geometryToEsriShapeBytesWritable(ogcObj);
    } catch (Exception e) {  // IllegalArgumentException, GeometryException
      LogUtils.Log_InvalidText(LOG, wkt);
      return null;
    }
  }

}
TOP

Related Classes of com.esri.hadoop.hive.ST_GeomCollection

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.