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

创建SimpleFeature

每个SimpleFeature由ID,Geometry、时间信息以及其他属性构成。在「快速入门」代码示例中封装了GanosClient类,包含索引创建、轨迹点创建等功能,用于简化用户代码量,建议直接使用。若要使用原生的GeoTools API,可通过SimpleFeatureBuilder类来创建SimpleFeature对象,如下:
SimpleFeatureType sft = ....;
SimpleFeatureBuilder sfBuilder = new SimpleFeatureBuilder(sft);
builder.set("属性名", 属性值);
 ...
builder.set("geom", Geometry);  //设置空间对象,"geom"为固定写法
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))"表示一个面状要素,最首尾两个坐标点相同构成一个环。详细信息请参考:参考

  • 点要素
    以下两种创建方式任选其一:
    1. 通过Coordinate对象创建
      GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
      Coordinate coord = new Coordinate(1, 1);
      Point point = geometryFactory.createPoint(coord);
                  
    2. 通过WKT创建
      GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
       WKTReader reader = new WKTReader(geometryFactory);
       Point point = (Point) reader.read("POINT (1 1)");
                  
  • 线要素
    以下两种创建方式任选其一:
    1. 通过Coordinate对象
      GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
      Coordinate[] coords  =
       new Coordinate[] {new Coordinate(0, 2), new Coordinate(2, 0), new Coordinate(8, 6) };
      LineString line = geometryFactory.createLineString(coordinates);
                  
    2. 通过WKT描述:
      GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
      WKTReader reader = new WKTReader( geometryFactory );
      LineString line = (LineString) reader.read("LINESTRING(0 2, 2 0, 8 6)");
                  
  • 面要素
    以下两种创建方式任选其一:
    1. 通过Coordinate对象
      GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
      Coordinate[] coords  =
         new Coordinate[] {new Coordinate(4, 0), new Coordinate(2, 2),
                           new Coordinate(4, 4), new Coordinate(6, 2), new Coordinate(4, 0) };
      LinearRing ring = geometryFactory.createLinearRing( coords );
      LinearRing holes[] = null; // use LinearRing[] to represent holes
      Polygon polygon = geometryFactory.createPolygon(ring, holes );
                  
    2. 通过WKT描述:
      GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory( null );
      WKTReader reader = new WKTReader( geometryFactory );
      Polygon polygon = (Polygon) reader.read("POLYGON((20 10, 30 0, 40 10, 30 20, 20 10))");
                  

设置其他属性

可以通过SimpleFeature的UserData字段设置其他自定义信息,比如HBase Ganos内置了诸多Hints,使用自定义FeatureID(可节省存储空间)。
SimpleFeature feature =...
feature.getUserData().put(Hints.USE_PROVIDED_FID, java.lang.Boolean.TRUE);