在轨迹场景下,时空对象可简单理解为"轨迹点",包含空间位置、时间、其他属性信息。在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))"表示一个面状要素,最首尾两个坐标点相同构成一个环。详细参考:https://en.wikipedia.org/wiki/Well-known_text

  • 点要素

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

  • 通过Coordinate对象创建
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
Coordinate coord = new Coordinate(1, 1);
Point point = geometryFactory.createPoint(coord);
			
  • 通过WKT创建
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
 WKTReader reader = new WKTReader(geometryFactory);
 Point point = (Point) reader.read("POINT (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);
			
  • 通过WKT描述:
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
WKTReader reader = new WKTReader( geometryFactory );
LineString line = (LineString) reader.read("LINESTRING(0 2, 2 0, 8 6)");
			
  • 面要素

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

  • 通过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 );
			
  • 通过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,包括:

  • 使用自定义FeautureID(可节省存储空间)
SimpleFeature feature =...
feature.getUserData().put(Hints.USE_PROVIDED_FID, java.lang.Boolean.TRUE);