É possível converter JSON regular em GeoJSON?

10

Peço desculpas se esta for uma pergunta repetida, procurei aqui e não consegui encontrar uma resposta. Tenho dados JSON exportados do Openpaths.cc que contêm valores lat e lon. No entanto, os dados não estão no formato GeoJSON, portanto, não podem ser lidos pelo OGR2OGR. Alguém poderia me indicar a direção certa de como converter meus dados em GeoJSON? Eu finalmente gostaria de exibi-lo com o Leaflet. Aqui está a aparência dos dados:

[
{
    "lon": -73.97, 
    "device": "iPhone3,3", 
    "version": "1.1", 
    "t": 1381167616, 
    "lat": 40.66, 
    "alt": 67, 
    "os": "6.1.3"
}, 
{
    "lon": -73.96, 
    "device": "iPhone3,3", 
    "version": "1.1", 
    "t": 1381171200, 
    "lat": 40.66, 
    "alt": 45, 
    "os": "6.1.3"
} 

]

Clhenrick
fonte
Eu recebo um Failure: Unable to open datasourcedo ogr2ogr ao tentar isso com meus dados json.
clhenrick
você pode postar arquivo / código em jsfiddle ou pastbin?
Mapperz
código? Eu só estou olhando para alterar o formato de dados acima. O JSON acima é uma amostra, mas esse é o esquema.
clhenrick
A maneira mais fácil é salvar sua camada como um GeoJson no QGIS sem nenhum código!
Maxkpow

Respostas:

11

Portanto, esse script python pegará um arquivo de entrada json conforme detalhado acima e gravará um geojson formatado corretamente no arquivo de saída.

execute o script no terminal fazendo python scriptname.py input_file.json output_file.json

#! usr/bin/env python

from sys import argv
from os.path import exists
import simplejson as json 

script, in_file, out_file = argv

data = json.load(open(in_file))

geojson = {
    "type": "FeatureCollection",
    "features": [
    {
        "type": "Feature",
        "geometry" : {
            "type": "Point",
            "coordinates": [d["lon"], d["lat"]],
            },
        "properties" : d,
     } for d in data]
}


output = open(out_file, 'w')
json.dump(geojson, output)

print geojson
Clhenrick
fonte
Quando tento isso na linha de comando com o meu arquivo JSON, recebo o erro: Arquivo "json2geojson.py", linha 28 print geojson ^ SyntaxError: sintaxe inválida Você pode me ajudar com isso?
Stefan
Oi @Stefan, qual versão do python você está usando? se você comentar essa linha, funciona?
clhenrick
1
Estou usando o python 2.7, então isso pode ser um problema. Tente mudar import simplejson as jsonparaimport json
clhenrick 16/10
1
@ Stefan, você pode postar seus dados json em algum lugar para que eu possa ver?
clhenrick
1
Seus dados estão formatados de forma diferente da minha. Se você remover a parte mais externa { }e também remover, "events:"mas deixar o [ ], salve o arquivo de dados e execute o script, que deve funcionar. Aqui está o que eu quero dizer: jsfiddle.net/chenrick/1cjh81hf
clhenrick
2

Eu recomendo que você siga:

1- Converta seu json em csv usando http://www.danmandle.com/blog/json-to-csv-conversion-utility/

2- Crie um arquivo vrt para seus dados csv usando http://www.gdal.org/ogr/drv_csv.html

3- Use GDAL (arquivo de saída ogr2ogr -f 'GeoJSON' arquivo de entrada)

4- Carregue o arquivo geojson de saída no seu mapa usando a biblioteca de folhetos

Eu espero que isso ajude.

Farhat Abbas
fonte
graças Farhat, esta solução funciona. Eu também descobri um script python para alcançar este objetivo aqui
clhenrick
0

Convertendo ArcGIS JSON para GeoJSONThere no navegador puro

existem 2 maneiras de fazer

1) TERRAFORMADOR

Nota: use no node.js e use no navegador são diferentes , detalhes consulte o link

2) Esri / arcgis-to-geojson-utils

A Esri não fornece o bundle.js, portanto, você NÃO pode usar esta lib no navegador diretamente

A partir de hoje, você não pode carregar o módulo no navegador.

Você só pode usar a ESIR lib no node.js, não no navegador.

Para usar esta esri lib no navegador, você deve usar algum bundler, siga:

a) Você precisa compilar todo o arquivo de origem do módulo em um único bundle.js

instalação do rollup.js por

npm install --global rollup

em seguida, vá para a pasta raiz js lib, localize o arquivo js do ponto de entrada; nesse caso, é index.js

$ rollup index.js --format umd --name "esri_arcgis_to_geojson" --file bundle.js

Você deve encontrar um novo arquivo bundle.js no diretório raiz.

Agora no arquivo html do navegador, inclua este arquivo bundle.js

<script src='.../.../.../bundle.js'>

Você pode usá-lo agora

  // parse ArcGIS JSON, convert it to GeoJSON
  var geojson = esri_arcgis_to_geojson.arcgisToGeoJSON({
                            "x":-122.6764,
                            "y":45.5165,
                            "spatialReference": {
                              "wkid": 4326
                            }
                            });

 // take GeoJSON and convert it to ArcGIS JSON
  var arcgis = esri_arcgis_to_geojson.geojsonToArcGIS({
                            "type": "Point",
                              "coordinates": [45.5165, -122.6764]
                            });enter code here

Lembre-se de esri_arcgis_to_geojson é o nome que você chamou de lib

Este se torna o nome da variável global, disponível no navegador.

O truque é que o processo de bundle adiciona uma função de implementação instantânea como (function xx {}) aqui está a parte superior do bundle.js

  (function (global, factory) {
     typeof exports === 'object' && typeof module !== 'undefined' ? 
        factory(exports) :
      typeof define === 'function' && define.amd ? define(['exports'], 
         factory) :
      (factory((global.arcgis_to_geojson = {})));
      }(this, (function (exports) { 'use strict';

         ***ORIGINAL SOURCE CODE OF JS MODULE***

     })));

arcgis-para-geojson-utils

hoogw
fonte