Apakah mungkin untuk mengubah JSON reguler ke GeoJSON?

10

Saya minta maaf jika ini adalah pertanyaan berulang, saya mencari di sini dan tidak dapat menemukan jawaban. Saya memiliki data JSON yang saya ekspor dari Openpaths.cc yang berisi nilai lat dan lon. Namun, data tidak dalam format GeoJSON sehingga tidak dapat dibaca oleh OGR2OGR. Adakah yang bisa mengarahkan saya ke arah yang benar tentang cara mengkonversi data saya ke GeoJSON? Saya akhirnya ingin menampilkannya dengan Leaflet. Berikut ini tampilannya:

[
{
    "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
sumber
Saya mendapatkan Failure: Unable to open datasourcedari ogr2ogr ketika mencobanya dengan data json saya.
clhenrick
dapatkah Anda memposting file / kode di jsfiddle atau pastbin?
Mapperz
kode? Saya hanya ingin mengubah format data di atas. JSON di atas adalah contoh tapi itu skema.
clhenrick
Cara termudah adalah dengan menyimpan layer Anda sebagai GeoJson di QGIS tanpa kode apa pun!
maxkpow

Jawaban:

11

Jadi skrip python ini akan mengambil file input json seperti yang dijelaskan di atas dan menulis geojson yang diformat dengan benar ke file output.

jalankan script di terminal dengan melakukan 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
sumber
Ketika saya mencoba ini dengan pada baris perintah dengan file JSON saya, saya mendapatkan kesalahan: File "json2geojson.py", baris 28 cetak geojson ^ SyntaxError: sintaks tidak valid Dapatkah Anda membantu saya dengan ini?
Stefan
Hai @Stefan versi python apa yang Anda gunakan? jika Anda mengomentari kalimat itu, apakah itu berfungsi?
clhenrick
1
Saya menggunakan python 2.7 sehingga mungkin menjadi masalah. Coba ubah import simplejson as jsonkeimport json
clhenrick
1
@Stefan dapatkah Anda mengirim data json Anda di suatu tempat sehingga saya dapat melihatnya?
clhenrick
1
Data Anda diformat berbeda dari data saya sebelumnya. Jika Anda menghapus paling luar { }dan juga menghapus "events:"tetapi meninggalkan [ ]kemudian simpan file data dan jalankan skrip itu seharusnya berfungsi. Inilah yang saya maksud: jsfiddle.net/chenrick/1cjh81hf
clhenrick
2

Saya akan merekomendasikan Anda untuk mengikuti:

1- Konversikan json Anda menjadi csv menggunakan http://www.danmandle.com/blog/json-to-csv-conversion-utility/

2- Buat file vrt untuk data csv Anda menggunakan http://www.gdal.org/ogr/drv_csv.html

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

4- Memuat file geojson output ke peta Anda menggunakan pustaka leaflet

Saya harap ini akan membantu.

Farhat Abbas
sumber
Terima kasih Farhat, solusi ini berhasil. Saya juga menemukan skrip python untuk mencapai ini di sini
clhenrick
0

Konversi ArcGIS JSON ke GeoJSONThere di Browser murni

ada 2 cara yang bisa kamu lakukan

1) TERRAFORMER

Catatan: gunakan di node.js dan digunakan di browser berbeda , detail lihat tautan

2) Esri / arcgis-to-geojson-utils

Esri tidak menyediakan bundle.js, jadi Anda TIDAK bisa menggunakan lib ini di browser secara langsung

Sampai hari ini, Anda tidak dapat memuat modul di browser.

Anda hanya bisa menggunakan ESIR lib di node.js, bukan browser.

Untuk menggunakan esri lib ini di browser, Anda harus menggunakan beberapa bundler, harap ikuti:

a) Anda perlu mengkompilasi semua file sumber modul ke dalam satu bundle.js

rollup.js pasang oleh

npm install --global rollup

kemudian pergi ke folder root js lib Anda, cari file entry point js, dalam hal ini adalah index.js

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

Anda harus menemukan file bundle.js baru di direktori root Anda.

Sekarang di file html browser Anda, termasuk file bundle.js ini

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

Anda dapat menggunakannya sekarang dengan

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

Ingat esri_arcgis_to_geojson adalah nama yang Anda beri nama lib

Ini menjadi nama variabel global, tersedia di browser.

Caranya adalah, proses bundel menambahkan fungsi implement instan seperti (function xx {}) di sini adalah bagian atas dari 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
sumber