Google 地圖 KML 匯入公用程式

選取平台: Android iOS JavaScript
  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 物件,這是開啟本機資源檔案的必要物件。

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()

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

Kotlin



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

      

Java


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

      

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

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

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