- はじめに
- マップに GeoJsonLayer を追加する
- GeoJsonLayer を削除する
- GeoJsonFeature を追加および削除する
- GeoJsonFeatures とそのプロパティにアクセスする
- GeoJsonLayer と GeoJsonFeatures のスタイルを設定する
- デモアプリを見る
はじめに
GeoJSON は JSON データ形式の拡張で、地理的データを表します。このユーティリティを使うと、GeoJSON 形式で地理的な対象物を保存し、それらをマップ上にレイヤとしてレンダリングすることができます。マップに GeoJSON データを追加したり、マップからこのデータを削除したりするには、それぞれ addLayerToMap()
と removeLayerFromMap()
を呼び出します。同様に、addFeature()
と removeFeature()
を呼び出して GeoJsonFeature
オブジェクトを渡すことで、個々の対象物を追加および削除できます。対象物にアクセスするには、getFeatures()
を呼び出して、レイヤに追加されているすべての
GeoJsonFeature
オブジェクトの iterable を取得します。
対象物をレイヤに追加する前に、getDefaultPointStyle()
、getDefaultLineStringStyle()
、または
getDefaultPolygonStyle()
を呼び出し、それぞれにスタイル オプションを設定して、対象物に適用するデフォルトのスタイルを設定することもできます。
または、対象物で setPointStyle()
、setLineStringStyle()
、または setPolygonStyle()
を呼び出し、該当するスタイル オブジェクトを渡すことで、個々の GeoJsonFeature
にスタイルを設定することもできます。
マップに GeoJsonLayer を追加する
マップに GeoJson レイヤを追加するには、まず GeoJsonLayer クラスのインスタンスを作成します。GeoJsonLayer をインスタンス化するには、2 つの方法があります。
JSONObject
からインポートするには、以下のものが必要です。
- レイヤをレンダリングする
GoogleMap
オブジェクト - レイヤに追加する GeoJSON データを含む
JSONObject
val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data
val layer = GeoJsonLayer(map, geoJsonData)
JSONObject geoJsonData = // JSONObject containing the GeoJSON data
GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);
ローカル GeoJSON ファイルからインポートする場合は、以下のものが必要です。
- レイヤをレンダリングする
GoogleMap
オブジェクト - GeoJSON データを含むローカル リソース ファイル
Context
オブジェクト。これはローカル リソース ファイルを開くために必要です。
val layer = GeoJsonLayer(map, R.raw.geojson_file, context)
GeoJsonLayer layer = new GeoJsonLayer(map, R.raw.geojson_file, context);
GeoJsonLayer
を作成したら、addLayerToMap()
を呼び出して、インポートしたデータをマップに追加します。
layer.addLayerToMap()
layer.addLayerToMap();
GeoJsonLayer を削除する
次のレイヤを追加したと仮定します。
val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data
val layer = GeoJsonLayer(map, geoJsonData)
JSONObject geoJsonData = // JSONObject containing the GeoJSON data
GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);
GeoJsonLayer を消去するには、removeLayerFromMap()
を呼び出します。
layer.removeLayerFromMap()
layer.removeLayerFromMap();
GeoJsonFeature を追加および削除する
GeoJSON の対象物のタイプは「feature」です。これには、ジオメトリ、プロパティ メンバーと、任意で境界ボックスまたは ID が含まれています。
GeoJsonFeature
オブジェクトを個別に作成して、 GeoJsonLayer
に追加できます。
対象物を作成し、それに位置 0, 0 の点が 1 つ含まれ、プロパティにはエントリが 1 つあり、境界ボックスはないものと仮定します。
val point = GeoJsonPoint(LatLng(0.0, 0.0))
val properties = hashMapOf("Ocean" to "South Atlantic")
val pointFeature = GeoJsonFeature(point, "Origin", properties, null)
GeoJsonPoint point = new GeoJsonPoint(new LatLng(0, 0));
HashMap<String, String> properties = new HashMap<>();
properties.put("Ocean", "South Atlantic");
GeoJsonFeature pointFeature = new GeoJsonFeature(point, "Origin", properties, null);
この対象物をレイヤに追加するには、addFeature()
を呼び出し、追加する対象物を渡します。
layer.addFeature(pointFeature)
layer.addFeature(pointFeature);
レイヤに追加した後で対象物を削除するには、removeFeature()
を呼び出し、削除する対象物を渡します。
layer.removeFeature(pointFeature)
layer.removeFeature(pointFeature);
GeoJsonFeatures とそのプロパティにアクセスする
レイヤに追加されたすべての GeoJsonFeature にアクセスするには、作成した GeoJsonLayer
で getFeatures()
を呼び出します。これにより、以下に示すように for-each ループでアクセスできる GeoJsonFeatures
の iterable が返されます。
for (feature in layer.features) {
// Do something to the feature
}
for (GeoJsonFeature feature : layer.getFeatures()) {
// Do something to the feature
}
hasProperty()
と getProperty()
の各メソッドを getFeatures()
メソッドと併用して、保存されている各対象物に特定のプロパティがあるかどうかをチェックし、ある場合はそのプロパティにアクセスします。
if (feature.hasProperty("Ocean")) {
val oceanProperty = feature.getProperty("Ocean")
}
if (feature.hasProperty("Ocean")) {
String oceanProperty = feature.getProperty("Ocean");
}
GeoJSON ジオメトリ クリック イベント
GeoJsonLayer.OnFeatureClickListener()
を使って、マップ上のジオメトリ対象物に対するクリック イベントをリッスンできます。次の例では、ユーザーによって対象物がクリックされた際にその対象物のタイトルがログに記録されます。
// Set a listener for geometry clicked events.
layer.setOnFeatureClickListener { feature ->
Log.i("GeoJsonClick", "Feature clicked: ${feature.getProperty("title")}")
}
// Set a listener for geometry clicked events.
layer.setOnFeatureClickListener(new Layer.OnFeatureClickListener() {
@Override
public void onFeatureClick(Feature feature) {
Log.i("GeoJsonClick", "Feature clicked: " + feature.getProperty("title"));
}
});
GeoJsonLayer と GeoJsonFeatures のスタイルを設定する
GeoJsonLayer のデフォルト スタイルを設定するか、レイヤ内の対象物に個別にスタイルを設定できます。
デフォルト スタイル
GeoJsonLayer では、レイヤに追加されるすべての点、線分、ポリゴンのデフォルト スタイルを設定できます。デフォルト スタイルは、対象物のいずれのジオメトリにもスタイルが設定されていない場合にのみ、適用されます。デフォルト スタイルに加えた変更は、デフォルト スタイルを使用しているすべての対象物にも反映されます。
デフォルト スタイルを適用するステップは、以下のとおりです。
- 関連するデフォルト スタイル オブジェクトを取得します。これは
GeoJsonPointStyle
、GeoJsonLineStringStyle
、またはGeoJsonPolygonStyle
のいずれかです。 - 必要なオプションをスタイルに適用します。
たとえば、以下のコードサンプルは、デフォルトの点のスタイルを変更して、点をドラッグ可能にし、タイトルとスニペットを設定する方法を示しています。
val pointStyle = layer.defaultPointStyle
pointStyle.isDraggable = true
pointStyle.title = "Hello, World!"
pointStyle.snippet = "I am a draggable marker"
GeoJsonPointStyle pointStyle = layer.getDefaultPointStyle();
pointStyle.setDraggable(true);
pointStyle.setTitle("Hello, World!");
pointStyle.setSnippet("I am a draggable marker");
GeoJsonFeature に固有のスタイル
レイヤ内の対象物ごとにスタイルを設定することもできます。GeoJsonFeature
でスタイルを適用する手順は、以下のとおりです。
- 関連するスタイル オブジェクトを作成します。これは
GeoJsonPointStyle
、GeoJsonLineStringStyle
、またはGeoJsonPolygonStyle
のいずれかです。 - 必要なオプションをスタイルに適用します。
- スタイル オブジェクトを
GeoJsonFeature
の関連するメソッド(setPointStyle()
、setLineStringStyle()
、setPolygonStyle()
のいずれか)に渡します。
次の例は、GeoJsonFeature
の線分のスタイルをカスタマイズして、色を赤にする方法を示しています。
// Create a new feature containing a linestring
val lineStringArray: MutableList<LatLng> = ArrayList()
lineStringArray.add(LatLng(0.0, 0.0))
lineStringArray.add(LatLng(50.0, 50.0))
val lineString = GeoJsonLineString(lineStringArray)
val lineStringFeature = GeoJsonFeature(lineString, null, null, null)
// Set the color of the linestring to red
val lineStringStyle = GeoJsonLineStringStyle()
lineStringStyle.color = Color.RED
// Set the style of the feature
lineStringFeature.lineStringStyle = lineStringStyle
// Create a new feature containing a linestring
List<LatLng> lineStringArray = new ArrayList<LatLng>();
lineStringArray.add(new LatLng(0, 0));
lineStringArray.add(new LatLng(50, 50));
GeoJsonLineString lineString = new GeoJsonLineString(lineStringArray);
GeoJsonFeature lineStringFeature = new GeoJsonFeature(lineString, null, null, null);
// Set the color of the linestring to red
GeoJsonLineStringStyle lineStringStyle = new GeoJsonLineStringStyle();
lineStringStyle.setColor(Color.RED);
// Set the style of the feature
lineStringFeature.setLineStringStyle(lineStringStyle);
デモアプリを見る
URL から GeoJSON ファイルをインポートし、それを使用してレイヤを作成する例については、ユーティリティ ライブラリに付属のデモアプリにある GeoJsonDemoActivity
をご覧ください。また、設定ガイドでは、デモアプリを実行する方法を説明しています。