¿Es posible convertir JSON regular a GeoJSON?

10

Mis disculpas si esta es una pregunta repetida, busqué aquí y no pude encontrar una respuesta. Tengo datos JSON que exporté de Openpaths.cc que contienen valores de lat y lon. Sin embargo, los datos no están en formato GeoJSON, por lo que OGR2OGR no puede leerlos. ¿Alguien podría señalarme en la dirección correcta sobre cómo convertir mis datos a GeoJSON? En última instancia, me gustaría mostrarlo con Leaflet. Así es como se ven los datos:

[
{
    "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
fuente
Obtengo un Failure: Unable to open datasourceogr2ogr cuando intento eso con mis datos json.
clhenrick
¿Puedes publicar un archivo / código en jsfiddle o pastbin?
Mapperz
¿código? Solo estoy buscando cambiar el formato de datos anterior. El JSON anterior es una muestra, pero ese es el esquema.
clhenrick
¡La forma más fácil es guardar su capa como GeoJson en QGIS sin ningún código!
maxkpow

Respuestas:

11

Por lo tanto, este script de Python tomará un archivo de entrada json como se detalla anteriormente y escribirá geojson con el formato adecuado en el archivo de salida.

ejecuta el script en la terminal haciendo 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
fuente
Cuando intento esto en la línea de comandos con mi archivo JSON, aparece el error: Archivo "json2geojson.py", línea 28 print geojson ^ SyntaxError: sintaxis no válida ¿Me pueden ayudar con esto?
Stefan
Hola @Stefan, ¿qué versión de Python estás usando? si comentas esa línea, ¿funciona?
clhenrick 01 de
1
Estoy usando Python 2.7, por lo que puede ser un problema. Intente cambiar import simplejson as jsonaimport json
clhenrick
1
@Stefan, ¿puedes publicar tus datos json en algún lugar para que pueda verlos?
clhenrick
1
Sus datos tienen un formato diferente al mío. Si elimina el exterior más { }y también elimina "events:"pero deja el [ ], guarde el archivo de datos y ejecute el script, debería funcionar. Esto es lo que quiero decir: jsfiddle.net/chenrick/1cjh81hf
clhenrick
2

Te recomiendo que sigas:

1- Convierte tu json en csv usando http://www.danmandle.com/blog/json-to-csv-conversion-utility/

2- Cree un archivo vrt para sus datos csv usando http://www.gdal.org/ogr/drv_csv.html

3- Use GDAL (ogr2ogr -f 'GeoJSON' output_file input_file)

4- Cargue el archivo geojson de salida en su mapa utilizando la biblioteca de folletos

Espero que sea de ayuda.

Farhat Abbas
fuente
gracias Farhat, esta solución funciona. También descubrí un script de Python para lograr esto aquí
clhenrick
0

Convertir ArcGIS JSON a GeoJSONThere en puro navegador

hay 2 formas de hacerlo

1) TERRAFORMADOR

Nota: el uso en node.js y el uso en el navegador son diferentes , ver detalles en el enlace

2) Esri / arcgis-to-geojson-utils

Esri no proporciona el paquete bundle.js, por lo que NO puede usar esta lib en el navegador directamente

A partir de hoy, no puede cargar el módulo en el navegador.

Solo puede usar ESIR lib en node.js, no en el navegador.

Para usar este esri lib en el navegador, debe usar algún paquete, siga:

a) Necesita compilar todo el archivo fuente del módulo en un solo paquete.js

rollup.js instalar por

npm install --global rollup

luego vaya a su carpeta raíz js lib, busque el archivo js del punto de entrada, en este caso es index.js

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

Debería encontrar un nuevo archivo bundle.js en su directorio raíz.

Ahora en el archivo html de su navegador, incluya este archivo bundle.js

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

Puedes usarlo ahora por

  // 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

Recuerda que esri_arcgis_to_geojson es el nombre que llamaste lib

Este se convierte en el nombre de la variable global, disponible en el navegador.

El truco es que el proceso de paquete agrega una función de implementación instantánea como (function xx {}) aquí está la parte superior de 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-to-geojson-utils

hoogw
fuente