一切就绪!

着手开发前,请先阅读我们的开发者文档

激活 Google Maps Android API

为帮助您起步,我们将引导您在 Google Developers Console 中先完成几项任务:

  1. 创建或选择项目
  2. 激活 Google Maps Android API
  3. 创建相应密钥
继续

Google Maps KML Importing Utility

  1. 简介
  2. 添加 KML 层
  3. 清除 KML 层
  4. 访问 KML 容器
  5. 访问 KML 标注和 KML 底面叠层
  6. 访问 KML 属性
  7. KML 支持的功能

简介

KML 是对 XML 数据格式的扩展,表示地图上的地理数据。您可以利用该实用程序将 KML 对象转换为地理形状,并将它们渲染为覆盖在地图上的叠层。如需在地图中添加和删除 KML 数据,请分别调用 addLayerToMap()removeLayerFromMap()。如需访问 KML 对象中的属性,请对任何 Placemark、GroundOverlay、Document 或 Folder 调用 getProperties()

向地图添加 KML 层

如需向地图添加数据层,请先创建一个 KmlLayer 类实例。实例化 KmlLayer 的方法有两种。

如需导入和渲染来自本地资源的 KML 数据集,您需要:

  • 需要渲染的层所在的 GoogleMap 对象
  • 包含 KML 数据的本地资源文件
  • 打开本地资源文件所需的 Context 对象
KmlLayer layer = new KmlLayer(getMap(), R.raw.kmlFile, getApplicationContext());

如需导入和渲染来自本地数据流的 KML 数据集,您需要:

  • 需要渲染的层所在的 GoogleMap 对象
  • 包含 KML 数据的 InputStream
  • 打开本地资源所需的 Context 对象
KmlLayer layer = new KmlLayer(getMap(), kmlInputStream, getApplicationContext());

在您创建 KmlLayer 后,调用 addLayerToMap()() 将导入的数据添加到地图上。

layer.addLayerToMap();

清除 KML 层

让我们假定您已创建以下 KmlLayer

KmlLayer layer = new KmlLayer(getMap(), kmlInputStream, getApplicationContext());
 

如需从地图中删除该层,请调用 removeLayerFromMap()

layer.removeLayerFromMap();

访问 KML 容器

如需访问任何已添加到层中的容器,您可以对已创建的层调用 getContainers()。如需检查是否任何容器具有嵌套容器,您可以调用 hasContainers()。如需访问这些嵌套容器,您可以像在层中所做的那样调用 getContainers()

如需访问并未嵌套在 KmlLayerKmlContainer 中的容器:

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

如需访问的确嵌套在 KmlLayerKmlContainer 中的容器:

Iterable containers = layer.getContainers();
  public void accessContainers(containers) {
    for (KmlContainer container : containers ) {
    // Do something to container
    if (container.hasContainers()) {
      accessContainers(container.getContainers());
    }
  }
}

访问 KML 标注和 KML 底面叠层

如需访问任何已添加到层中的标注或底面叠层,您可以对层或容器调用 getPlacemarks()getGroundOverlays()。调用其中任何一个都会相应返回 KmlPlacemarksKmlGroundOverlays 的 iterable。

例如,如需访问层中的 KmlPlacemark 对象:

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

访问 KML 属性

如需访问容器或标注内的任何属性,请调用 getProperty() 并为其提供属性密钥。您还可以调用 hasProperty() 来确认其是否存在。以下示例展示了如何从容器检索属性值“name”(若存在)。

for (KmlContainer container : layer.getContainers()) {
  if (container.hasProperty("name")) {
    System.out.println(container.getProperty("name")):
  }
}

观摩演示版应用

如需查看导入 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>

发送以下问题的反馈:

此网页
Google Maps Android API
Google Maps Android API
需要帮助?请访问我们的支持页面