Google マップ KML インポート ユーティリティ

プラットフォームを選択: Android iOS JavaScript
  1. はじめに
  2. KML レイヤを追加する
  3. KML レイヤを消去する
  4. KML コンテナにアクセスする
  5. KML 目印と KML 地面オーバーレイにアクセスする
  6. KML プロパティにアクセスする
  7. KML でサポートされている機能

はじめに

KMLXML データ形式の拡張で、地図上の地理データを表します。このユーティリティを使用すると、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> あり