全部产品
云市场

创建时空对象

更新时间:2019-08-12 10:02:01

创建时空对象

在轨迹场景下,时空对象可简单理解为”轨迹点”,包含空间位置、时间、其他属性信息。在HBase Ganos SDK中,时空对象映射的就是SimpleFeature,定义好索引结构后,即可创建。

创建SimpleFeature

每个SimpleFeature由ID,Geometry、时间信息以及其他属性构成。
在「快速入门」代码示例中封装了GanosClient类,包含索引创建、轨迹点创建等功能,用于简化用户代码量,建议直接使用。若要使用原生的GeoTools API,可通过SimpleFeatureBuilder类来创建SimpleFeature对象,如下:

  1. SimpleFeatureType sft = ....;
  2. SimpleFeatureBuilder sfBuilder = new SimpleFeatureBuilder(sft);
  3. builder.set("属性名", 属性值);
  4. ...
  5. builder.set("geom", Geometry); //设置空间对象,"geom"为固定写法
  6. SimpleFeature feature = builder.buildFeature(object_id + "_" + date.getTime());

设置Geometry对象

在创建SimpleFeature环节中,需要设置geometry对象(见上面代码)。Geometry是SimpleFeature的一部分,存储要素的空间信息。这里所说的“要素”,包括点要素、线要素、面要素等,在时空轨迹的场景下可简单理解为“轨迹点”。
GeoTools API提供了GeometryFactory工具类帮助用户创建Geometry对象,具体可以通过两种方式创建:

  • 通过Coordinate对象

这种方式创建比较直观,该对象表示一个坐标点,推荐使用。

  • 通过WKT文本创建

WKT(Well-known text)是一种空间对象的文本标记语言,如字符串”POINT (1 1)”表示一个点状要素,其坐标为1,1;字符串”LINESTRING(0 2, 2 0, 8 6)”表示一条线状要素,由三个坐标点组成;字符串”POLYGON((20 10, 30 0, 40 10, 30 20, 20 10))”表示一个面状要素,最首尾两个坐标点相同构成一个环。详细参考:https://en.wikipedia.org/wiki/Well-known_text

  • 点要素

以下两种创建方式任选其一:

  • 通过Coordinate对象创建

    1. GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
    2. Coordinate coord = new Coordinate(1, 1);
    3. Point point = geometryFactory.createPoint(coord);
  • 通过WKT创建

    1. GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
    2. WKTReader reader = new WKTReader(geometryFactory);
    3. Point point = (Point) reader.read("POINT (1 1)");
  • 线要素

以下两种创建方式任选其一:

  • 通过Coordinate对象

    1. GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
    2. Coordinate[] coords =
    3. new Coordinate[] {new Coordinate(0, 2), new Coordinate(2, 0), new Coordinate(8, 6) };
    4. LineString line = geometryFactory.createLineString(coordinates);
  • 通过WKT描述:

    1. GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
    2. WKTReader reader = new WKTReader( geometryFactory );
    3. LineString line = (LineString) reader.read("LINESTRING(0 2, 2 0, 8 6)");
  • 面要素

以下两种创建方式任选其一:

  • 通过Coordinate对象

    1. GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
    2. Coordinate[] coords =
    3. new Coordinate[] {new Coordinate(4, 0), new Coordinate(2, 2),
    4. new Coordinate(4, 4), new Coordinate(6, 2), new Coordinate(4, 0) };
    5. LinearRing ring = geometryFactory.createLinearRing( coords );
    6. LinearRing holes[] = null; // use LinearRing[] to represent holes
    7. Polygon polygon = geometryFactory.createPolygon(ring, holes );
  • 通过WKT描述:

    1. GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory( null );
    2. WKTReader reader = new WKTReader( geometryFactory );
    3. Polygon polygon = (Polygon) reader.read("POLYGON((20 10, 30 0, 40 10, 30 20, 20 10))");

设置其他属性

可以通过SimpleFeature的UserData字段设置其他自定义信息,比如HBase Ganos内置了诸多Hints,包括:

  • 禁用索引(详见「创建索引」「禁用索引」一节)
  • 使用自定义FeautureID(可节省存储空间)
    1. SimpleFeature feature =...
    2. feature.getUserData().put(Hints.USE_PROVIDED_FID, java.lang.Boolean.TRUE);