- はじめに
- KML レイヤを追加する
- KML レイヤを消去する
- KML コンテナにアクセスする
- KML 目印と KML 地面オーバーレイにアクセスする
- KML プロパティにアクセスする
- KML でサポートされている機能
はじめに
KML は XML データ形式の拡張で、地図上の地理データを表します。このユーティリティを使用すると、KML オブジェクトを地理的図形に変換して、地図上にレイヤとしてレンダリングできます。地図に GeoJSON データを追加する場合は addLayerToMap()
を、地図からこのデータを削除する場合は removeLayerFromMap()
を呼び出します。KML オブジェクトのプロパティにアクセスするには、任意の Placemark、GroundOverlay、Document、または Folder で getProperties()
を呼び出します。
地図に KML レイヤを追加する
地図にデータレイヤを追加するには、まず KmlLayer
クラスのインスタンスを作成します。KmlLayer
をインスタンス化するには、2 つの方法があります。
ローカル リソースから KML データセットをインポートしてレンダリングする場合は、以下のものが必要です。
- レイヤをレンダリングする
GoogleMap
オブジェクト。 - KML データを含むローカル リソース ファイル。
Context
オブジェクト。これはローカル リソース ファイルを開くために必要です。
Java
KmlLayer layer = new KmlLayer(map, R.raw.geojson_file, context);
Kotlin
val layer = KmlLayer(map, R.raw.geojson_file, context)
ローカル ストリームから KML データセットをインポートしてレンダリングする場合は、以下のものが必要です。
- レイヤをレンダリングする
GoogleMap
オブジェクト。 - KML データを含む
InputStream
。 Context
オブジェクト。これはローカル リソースを開くために必要です。
Java
InputStream inputStream = // InputStream containing KML data KmlLayer layer = new KmlLayer(map, inputStream, context);
Kotlin
val inputStream: InputStream? = // InputStream containing KML data val layer = KmlLayer(map, inputStream, context)
KmlLayer
を作成したら、addLayerToMap()()
を呼び出して、インポートしたデータを地図に追加します。
Java
layer.addLayerToMap();
Kotlin
layer.addLayerToMap()
KML レイヤを消去する
たとえば、次の KmlLayer
を作成したとします。
Java
InputStream inputStream = // InputStream containing KML data KmlLayer layer = new KmlLayer(map, inputStream, context);
Kotlin
val inputStream: InputStream? = // InputStream containing KML data val layer = KmlLayer(map, inputStream, context)
地図からレイヤを削除するには、removeLayerFromMap()
を呼び出します。
Java
layer.removeLayerFromMap();
Kotlin
layer.removeLayerFromMap()
KML コンテナにアクセスする
レイヤに追加したコンテナにアクセスするには、作成したレイヤで getContainers()
を呼び出します。いずれかのコンテナ内にコンテナがネストされているかどうかをチェックするには、hasContainers()
を呼び出します。これらのネストされたコンテナにアクセスするには、レイヤでの操作と同様に、getContainers()
を呼び出します。
KmlLayer
または KmlContainer:
にネストされていないコンテナにアクセスするには、以下のようにします。
Java
for (KmlContainer containers : layer.getContainers()) { // Do something to container }
Kotlin
for (containers in layer.containers) { // Do something to container }
KmlLayer
または KmlContainer
にネストされているコンテナにアクセスするには、以下のようにします。
Java
public void accessContainers(Iterable<KmlContainer> containers) { for (KmlContainer container : containers) { if (container.hasContainers()) { accessContainers(container.getContainers()); } } }
Kotlin
fun accessContainers(containers: Iterable<KmlContainer>) { for (container in containers) { if (container.hasContainers()) { accessContainers(container.containers) } }
KML 目印と KML 地面オーバーレイにアクセスする
レイヤに追加されている目印や地面オーバーレイにアクセスするには、レイヤまたはコンテナで getPlacemarks()
または getGroundOverlays()
を呼び出します。これらを呼び出すと、それぞれ KmlPlacemarks
または KmlGroundOverlays
の iterable が返されます。
たとえば、レイヤから KmlPlacemark
オブジェクトにアクセスするには、次のようにします。
Java
for (KmlPlacemark placemark : layer.getPlacemarks()) { // Do something to Placemark }
Kotlin
for (placemark in layer.placemarks) { // Do something to Placemark }
KML プロパティにアクセスする
コンテナまたは目印のプロパティにアクセスするには、getProperty()
を呼び出して、プロパティキーを渡します。hasProperty()
を呼び出して、そのプロパティが存在するかどうかをチェックすることもできます。このサンプルは、プロパティ値「name」が存在する場合に、それをコンテナから取得する方法を示しています。
Java
for (KmlContainer container : layer.getContainers()) { if (container.hasProperty("name")) { Log.i("KML", container.getProperty("name")); } }
Kotlin
for (container in layer.containers) { if (container.hasProperty("name")) { Log.i("KML", container.getProperty("name")) } }
KML ジオメトリ クリック イベント
KmlLayer.OnFeatureClickListener()
を使って、地図上のジオメトリ対象物に対するクリック イベントをリッスンできます。次の例は、ユーザーによって対象物がクリックされた際にその対象物の ID をログに記録しています。
Java
// Set a listener for geometry clicked events. layer.setOnFeatureClickListener(new KmlLayer.OnFeatureClickListener() { @Override public void onFeatureClick(Feature feature) { Log.i("KML", "Feature clicked: " + feature.getId()); } });
Kotlin
// Set a listener for geometry clicked events. layer.setOnFeatureClickListener { feature -> Log.i( "KML", "Feature clicked: " + feature.id ) }
デモアプリを見る
KML ファイルをインポートし、それを使用してレイヤを作成する例については、ユーティリティ ライブラリに付属のデモアプリにある KmlDemoActivity
をご覧ください。また、設定ガイドでは、デモアプリを実行する方法を説明しています。
KML でサポートされている機能
KML 要素 | サポート | 説明 |
---|---|---|
<address> | 部分的にあり | プロパティ値として保存される |
<AddressDetails> | なし | |
<Alias> | なし | |
<altitude> | なし | |
<altitudeMode> | なし | |
<atom:author> | なし | |
<atom:link> | なし | |
<atom:name> | なし | |
<BalloonStyle> | 部分的にあり | <text> のみサポートされる |
<begin> | 該当しない | <TimeSpan> はサポートされない |
<bgColor> | なし | |
<bottomFov> | 該当しない | <PhotoOverlay> はサポートされない |
<Camera> | なし | |
<Change> | 部分的にあり | スタイルの変更のみサポート |
<color> | 部分的にあり | #AABBGGRR と #BBGGRR を含みます。<ScreenOverlay>、および <GroundOverlay> ではサポートされません。 |
<colorMode> | あり | |
<cookie> | なし | <NetworkLinkControl> はサポートされない |
<coordinates> | あり | |
<Create> | なし | |
<Data> | なし | |
<Delete> | なし | |
<description> | あり | プレーン テキストのみ。HTML コンテンツはサポートされません。 |
<displayMode> | なし | |
<displayName> | なし | |
<Document> | あり | |
<drawOrder> | あり | |
<east> | あり | |
<end> | 該当しない | <TimeSpan> はサポートされない |
<expires> | なし | <NetworkLinkControl> はサポートされない |
<ExtendedData> | 部分的にあり | 型なしの <Data> のみ。<SimpleData> と <Schema>、form$[dataName] のエンティティの置換はサポートされません。 |
<extrude> | なし | |
<fill> | あり | |
<flyToView> | なし | <NetworkLinkControl> はサポートされない |
<Folder> | あり | |
<gridOrigin> | 該当しない | <PhotoOverlay> はサポートされない |
<GroundOverlay> | あり | |
<heading> | あり | |
<hotSpot> | あり | |
<href> | あり | |
<httpQuery> | なし | |
<Icon> | あり | |
<IconStyle> | あり | |
<ImagePyramid> | 該当しない | <PhotoOverlay> はサポートされない |
<innerBoundaryIs> | あり | <LinearRing> から暗黙に指定 |
<ItemIcon> | 該当しない | <ListStyle> はサポートされない |
<key> | あり | |
<kml> | あり | |
<LabelStyle> | なし | |
<latitude> | あり | |
<LatLonAltBox> | なし | |
<LatLonBox> | あり | |
<leftFov> | 該当しない | <PhotoOverlay> はサポートされない |
<LinearRing> | あり | |
<LineString> | あり | |
<LineStyle> | あり | |
<Link> | なし | |
<linkDescription> | 該当しない | <NetworkLinkControl> はサポートされない |
<linkName> | 該当しない | <NetworkLinkControl> はサポートされない |
<linkSnippet> | 該当しない | <NetworkLinkControl> はサポートされない |
<listItemType> | 該当しない | <ListStyle> はサポートされない |
<ListStyle> | なし | |
<Location> | 該当しない | <Model> はサポートされない |
<Lod> | あり | |
<longitude> | あり | |
<LookAt> | なし | |
<maxAltitude> | なし | |
<maxFadeExtent> | なし | |
<maxHeight> | 該当しない | <PhotoOverlay> はサポートされない |
<maxLodPixels> | なし | |
<maxSessionLength> | なし | |
<maxWidth> | 該当しない | <PhotoOverlay> はサポートされない |
<message> | なし | |
<minAltitude> | なし | |
<minFadeExtent> | なし | |
<minLodPixels> | なし | |
<minRefreshPeriod> | なし | <NetworkLink> |
<Model> | なし | |
<MultiGeometry> | あり | |
<name> | あり | |
<near> | 該当しない | <PhotoOverlay> はサポートされない |
<NetworkLink> | なし | |
<NetworkLinkControl> | なし | |
<north> | あり | |
<open> | あり | プロパティ値として保存される |
<Orientation> | 該当しない | <Model> はサポートされない |
<outerBoundaryIs> | あり | <LinearRing> から暗黙に指定 |
<outline> | あり | |
<overlayXY> | なし | |
<Pair> | あり | |
<phoneNumber> | 部分的にあり | プロパティ値として保存される |
<PhotoOverlay> | なし | |
<Placemark> | あり | |
<Point> | あり | |
<Polygon> | あり | |
<PolyStyle> | あり | |
<range> | あり | |
<refreshInterval> | なし | |
<refreshMode> | なし | |
<refreshVisibility> | なし | |
<Region> | あり | |
<ResourceMap> | 該当しない | <Model> はサポートされない |
<rightFov> | 該当しない | <PhotoOverlay> はサポートされない |
<roll> | 該当しない | <Camera> と <Model> はサポートされない |
<rotation> | あり | |
<rotationXY> | なし | |
<Scale> | 該当しない | <Model> はサポートされない |
<scale> | あり | |
<Schema> | なし | |
<SchemaData> | なし | |
<ScreenOverlay> | なし | |
<screenXY> | 該当しない | <ScreenOverlay> はサポートされない |
<shape> | 該当しない | <PhotoOverlay> はサポートされない |
<SimpleData> | 該当しない | <SchemaData> はサポートされない |
<SimpleField> | 該当しない | <Schema> はサポートされない |
<size> | あり | |
<Snippet> | なし | |
<south> | あり | |
<state> | 該当しない | <ListStyle> はサポートされない |
<Style> | あり | |
<StyleMap> | 部分的にあり | ハイライト スタイルとインライン StyleMap はサポートされない |
<styleUrl> | あり | |
<targetHref> | なし | <Alias> はサポートされない |
<tessellate> | なし | |
<text> | あり | |
<textColor> | なし | |
<tileSize> | 該当しない | <PhotoOverlay> はサポートされない |
<tilt> | なし | |
<TimeSpan> | なし | |
<TimeStamp> | なし | |
<topFov> | 該当しない | <PhotoOverlay> はサポートされない |
<Update> | 該当しない | <NetworkLinkControl> はサポートされない |
<value> | あり | |
<viewBoundScale> | なし | |
<viewFormat> | なし | |
<viewRefreshMode> | なし | |
<viewRefreshTime> | なし | |
<ViewVolume> | 該当しない | <PhotoOverlay> はサポートされない |
<visibility> | あり | |
<west> | あり | |
<when> | 該当しない | <TimeStamp> はサポートされない |
<width> | あり |