Có thể chuyển đổi JSON thông thường sang GeoJSON không?


10

Tôi xin lỗi nếu đây là một câu hỏi lặp lại, tôi đã tìm kiếm ở đây và không thể tìm thấy câu trả lời. Tôi có dữ liệu JSON tôi đã xuất từ Openpaths.cc chứa giá trị lat và lon. Tuy nhiên, dữ liệu không ở định dạng GeoJSON nên OGR2OGR không thể đọc được. Bất cứ ai cũng có thể chỉ cho tôi đi đúng hướng về cách chuyển đổi dữ liệu của tôi sang GeoJSON? Cuối cùng tôi muốn hiển thị nó với Tờ rơi. Đây là những gì dữ liệu trông như:

[
{
    "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"
} 

]



Tôi nhận được Failure: Unable to open datasourcetừ ogr2ogr khi thử điều đó với dữ liệu json của tôi.
clhenrick

bạn có thể gửi tập tin / mã trên jsfiddle hoặc pastbin không?
Mapperz

mã? Tôi chỉ đang tìm cách thay đổi định dạng dữ liệu trên. JSON ở trên là một mẫu nhưng đó là lược đồ.
clhenrick

Cách dễ nhất là lưu lớp của bạn dưới dạng GeoJson trong QGIS mà không cần bất kỳ mã nào!
maxkpow

Câu trả lời:


11

Vì vậy, tập lệnh python này sẽ lấy một tệp đầu vào json như chi tiết ở trên và ghi Geojson được định dạng đúng vào tệp đầu ra.

chạy script trong terminal bằng cách thực hiện 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

Khi tôi thử điều này với dòng lệnh với tệp JSON của tôi, tôi gặp lỗi: Tệp "json2geojson.py", dòng 28 in Geojson ^ SyntaxError: cú pháp không hợp lệ Bạn có thể giúp tôi không?
Stefan

Xin chào @Stefan bạn đang sử dụng phiên bản nào của python? Nếu bạn nhận xét ra dòng đó nó hoạt động?
clhenrick

1
Tôi đang sử dụng python 2.7 nên có thể là một vấn đề. Hãy thử đổi import simplejson as jsonthànhimport json
clhenrick

1
@Stefan bạn có thể đăng dữ liệu json của bạn ở đâu đó để tôi có thể xem nó không?
clhenrick

1
Dữ liệu của bạn được định dạng khác với dữ liệu của tôi. Nếu bạn loại bỏ phần lớn bên ngoài { }và cũng loại bỏ "events:"nhưng để lại [ ]tệp lưu dữ liệu và chạy tập lệnh thì nó sẽ hoạt động. Ý tôi là đây: jsfiddle.net/chenrick/1cjh81hf
clhenrick

2

Tôi muốn giới thiệu bạn làm theo:

1- Chuyển đổi json của bạn thành csv bằng cách sử dụng http://www.danmandle.com/blog/json-to-csv-conversion-utility/

2- Tạo tệp vrt cho dữ liệu csv của bạn bằng cách sử dụng http://www.gdal.org/ogr/drv_csv.html

3- Sử dụng GDAL (ogr2ogr -f 'GeoJSON' output_file input_file)

4- Tải tệp Geojson đầu ra vào bản đồ của bạn bằng thư viện tờ rơi

Tôi mong nó sẽ có ích.


cảm ơn Farhat, giải pháp này không hoạt động. Tôi cũng đã tìm ra một kịch bản python để thực hiện điều này ở đây
clhenrick

0

Chuyển đổi ArcGIS JSON sang GeoJSONThere trong Trình duyệt thuần túy

có 2 cách bạn có thể làm

1) ĐIỀU KHIỂN

Lưu ý: sử dụng trong node.js và sử dụng trong trình duyệt là khác nhau , chi tiết xem liên kết

2) Esri / arcgis-to-Geojson-utils

Esri không cung cấp bundle.js, vì vậy bạn KHÔNG thể sử dụng lib này trong trình duyệt trực tiếp

Kể từ hôm nay, bạn không thể tải mô-đun trong trình duyệt.

Bạn chỉ có thể sử dụng ESIR lib trong node.js, không phải trình duyệt.

Để sử dụng esri lib này trong trình duyệt, bạn nên sử dụng một số gói, vui lòng làm theo:

a) Bạn cần biên dịch tất cả các tệp nguồn mô-đun thành một bundle.js duy nhất

rollup.js cài đặt bởi

npm install --global rollup

sau đó vào thư mục gốc js lib của bạn, tìm tệp js của điểm nhập cảnh, trong trường hợp này là index.js

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

Bạn nên tìm một tệp bundle.js mới trong thư mục gốc của bạn.

Bây giờ trong tệp html trình duyệt của bạn, hãy bao gồm tệp bundle.js này

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

Bạn có thể sử dụng nó ngay bây giờ

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

Hãy nhớ esri_arcgis_to_geojson là tên bạn đặt tên cho lib

Điều này trở thành tên biến toàn cầu, có sẵn trong trình duyệt.

Thủ thuật là, quy trình gói thêm chức năng triển khai tức thời như (hàm xx {}) ở đây là phần trên cùng của 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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.