Ist es möglich, reguläres JSON in GeoJSON zu konvertieren?

10

Ich entschuldige mich, wenn dies eine Wiederholungsfrage ist. Ich habe hier gesucht und keine Antwort gefunden. Ich habe JSON-Daten, die ich aus Openpaths.cc exportiert habe und die lat- und lon-Werte enthalten. Die Daten liegen jedoch nicht im GeoJSON-Format vor und können daher von OGR2OGR nicht gelesen werden. Könnte mich jemand in die richtige Richtung weisen, wie ich meine Daten in GeoJSON konvertieren kann? Ich möchte es letztendlich mit Leaflet anzeigen. So sehen die Daten aus:

[
{
    "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
quelle
Ich bekomme eine Failure: Unable to open datasourcevon ogr2ogr, wenn ich das mit meinen JSON-Daten versuche.
Clhenrick
Kannst du Datei / Code auf jsfiddle oder pastbin posten?
Mapperz
Code? Ich möchte nur das obige Datenformat ändern. Der obige JSON ist ein Beispiel, aber das ist das Schema.
Clhenrick
Am einfachsten ist es, Ihre Ebene als GeoJson in QGIS ohne Code zu speichern!
Maxkpow

Antworten:

11

Dieses Python-Skript verwendet also eine JSON-Eingabedatei wie oben beschrieben und schreibt ordnungsgemäß formatiertes Geojson in die Ausgabedatei.

Führen Sie das Skript im Terminal aus, indem Sie Folgendes tun 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
quelle
Wenn ich dies in der Befehlszeile mit meiner JSON-Datei versuche, wird folgende Fehlermeldung angezeigt: Datei "json2geojson.py", Zeile 28 print geojson ^ SyntaxError: ungültige Syntax Können Sie mir dabei helfen?
Stefan
Hallo @Stefan, welche Python-Version verwendest du? Wenn Sie diese Zeile auskommentieren, funktioniert es?
Clhenrick
1
Ich verwende Python 2.7, daher kann dies ein Problem sein. Versuchen Sie, import simplejson as jsonzuimport json
Clhenrick
1
@Stefan kannst du deine json Daten irgendwo posten, damit ich sie mir ansehen kann?
Clhenrick
1
Ihre Daten sind anders formatiert als meine. Wenn Sie die äußerste entfernen { }und auch entfernen, "events:"aber die [ ]dann verlassen, speichern Sie die Datendatei und führen Sie das Skript aus, das funktionieren sollte. Folgendes
Clhenrick
2

Ich würde Ihnen empfehlen zu folgen:

1- Konvertieren Sie Ihren JSON mithilfe von http://www.danmandle.com/blog/json-to-csv-conversion-utility/ in CSV.

2- Erstellen Sie eine vrt-Datei für Ihre CSV-Daten unter http://www.gdal.org/ogr/drv_csv.html

3- Verwenden Sie GDAL (ogr2ogr -f 'GeoJSON' Ausgabedatei Eingabedatei)

4- Laden Sie die Geojson-Ausgabedatei mithilfe der Broschürenbibliothek in Ihre Karte

Ich hoffe es wird helfen.

Farhat Abbas
quelle
danke Farhat, diese Lösung funktioniert. Ich habe auch ein Python-Skript gefunden, um dies hier zu erreichen
Clhenrick
0

Konvertieren von ArcGIS JSON in GeoJSONThere im reinen Browser

Es gibt zwei Möglichkeiten

1) TERRAFORMER

Hinweis: Die Verwendung in node.js und die Verwendung im Browser sind unterschiedlich . Details siehe Link

2) Esri / Arcgis-zu-Geojson-Utensilien

Esri stellt die Datei bundle.js nicht zur Verfügung, daher können Sie diese Bibliothek NICHT direkt im Browser verwenden

Ab heute können Sie kein Modul im Browser laden.

Sie können ESIR lib nur in node.js verwenden, nicht im Browser.

Um diese esri lib im Browser zu verwenden, sollten Sie einen Bundler verwenden, folgen Sie bitte:

a) Sie müssen die gesamte Modulquelldatei in einer einzigen bundle.js kompilieren

rollup.js installieren von

npm install --global rollup

Gehen Sie dann zu Ihrem js lib-Stammordner und suchen Sie die Einstiegspunkt-js-Datei. In diesem Fall handelt es sich um index.js

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

Sie sollten eine neue Datei bundle.js in Ihrem Stammverzeichnis finden.

Fügen Sie jetzt in Ihre HTML-Datei Ihres Browsers diese Datei bundle.js ein

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

Sie können es jetzt von verwenden

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

Denken Sie daran, esri_arcgis_to_geojson ist der Name, den Sie lib genannt haben

Dies wird der globale Variablenname, der im Browser verfügbar ist.

Der Trick ist, Bundle-Prozess hinzufügen sofortige Implementierungsfunktion wie (Funktion xx {}) hier ist der obere Teil von 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
quelle