GeoJSON[1] é um formato de padrão aberto projetado para representar recursos geográficos simples, juntamente com seus atributos não espaciais. É baseado no formato JSON.

GeoJSON
Extensão de arquivos
.json, .geojson
Tipo de mídia da Internet
application/geo+json[1]
Estendido deJSON
PadrãoPredefinição:IETF RFC

Os recursos incluem pontos (portanto, endereços e locais), sequências de linhas (portanto, ruas, rodovias e fronteiras), polígonos (países, províncias, parcelas de terra) e coleções de múltiplas partes desses tipos. Os recursos GeoJSON não se limitam a representar apenas entidades do mundo físico; aplicativos móveis de roteamento e navegação, por exemplo, podem descrever sua cobertura de serviço usando GeoJSON.[2]

O formato GeoJSON difere de outros padrões de sistema de informação geográfica (GIS) pelo fato de ter sido escrito e ser mantido não por uma organização formal de padrões, mas por um grupo de trabalho de desenvolvedores na Internet.[3]

Um descendente notável do GeoJSON é o TopoJSON, uma extensão do GeoJSON que codifica a topologia geoespacial e que normalmente oferece tamanhos de arquivo menores.

História

editar

O grupo de trabalho e a discussão sobre o formato GeoJSON começaram em março de 2007[4] e a especificação do formato foi finalizada em junho de 2008.

Em abril de 2015, a Internet Engineering Task Force (IETF) fundou o grupo de trabalho Geographic JSON,[5] que lançou o GeoJSON como RFC 7946 em agosto de 2016.

Exemplo

editar
{
   "type": "FeatureCollection",
   "features": [{
	   "type": "Feature",
	   "geometry": {
		   "type": "Point",
		   "coordinates": [102.0, 0.5]
	   },
	   "properties": {
		   "prop0": "value0"
	   }
   }, {
	   "type": "Feature",
	   "geometry": {
		   "type": "LineString",
		   "coordinates": [
			   [102.0, 0.0],
			   [103.0, 1.0],
			   [104.0, 0.0],
			   [105.0, 1.0]
		   ]
	   },
	   "properties": {
		   "prop0": "value0",
		   "prop1": 0.0
	   }
   }, {
	   "type": "Feature",
	   "geometry": {
		   "type": "Polygon",
		   "coordinates": [
			   [
				   [100.0, 0.0],
				   [101.0, 0.0],
				   [101.0, 1.0],
				   [100.0, 1.0],
				   [100.0, 0.0]
			   ]
		   ]
	   },
	   "properties": {
		   "prop0": "value0",
		   "prop1": {
			   "this": "that"
		   }
	   }
   }]
}

Geometrias

editar

Pontos são [x, y] ou [x, y, z]. Eles podem ser [longitude, latitude] ou [abcissas e ordenadas]. A elevação, em metros,[6] é um terceiro número opcional. Eles são números decimais.[7]

Por exemplo, Londres (51,5074° Norte, 0,1278° Oeste) é [-0.1278, 51.5074]

O sistema de referência de coordenadas para todas as coordenadas GeoJSON é um sistema de referência de coordenadas geográficas, usando o datum World Geodetic System 1984 (WGS 84) [WGS84], com unidades de longitude e latitude em graus decimais.[8]

Primitivas de geometria
Tipo Exemplos
Point
{
"type": "Point",
"coordinates": [30.0, 10.0]
}
LineString
{
    "type": "LineString", 
    "coordinates": [
        [30.0, 10.0],
        [10.0, 30.0],
        [40.0, 40.0]
    ]
}
Polígono
{
    "type": "Polygon", 
    "coordinates": [
        [
            [30.0, 10.0],
            [40.0, 40.0],
            [20.0, 40.0],
            [10.0, 20.0],
            [30.0, 10.0]
        ]
    ]
}
{
    "type": "Polygon", 
    "coordinates": [
        [
            [35.0, 10.0],
            [45.0, 45.0],
            [15.0, 40.0],
            [10.0, 20.0],
            [35.0, 10.0]
        ],
        [
            [20.0, 30.0],
            [35.0, 35.0],
            [30.0, 20.0],
            [20.0, 30.0]
        ]
    ]
}
Geometrias de múltiplas partes
Tipo Exemplos
MultiPoint
{
    "type": "MultiPoint", 
    "coordinates": [
        [10.0, 40.0],
        [40.0, 30.0],
        [20.0, 20.0],
        [30.0, 10.0]
    ]
}
MultiLineString
{
    "type": "MultiLineString", 
    "coordinates": [
        [
            [10.0, 10.0],
            [20.0, 20.0],
            [10.0, 40.0]
        ],
        [
            [40.0, 40.0],
            [30.0, 30.0],
            [40.0, 20.0],
            [30.0, 10.0]
        ]
    ]
}
MultiPolygon
{
    "type": "MultiPolygon", 
    "coordinates": [
        [
            [
                [30.0, 20.0],
                [45.0, 40.0],
                [10.0, 40.0],
                [30.0, 20.0]
            ]
        ], 
        [
            [
                [15.0, 5.0],
                [40.0, 10.0],
                [10.0, 20.0],
                [5.0, 10.0],
                [15.0, 5.0]
            ]
        ]
    ]
}
{
    "type": "MultiPolygon", 
    "coordinates": [
        [
            [
                [40.0, 40.0],
                [20.0, 45.0],
                [45.0, 30.0],
                [40.0, 40.0]
            ]
        ], 
        [
            [
                [20.0, 35.0],
                [10.0, 30.0],
                [10.0, 10.0],
                [30.0, 5.0],
                [45.0, 20.0],
                [20.0, 35.0]
            ],
            [
                [30.0, 20.0],
                [20.0, 15.0],
                [20.0, 25.0],
                [30.0, 20.0]
            ]
        ]
    ]
}
GeometryCollection
{
    "type": "GeometryCollection",
    "geometries": [
        {
            "type": "Point",
            "coordinates": [40.0, 10.0]
        },
        {
            "type": "LineString",
            "coordinates": [
                [10.0, 10.0],
                [20.0, 20.0],
                [10.0, 40.0]
            ]
        },
        {
            "type": "Polygon",
            "coordinates": [
                [
                    [40.0, 40.0],
                    [20.0, 45.0],
                    [45.0, 30.0],
                    [40.0, 40.0]
                ]
            ]
        }
    ]
}

GeoJSON delimitado por nova linha

editar

Uma alternativa ao GeoJSON é codificar um recurso geográfico por linha, com quebras de linha (ou caracteres separadores de registro) designando a separação entre os registros.

Este formato pode ser muito mais rápido e eficiente para analisar do que o GeoJSON normal, pois as ferramentas podem ler registros individuais em paralelo. Este formato é semelhante ao JSON delimitado por nova linha.

As variantes do GeoJSON delimitado por nova linha incluem:

  • GeoJSONSeq (abreviação de GeoJSON Text Sequences) - com caracteres separadores de registro (RS) separando os recursos[9]
  • GeoJSONL (abreviação de GeoJSON Lines) - com caracteres de nova linha separando os recursos[10]

TopoJSON

editar

TopoJSON é uma extensão do GeoJSON que codifica topologia. Em vez de representar geometrias de forma discreta, as geometrias nos arquivos TopoJSON são costuradas a partir de segmentos de linha compartilhados chamados arcos.[11] Arcos são sequências de pontos, enquanto sequências de linhas e polígonos são definidos como sequências de arcos. Cada arco é definido apenas uma vez, mas pode ser referenciado várias vezes por diferentes formas, reduzindo assim a redundância e diminuindo o tamanho do arquivo.[12] Além disso, o TopoJSON facilita aplicações que utilizam topologia, como simplificação de formas com preservação de topologia, coloração automática de mapas e cartogramas.

Uma implementação de referência da especificação TopoJSON está disponível como uma ferramenta de linha de comando para codificar TopoJSON a partir de GeoJSON (ou ESRI Shapefiles) e uma biblioteca JavaScript no lado do cliente para decodificar TopoJSON de volta para GeoJSON. O TopoJSON também é suportado pela popular ferramenta OGR a partir da versão 1.11[13] e pelo PostGIS a partir da versão 2.1.0.[14]

Esquema TopoJSON

editar

Dada uma forma GIS próxima às coordenadas de latitude 0° e longitude 0°, um arquivo topojson simples, mas válido e completo, contendo todos os metadados, elementos Polygon, LineString, Point, arcos e propriedades é definido da seguinte forma:

Formas Topojson
{
  "type":"Topology",
  "transform":{
    "scale": [1,1],
    "translate": [0,0]
  },
  "objects":{ 
    "two-squares":{
      "type": "GeometryCollection",
      "geometries":[
        {"type": "Polygon", "arcs":[[0,1]],"properties": {"name": "Left_Polygon" }},
        {"type": "Polygon", "arcs":[[2,-1]],"properties": {"name": "Right_Polygon" }}
      ]
    },
    "one-line": {
      "type":"GeometryCollection",
      "geometries":[
        {"type": "LineString", "arcs": [3],"properties":{"name":"Under_LineString"}}
      ]
    },
    "two-places":{
      "type":"GeometryCollection",
      "geometries":[
        {"type":"Point","coordinates":[0,0],"properties":{"name":"Origine_Point"}},
        {"type":"Point","coordinates":[0,-1],"properties":{"name":"Under_Point"}}
      ]
    }
  },
  "arcs": [
    [[1,2],[0,-2]],
    [[1,0],[-1,0],[0,2],[1,0]],
    [[1,2],[1,0],[0,-2],[-1,0]],
    [[0,-1],[2,0]]
  ]
}

Ver também

editar

Referências

editar
  1. 1 2 Butler, Howard; Daly, Martin; Doyle, Allan; Gillies, Sean; Hagen, Stefan; Schaub, Tim (Agosto 2016). RFC 7946. IETF. doi:10.17487/RFC7946Acessível livremente
  2. «Providing Directions». developer.apple.com
  3. «GeoJSON Info Page». lists.geojson.org
  4. «The GeoJSON March 2007 Archive by thread». lists.geojson.org
  5. «Geographic JSON (geojson) -». datatracker.ietf.org
  6. Butler, H.; Daly, M.; Doyle, A.; Gillies, Sean; Schaub, T.; Hagen, Stefan (agosto 2016). The GeoJSON Format (Relatório). Internet Engineering Task Force
  7. Butler, H.; Daly, M.; Doyle, A.; Gillies, Sean; Schaub, T.; Hagen, Stefan (agosto 2016). «GeoJSON RFC #3.1.1»
  8. Butler, H.; Daly, M.; Doyle, A.; Gillies, Sean; Schaub, T.; Hagen, Stefan (agosto 2016). The GeoJSON Format (Relatório). Internet Engineering Task Force
  9. Gillies, Sean (abril 2017). GeoJSON Text Sequences (Relatório). Internet Engineering Task Force
  10. «GeoJSONL: An optimized format for large geographic datasets». Interline Technologies (em inglês). 11 de setembro de 2018. Consultado em 11 de novembro de 2024
  11. «topojson/topojson-specification». 11 dezembro 2020 via GitHub
  12. «topojson/topojson». GitHub
  13. «Release/1.11.0-News – GDAL». trac.osgeo.org
  14. «AsTopoJSON». postgis.net

Fontes

editar

Andrews, Christopher (18 setembro 2007). «Emerging Technology: AJAX and GeoJSON». Arquivado do original em 22 maio 2009 

«Geoweb Guru: Technical Overview: GeoJSON». 16 fevereiro 2009. Arquivado do original em 21 fevereiro 2009 

Lambert, Chris (4 maio 2009). «Google Geo Developers Blog: Build on top of your public Latitude location with GeoJSON & KML» 

editar