一切就绪!

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

激活 Google Maps Android API

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

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

Google Maps Android GeoJSON Utility

  1. 简介
  2. 向您的地图添加 GeoJsonLayer
  3. 删除 GeoJsonLayer
  4. 添加和删除 GeoJsonFeature
  5. 访问 GeoJsonFeatures 及其属性
  6. 为 GeoJsonLayer 和 GeoJsonFeature 设置样式
  7. 观摩演示版应用

简介

GeoJSON 是对 JSON 数据格式的扩展,表示地理数据。您可以使用此实用程序以 GeoJSON 格式存储地理特征,并将它们渲染为覆盖在地图上的叠层。如需在地图中添加和删除 GeoJSON 数据,请分别调用 addLayer()clearLayer()。同理,您还可以通过调用 addFeature()removeFeature(),并传入 GeoJsonFeature 对象来添加和删除个别特征。如果您想访问特征,您可以调用 getFeatures() 来获取所有已添加至叠层的 GeoJsonFeature 对象的 iterable。

您还可以通过调用 getDefaultPointStyle()getDefaultLineStringStyle() getDefaultPolygonStyle() 并为它们逐一设置样式选项,设置需要在向叠层添加特征前为特征应用的默认样式。此外,您还可以通过对特征调用 setPointStyle()setLineStringStyle()setPolygonStyle() 并传入相关样式对象,为个别 GeoJsonFeature 设置样式。

向您的地图添加 GeoJsonLayer

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

如需从 JSONObject 导入,您需要下列项:

  • 需要渲染的叠层所在的 GoogleMap 对象
  • 包含需要向叠层添加的 GeoJSON 数据的 JSONObject
GeoJsonLayer layer = new GeoJsonLayer(getMap(), geoJsonData);

如需从本地 GeoJSON 文件导入,您需要下列项:

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

在您创建 GeoJsonLayer 后,调用 addLayer() 将导入的数据添加到地图上:

layer.addLayer();

删除 GeoJsonLayer

让我们假定您添加了以下叠层

GeoJsonLayer layer = new GeoJsonLayer(getMap(), geoJsonData);

如需清除 GeoJsonLayer,请调用 clearLayer()

layer.clearLayer();

添加和删除 GeoJsonFeature

GeoJSON 中的特征具有“feature”类型。它包含一个几何结构、一个属性成员以及可选的边界框或 ID。

您可以分别创建 GeoJsonFeature 对象,然后将它们添加到 GeoJsonLayer 中。

让我们假定您创建了一个特征,它包含一个坐标为 0, 0 的点,属性中有一个条目,并且没有边界框。

GeoJsonPoint point = new Point(new LatLng(0, 0));
HashMap<String, String> properties = new HashMap<String, String>();
properties.put(“Ocean”, “South Atlantic”);
GeoJsonFeature pointFeature = new GeoJsonFeature(point, “Origin”, properties, null);

如需向叠层添加该特征,请调用 addFeature() 并传入要添加的特征。

layer.addFeature(pointFeature);

如果向叠层添加某个特征后需要将其删除,请调用 removeFeature() 并传入要删除的特征。

layer.removeFeature(pointFeature);

访问 GeoJsonFeatures 及其属性

如需访问所有已添加到叠层中的 GeoJsonFeature,您可以对已创建的 GeoJsonLayer 调用 getFeatures()。这将返回 GeoJsonFeatures 的 iterable,您可以如下所示使用 for-each 循环对其进行访问。

for (GeoJsonFeature feature : layer.getFeatures()) {
  // do something to the feature
}

hasProperty() 方法和 getProperty() 方法与 getFeatures() 方法联用可检查是否存储的每个特征都具有特定属性,并在特定属性存在时进行访问。

GeoJsonPoint point = new Point(new LatLng(0, 0));
HashMap<String, String> properties = new HashMap<String, String>();
properties.put(“Ocean”, “South Atlantic”);
GeoJsonFeature pointFeature = new GeoJsonFeature(point, “Origin”, properties, null);
for (GeoJsonFeature feature : layer.getFeatures()) {
  if (feature.hasProperty(“Ocean”)) {
    String oceanProperty = feature.getProperty(“Ocean”);
  }
}

为 GeoJsonLayer 和 GeoJsonFeature 设置样式

您可以为 GeoJsonLayer 设置默认样式,或者为叠层中的个别特征设置样式。

默认样式

在 GeoJsonLayer 中,您可以为添加到叠层中的任何点、行字符串和多边形设置默认样式。只有在特征的任何几何结构均未设置样式时,才会为其应用默认样式。此外,您对默认样式所做的任何更改将会体现在所有使用默认样式的特征中。

应用默认样式的步骤如下

  1. 检索相关的默认样式对象,该对象可以是 GeoJsonPointStyleGeoJsonLineStringStyleGeoJsonPolygonStyle 之一。
  2. 对样式应用所需选项。

例如,以下代码示例展示了如何修改默认点样式来使点变为可拖动点,并带有标题和信息片段。

GeoJsonPointStyle pointStyle = layer.getDefaultPointStyle();
pointStyle.setDraggable(true);
pointStyle.setTitle(“Hello, World!”);
pointStyle.setSnippet(“I am a draggable marker”);

GeoJsonFeature 专属样式

此外,您还可以为叠层中的个别特征设置样式。对 GeoJsonFeature 应用样式的步骤如下

  1. 创建相关的样式对象,该对象可以是 GeoJsonPointStyleGeoJsonLineStringStyleGeoJsonPolygonStyle 之一
  2. 对样式应用所需选项
  3. GeoJsonFeature 上的相关方法传递样式对象,该方法是 setPointStyle()setLineStringStyle()setPolygonStyle() 之一

例如,可以像下面这样定制 GeoJsonFeature 的 linestring 样式,使其颜色为红色。

// Create a new feature containing a linestring
ArrayList<LatLng> lineStringArray = new ArrayList<LatLng>();
lineStringArray.add(new LatLng(0, 0));
lineStringArray.add(new LatLng(50, 50));
GeoJsonLineString lineString = new GeoJsonLineString(lineStringArray);
GeoJsonFeature lineStringFeature = new GeoJsonFeature(lineString, null, null, null);

// Set the color of the linestring to red
GeoJsonLineStringStyle lineStringStyle = new GeoJsonLineStringStyle();
lineStringStyle.setColor(Color.RED);

// Set the style of the feature
lineStringFeature.setLineStringStyle(lineStringStyle);

观摩演示版应用

如需查看从 URL 导入 GeoJSON 文件并利用其创建叠层的示例,请查看实用程序库附带演示版应用中的 GeoJsonDemoActivity设置指南向您介绍了如何运行演示版应用。

发送以下问题的反馈:

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