Utilitário GeoJSON do Google Maps para Android

Selecione a plataforma: Android iOS JavaScript
  1. Introdução
  2. Adicionar uma GeoJsonLayer ao mapa
  3. Remover a GeoJsonLayer
  4. Adicionar e remover um GeoJsonFeature
  5. Acessar os GeoJsonFeatures e as propriedades deles
  6. Aplicar estilo à GeoJsonLayer e aos GeoJsonFeatures
  7. Conferir o app de demonstração

Introdução

GeoJSON é uma extensão do formato de dados JSON e representa dados geográficos. O uso desse utilitário permite armazenar componentes geográficos no formato GeoJSON e renderizá-los como uma camada sobre o mapa. Para adicionar e remover dados GeoJSON do mapa, chame addLayerToMap() e removeLayerFromMap(), respectivamente. Da mesma forma, é possível adicionar e remover recursos individuais chamando addFeature() e removeFeature() e transmitindo um objeto GeoJsonFeature. Se você quiser acessar os recursos, chame getFeatures() para receber um iterável de todos os objetos GeoJsonFeature que foram adicionados à camada.

Para definir estilos padrão que vão ser aplicados a recursos antes de serem adicionados à camada, chame getDefaultPointStyle(), getDefaultLineStringStyle() ou getDefaultPolygonStyle() e defina opções de estilo individualmente. Como alternativa, você pode definir o estilo de um GeoJsonFeature específico chamando setPointStyle(), setLineStringStyle() ou setPolygonStyle() no recurso e passando o objeto de estilo relevante.

Adicionar uma GeoJsonLayer ao mapa

Para adicionar uma camada do GeoJson ao mapa, primeiro crie uma instância da classe GeoJsonLayer. Há duas formas de instanciar a GeoJsonLayer.

Para importar de um JSONObject, você precisa do seguinte:

  • Objeto GoogleMap em que a camada será renderizada
  • JSONObject contendo os dados GeoJSON a serem adicionados à camada.


val geoJsonData
: JSONObject? = // JSONObject containing the GeoJSON data
val layer
= GeoJsonLayer(map, geoJsonData)

     

JSONObject geoJsonData = // JSONObject containing the GeoJSON data
GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);

     

Para importar de um arquivo GeoJSON local, é preciso ter o seguinte:

  • Objeto GoogleMap em que a camada será renderizada
  • Arquivo de recursos local contendo os dados GeoJSON
  • Objeto Context, que é necessário para abrir um arquivo de recurso local


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

     

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

     

Depois de criar o GeoJsonLayer, chame addLayerToMap() para adicionar os dados importados ao mapa:



layer
.addLayerToMap()

     

layer
.addLayerToMap();

     

Remover a GeoJsonLayer

Vamos supor que você tenha adicionado esta camada



val geoJsonData
: JSONObject? = // JSONObject containing the GeoJSON data
val layer
= GeoJsonLayer(map, geoJsonData)

     

JSONObject geoJsonData = // JSONObject containing the GeoJSON data
GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);

     

Para limpar a GeoJsonLayer, chame removeLayerFromMap().



layer
.removeLayerFromMap()

     

layer
.removeLayerFromMap();

     

Adicionar e remover um GeoJsonFeature

No GeoJSON, um recurso tem o tipo "feature". Ele contém uma geometria, um membro de propriedade e, opcionalmente, uma caixa delimitadora ou um ID.

Você pode criar objetos GeoJsonFeature individualmente e adicioná-los ao GeoJsonLayer.

Vamos supor que você tenha criado um recurso contendo um ponto em "0", "0" com uma entrada nas suas propriedades e sem caixa delimitadora.



val point
= GeoJsonPoint(LatLng(0.0, 0.0))
val properties
= hashMapOf("Ocean" to "South Atlantic")
val pointFeature
= GeoJsonFeature(point, "Origin", properties, null)

     

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

     

Para adicionar o recurso à camada, chame addFeature() e transmita o recurso.



layer
.addFeature(pointFeature)

     

layer
.addFeature(pointFeature);

     

Para remover um recurso após adicioná-lo à camada, chame removeFeature() e transmita o recurso.



layer
.removeFeature(pointFeature)

     

layer
.removeFeature(pointFeature);

     

Acessar os GeoJsonFeatures e as propriedades deles

Para acessar todos os GeoJsonFeatures que foram adicionados à camada, chame getFeatures() no GeoJsonLayer que você criou. Isso vai retornar um iterável de GeoJsonFeatures, que pode ser acessado usando um loop for-each, como mostrado a seguir.



for (feature in layer.features) {
   
// Do something to the feature
}

     

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

     

Use os métodos hasProperty() e getProperty() com getFeatures() para verificar se cada recurso armazenado tem uma propriedade específica e acessá-la, se houver.



if (feature.hasProperty("Ocean")) {
    val oceanProperty
= feature.getProperty("Ocean")
}

     

if (feature.hasProperty("Ocean")) {
   
String oceanProperty = feature.getProperty("Ocean");
}

     

Eventos de clique de geometria GeoJSON

É possível usar GeoJsonLayer.OnFeatureClickListener() para ouvir os eventos de cliques nos recursos de geometria no mapa. O exemplo a seguir registra o título de um recurso quando o usuário clica nele:



// Set a listener for geometry clicked events.
layer
.setOnFeatureClickListener { feature ->
   
Log.i("GeoJsonClick", "Feature clicked: ${feature.getProperty("title")}")
}

     

// Set a listener for geometry clicked events.
layer
.setOnFeatureClickListener(new Layer.OnFeatureClickListener() {
   
@Override
   
public void onFeatureClick(Feature feature) {
       
Log.i("GeoJsonClick", "Feature clicked: " + feature.getProperty("title"));
   
}
});

     

Aplicar o estilo à GeoJsonLayer e aos GeoJsonFeatures

Você pode definir estilos padrão a uma GeoJsonLayer ou a recursos individuais na camada.

Estilos padrão

Em uma GeoJsonLayer, é possível definir estilos padrão para qualquer ponto, LineString e polígono adicionado à camada. Os estilos padrão serão aplicados apenas se o recurso não tiver um estilo definido para nenhuma das geometrias dele. Todas as alterações feitas no estilo padrão serão também aplicadas aos recursos que usam o estilo padrão.

Veja a seguir as etapas a serem aplicadas a um estilo padrão

  1. Recupere o objeto de estilo padrão relevante, que pode ser GeoJsonPointStyle, GeoJsonLineStringStyle ou GeoJsonPolygonStyle.
  2. Aplique as opções desejadas ao estilo.

Por exemplo, o exemplo de código a seguir mostra como modificar o estilo de ponto padrão para tornar os pontos arrastáveis com um título e um fragmento.



val pointStyle
= layer.defaultPointStyle
pointStyle
.isDraggable = true
pointStyle
.title = "Hello, World!"
pointStyle
.snippet = "I am a draggable marker"

     

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

     

Estilos específicos de um GeoJsonFeature

Como alternativa, você pode aplicar estilo a recursos individuais na camada. As etapas para aplicar um estilo em um GeoJsonFeature da seguinte maneira:

  1. Crie o objeto de estilo relevante. Ele pode ser GeoJsonPointStyle, GeoJsonLineStringStyle ou GeoJsonPolygonStyle.
  2. Aplique as opções desejadas ao estilo.
  3. Transmita o objeto de estilo para o método relevante no GeoJsonFeature, que será setPointStyle(), setLineStringStyle() ou setPolygonStyle().

Por exemplo, é assim que se personaliza o estilo LineString de um GeoJsonFeature para que a cor dele seja vermelha.



// Create a new feature containing a linestring
val lineStringArray
: MutableList<LatLng> = ArrayList()
lineStringArray
.add(LatLng(0.0, 0.0))
lineStringArray
.add(LatLng(50.0, 50.0))
val lineString
= GeoJsonLineString(lineStringArray)
val lineStringFeature
= GeoJsonFeature(lineString, null, null, null)

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

// Set the style of the feature
lineStringFeature
.lineStringStyle = lineStringStyle

     

// Create a new feature containing a linestring
List<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);

     

Conferir o app de demonstração

Para ver um exemplo de como importar um arquivo GeoJSON de um URL e criar uma camada com ele, confira GeoJsonDemoActivity no app de demonstração que acompanha a biblioteca de utilitários. O guia de configuração mostra como executá-lo.