Google 地圖 KML 匯入公用程式

  1. 簡介
  2. 新增 KML 圖層
  3. 清除 KML 圖層
  4. 存取 KML 容器
  5. 存取 KML 地標和 KML 區域疊加層
  6. 存取 KML 屬性
  7. KML 支援的功能

簡介

KMLXML 資料格式的延伸,用來代表地圖上的地理資料。您可以使用此公用程式,將 KML 物件轉換成地理形狀,然後算繪為疊加在地圖上的圖層。如要在地圖中新增或移除 KML 資料,請分別呼叫 addLayerToMap()removeLayerFromMap()。如要存取 KML 物件的屬性,請在任何地標、區域疊加層、文件或資料夾上呼叫 getProperties()

在地圖中新增 KML 圖層

如要在地圖中加入資料圖層,請先建立 KmlLayer 類別的例項;目前有兩種方式可以把 KmlLayer 執行個體化。

若要從本機資源匯入並算繪 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()

如要存取 KmlLayerKmlContainer: 中「非」巢狀結構的容器:

Java

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

Kotlin

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

如要存取 KmlLayerKmlContainer 中「是」巢狀結構的容器:

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()。呼叫這兩項分別會傳回 KmlPlacemarksKmlGroundOverlays 的疊代。

例如,如要從圖層存取 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>