构建SimpleFeature
HBase Ganos通过SimpleFeature类表示空间要素。每个SimpleFeature由ID,Geometry对象与其他属性构成,GeoTools API提供了SimpleFeatureBuilder类帮助用户创建SimpleFeature对象:
SimpleFeatureType sft = ....;
SimpleFeatureBuilder sfBuilder = new SimpleFeatureBuilder(sft);
builder.set("属性名", 属性值);
...
builder.set("geom", Geometry);
SimpleFeature feature = builder.buildFeature(object_id + "_" + date.getTime());
说明 构建SimpleFeature时,Ganos会默认生成128位的UUID作为Feature ID。为了节省存储空间,用户可以自己指定ID,具体方式为:
SimpleFeature feature =...
feature.getUserData().put(Hints.USE_PROVIDED_FID, java.lang.Boolean.TRUE);
创建Geometry对象
每个SimpleFeature包含一个Geometry对象用来表示要素的空间对象。Geometry的各个空间实体对象定义具体请参见官方文档。
GeoTools API提供了GeometryFactory工具类帮助用户创建Geometry对象,具体方法如下:
- 点要素
- 通过Coordinate对象
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(); Coordinate coord = new Coordinate(1, 1); Point point = geometryFactory.createPoint(coord);
- 通过WKT描述:WKT(Well-known text)是一种文本标记语言,用于表示矢量空间对象、空间参照系统及空间参照系统之间的转换
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(); WKTReader reader = new WKTReader(geometryFactory); Point point = (Point) reader.read("POINT (1 1)");
- 通过Coordinate对象
- 线要素
- 通过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对象
- 面要素
- 通过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))");
- 通过Coordinate对象
数据入库
HBase Ganos通过GeoTools API中的SimpleFeatureWriter写入数据,SimpleFeatureWriter支持事务,可以通过DataStore的getFeatureWriterAppend方法获取。
- 插入单个SimpleFeature
SimpleFeatureType sft = ....;
SimpleFeatureWriter writer=(SimpleFeatureWriter)ds.getFeatureWriterAppend(sft.getTypeName(), Transaction.AUTO_COMMIT);
SimpleFeature toWrite=writer.next();
toWrite.setAttributes(feature.getAttributes());
toWrite.getUserData().putAll(feature.getUserData());
writer.write();
writer.close();
- 批量插入SimpleFeature
HBase Ganos支持批量插入SimpleFeature,通过GeoTools API中的SimpleFeatureStore类实现。
List<SimpleFeature> features=...
SimpleFeatureStore featureStore = (SimpleFeatureStore) ds.getFeatureSource(sft.getTypeName());
List<FeatureId> featureIds = featureStore.addFeatures(new ListFeatureCollection(sft,features));