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

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

はじめに

KML は XML データ形式の拡張で、マップ上の地理データを表します。このユーティリティを使用すると、KML オブジェクトを地理的図形に変換して、地図上にレイヤとしてレンダリングできます。地図に GeoJSON データを追加する場合は addLayerToMap() を、地図からこのデータを削除する場合は removeLayerFromMap() を呼び出します。KML オブジェクトのプロパティにアクセスするには、任意の Placemark、GroundOverlay、Document、または Folder で getProperties() を呼び出します。

地図に KML レイヤを追加する

地図にデータレイヤを追加するには、まず KmlLayer クラスのインスタンスを作成します。KmlLayer をインスタンス化するには、2 つの方法があります。

ローカル リソースから KML データセットをインポートしてレンダリングする場合は、以下のものが必要です。

  • レイヤをレンダリングする GoogleMap オブジェクト。
  • KML データを含むローカル リソース ファイル。
  • Context オブジェクト。これはローカル リソース ファイルを開くために必要です。

Kotlin



val layer = KmlLayer(map, R.raw.geojson_file, context)

      

Java


KmlLayer layer = new KmlLayer(map, R.raw.geojson_file, context);

      

ローカル ストリームから KML データセットをインポートしてレンダリングする場合は、以下のものが必要です。

  • レイヤをレンダリングする GoogleMap オブジェクト。
  • KML データを含む InputStream。
  • Context オブジェクト。これはローカル リソースを開くために必要です。

Kotlin



val inputStream: InputStream? =  // InputStream containing KML data
val layer = KmlLayer(map, inputStream, context)

      

Java


InputStream inputStream = // InputStream containing KML data
KmlLayer layer = new KmlLayer(map, inputStream, context);

      

KmlLayer を作成したら、addLayerToMap()() を呼び出して、インポートしたデータを地図に追加します。

Kotlin



layer.addLayerToMap()

      

Java


layer.addLayerToMap();

      

KML レイヤを消去する

たとえば、次の KmlLayer を作成したとします。

Kotlin



val inputStream: InputStream? =  // InputStream containing KML data
val layer = KmlLayer(map, inputStream, context)

      

Java


InputStream inputStream = // InputStream containing KML data
KmlLayer layer = new KmlLayer(map, inputStream, context);

      

地図からレイヤを削除するには、removeLayerFromMap() を呼び出します。

Kotlin



layer.removeLayerFromMap()

      

Java


layer.removeLayerFromMap();

      

KML コンテナにアクセスする

レイヤに追加したコンテナにアクセスするには、作成したレイヤで getContainers() を呼び出します。いずれかのコンテナ内にコンテナがネストされているかどうかをチェックするには、hasContainers() を呼び出します。これらのネストされたコンテナにアクセスするには、レイヤでの操作と同様に、getContainers() を呼び出します。

KmlLayer または KmlContainer: にネストされていないコンテナにアクセスするには、以下のようにします。

Kotlin



for (containers in layer.containers) {
    // Do something to container
}

      

Java


for (KmlContainer containers : layer.getContainers()) {
    // Do something to container
}

      

KmlLayer または KmlContainer にネストされているコンテナにアクセスするには、以下のようにします。

Kotlin



fun accessContainers(containers: Iterable<KmlContainer>) {
    for (container in containers) {
        if (container.hasContainers()) {
            accessContainers(container.containers)
        }
    }

      

Java


public void accessContainers(Iterable<KmlContainer> containers) {
    for (KmlContainer container : containers) {
        if (container.hasContainers()) {
            accessContainers(container.getContainers());
        }
    }
}

      

KML 目印と KML 地面オーバーレイにアクセスする

レイヤに追加されている目印や地面オーバーレイにアクセスするには、レイヤまたはコンテナで getPlacemarks() または getGroundOverlays() を呼び出します。これらを呼び出すと、それぞれ KmlPlacemarks または KmlGroundOverlays の iterable が返されます。

たとえば、レイヤから KmlPlacemark オブジェクトにアクセスするには、次のようにします。

Kotlin



for (placemark in layer.placemarks) {
    // Do something to Placemark
}

      

Java


for (KmlPlacemark placemark : layer.getPlacemarks()) {
    // Do something to Placemark
}

      

KML プロパティにアクセスする

コンテナまたは目印のプロパティにアクセスするには、getProperty() を呼び出して、プロパティキーを渡します。hasProperty() を呼び出して、そのプロパティが存在するかどうかをチェックすることもできます。このサンプルは、プロパティ値「name」が存在する場合に、それをコンテナから取得する方法を示しています。

Kotlin



for (container in layer.containers) {
    if (container.hasProperty("name")) {
        Log.i("KML", container.getProperty("name"))
    }
}

      

Java


for (KmlContainer container : layer.getContainers()) {
    if (container.hasProperty("name")) {
        Log.i("KML", container.getProperty("name"));
    }
}

      

KML ジオメトリ クリック イベント

KmlLayer.OnFeatureClickListener() を使って、地図上のジオメトリ対象物に対するクリック イベントをリッスンできます。次の例では、ユーザーによって対象物がクリックされた際にその対象物の ID がログに記録されます。

Kotlin



// Set a listener for geometry clicked events.
layer.setOnFeatureClickListener { feature ->
    Log.i(
        "KML",
        "Feature clicked: " + feature.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());
    }
});

      

デモアプリを見る

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> あり