- Introdução
- Adicionar uma GeoJsonLayer ao mapa
- Remover a GeoJsonLayer
- Adicionar e remover um GeoJsonFeature
- Acessar os GeoJsonFeatures e as propriedades deles
- Aplicar estilo à GeoJsonLayer e aos GeoJsonFeatures
- 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.
Kotlin
val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data val layer = GeoJsonLayer(map, geoJsonData)
Java
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
Kotlin
val layer = GeoJsonLayer(map, R.raw.geojson_file, context)
Java
GeoJsonLayer layer = new GeoJsonLayer(map, R.raw.geojson_file, context);
Depois de criar o GeoJsonLayer
, chame addLayerToMap()
para adicionar os dados importados ao mapa:
Kotlin
layer.addLayerToMap()
Java
layer.addLayerToMap();
Remover a GeoJsonLayer
Vamos supor que você tenha adicionado esta camada
Kotlin
val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data val layer = GeoJsonLayer(map, geoJsonData)
Java
JSONObject geoJsonData = // JSONObject containing the GeoJSON data GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);
Para limpar a GeoJsonLayer, chame removeLayerFromMap()
.
Kotlin
layer.removeLayerFromMap()
Java
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.
Kotlin
val point = GeoJsonPoint(LatLng(0.0, 0.0)) val properties = hashMapOf("Ocean" to "South Atlantic") val pointFeature = GeoJsonFeature(point, "Origin", properties, null)
Java
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.
Kotlin
layer.addFeature(pointFeature)
Java
layer.addFeature(pointFeature);
Para remover um recurso após adicioná-lo à camada, chame removeFeature()
e transmita o recurso.
Kotlin
layer.removeFeature(pointFeature)
Java
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.
Kotlin
for (feature in layer.features) { // Do something to the feature }
Java
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.
Kotlin
if (feature.hasProperty("Ocean")) { val oceanProperty = feature.getProperty("Ocean") }
Java
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:
Kotlin
// Set a listener for geometry clicked events. layer.setOnFeatureClickListener { feature -> Log.i("GeoJsonClick", "Feature clicked: ${feature.getProperty("title")}") }
Java
// 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
- Recupere o objeto de estilo padrão relevante, que pode ser
GeoJsonPointStyle
,GeoJsonLineStringStyle
ouGeoJsonPolygonStyle
. - 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.
Kotlin
val pointStyle = layer.defaultPointStyle pointStyle.isDraggable = true pointStyle.title = "Hello, World!" pointStyle.snippet = "I am a draggable marker"
Java
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:
- Crie o objeto de estilo relevante. Ele pode ser
GeoJsonPointStyle
,GeoJsonLineStringStyle
ouGeoJsonPolygonStyle
. - Aplique as opções desejadas ao estilo.
- Transmita o objeto de estilo para o método relevante no
GeoJsonFeature
, que serásetPointStyle()
,setLineStringStyle()
ousetPolygonStyle()
.
Por exemplo, é assim que se personaliza o estilo LineString de um GeoJsonFeature
para que a cor dele seja vermelha.
Kotlin
// 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
Java
// 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.