GeoTools API を使用して時空間データを HBase Ganos にインポートします。SimpleFeature を構築し、Geometry オブジェクトをアタッチして、単一レコードまたは一括挿入としてストアに書き込みます。
SimpleFeature の構築
HBase Ganos は、各空間フィーチャーを SimpleFeature として表現します。これは、ID、Geometry オブジェクト、および型付きプロパティを保持するオブジェクトです。GeoTools API の SimpleFeatureBuilder を使用して構築します。
SimpleFeatureType sft = ....;
SimpleFeatureBuilder builder = new SimpleFeatureBuilder(sft);
builder.set("property_name", propertyValue);
...
builder.set("geom", Geometry);
SimpleFeature feature = builder.buildFeature(object_id + "_" + date.getTime());
デフォルトでは、Ganos はフィーチャー ID として 128 ビットの汎用一意識別子 (UUID) を生成します。代わりにカスタム ID を使用してストレージ領域を節約するには、書き込み前に USE_PROVIDED_FID ヒントを設定してください。
SimpleFeature feature = ...
feature.getUserData().put(Hints.USE_PROVIDED_FID, java.lang.Boolean.TRUE);
Geometry オブジェクトの作成
各 SimpleFeature は、空間的な位置または形状を記述する 1 つの Geometry オブジェクトを保持します。Geometry 空間エンティティオブジェクトの完全な仕様については、「Geometry」をご参照ください。
GeoTools API の GeometryFactory を使用して Geometry オブジェクトを作成します。各ジオメトリタイプには、Coordinate オブジェクトから作成する方法と、Well-known Text (WKT) から作成する方法の 2 つの構築方法があります。WKT は、ベクタージオメトリ、空間参照系、および座標変換を表現するためのテキストマークアップ言語です。
-
ポイントフィーチャー
-
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(coords); -
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; // ホールの表現には LinearRing[] を使用します 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))");
-
ストアへのフィーチャーの書き込み
HBase Ganos は、GeoTools API の SimpleFeatureWriter を介してフィーチャーを書き込みます。SimpleFeatureWriter はトランザクションをサポートしており、getFeatureWriterAppend メソッドを DataStore で呼び出すことでライターを取得します。
-
単一の 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(); -
SimpleFeatureStoreを使用して SimpleFeature を一括挿入する場合:List<SimpleFeature> features = ... SimpleFeatureStore featureStore = (SimpleFeatureStore) ds.getFeatureSource(sft.getTypeName()); List<FeatureId> featureIds = featureStore.addFeatures(new ListFeatureCollection(sft, features));