Làm việc với các thuộc tính JSON phức tạp trong QGIS


7

Tôi là nhà phát triển và có một công cụ tạo tài sản Geojson để nhóm dữ liệu của chúng tôi làm việc với việc sử dụng ứng dụng QGIS. Do nguồn gốc của dữ liệu, các tính năng này có một số thuộc tính được biểu diễn dưới dạng dữ liệu phân cấp phức tạp, không thể chiếu vào một lược đồ phẳng.

Chúng ta cần có khả năng xem / chỉnh sửa trường thuộc tính một cách hiệu quả như một blob JSON, thay vì một chuỗi bằng chữ.

Những cơ sở nào có sẵn để làm điều này trong QGIS? Có bất kỳ plugin chỉnh sửa trường nào sẽ hỗ trợ một công việc như vậy không? Lý tưởng nhất là một số loại trình soạn thảo JSON bật lên với xác thực định dạng tài liệu và các nút có thể thu gọn, tương tự như cách các trình soạn thảo Visual Studio (Code) hoạt động.

Ngoài ra, một số quy trình công việc khác sẽ cho phép chúng tôi quản lý dữ liệu này trong một công cụ bên ngoài và đưa lại dữ liệu đó vào tính năng nguồn.

CẬP NHẬT: Có Postgres xuất hiện và tạo một cột JSON từ một cột văn bản hiện có chứa JSON. QGIS giấu nó trong bảng thuộc tính. Bất kỳ đề xuất nào khác về làm việc với các thuộc tính JSON trực tiếp trong DB?


1
Nghe có vẻ như công việc cho postgres với JSON hỗ trợ postgresql.org/docs/9.4/static/datatype-json.html
Mapperz

Đã nhìn vào Postgres, không chắc nó sẽ tích hợp với trình soạn thảo của QGIS như thế nào, nhưng sẽ là một tình huống lý tưởng để làm việc với, mọi thứ tập trung.
Tristan Rhodes

Tôi cũng quan tâm đến điều này, nhưng tôi chưa thấy bất cứ điều gì tạo điều kiện thuận lợi cho điều này trong QGIS. Nhân tiện, SQLite cũng có hỗ trợ cho JSON: sqlite.org/json1.html
arjan

Đó không phải là vấn đề lưu trữ, đó là trình soạn thảo. Chúng tôi thực sự có một nhóm các kỹ sư dữ liệu dọn dẹp các tệp Geojson và chuyển chúng cho chúng tôi. Tôi rất vui khi được hỗ trợ bởi cơ sở dữ liệu, nhưng chúng tôi vẫn cần hỗ trợ biên tập viên phong phú để có thể sử dụng được. Có thể chỉ cần học Python và viết một plugin :)
Tristan Rhodes

@TristanRhodes Nếu bạn viết một plugin (hoặc tìm giải pháp khác), vui lòng cho chúng tôi biết!
arjan

Câu trả lời:



2

Trong các phiên bản QGIS gần đây (> 3.3), nếu bạn có trường JSON trong cơ sở dữ liệu PostgreQuery, bạn có thể sử dụng map_get hàm ở bất cứ đâu với Hộp thoại Biểu thức để trích xuất một giá trị cụ thể.

Ví dụ: nếu bạn có một trường JSON được gọi "extraData"và nội dung là:

{ 
        "param1": "Some string",
        "param2": "Another string"
}

sau đó map_get(extraData,'param1')sẽ sản xuấtSome string

Tôi cho rằng (mặc dù tôi chưa thử) bạn có thể sử dụng hàm đệ quy để truy xuất các giá trị lồng nhau sâu.

Có các chức năng khác như from_jsonchức năng trả về toàn bộ nội dung. Hãy xem phần Bản đồ bên trong Hộp thoại Biểu thức.


1

Giả sử chúng ta có một trường / cột được gọi là ' location ' với nội dung / giá trị sau (nó là một chuỗi nhưng có cấu trúc json) vào QGIS:

{
    "address": "A-319, Hornos, Jaén, Andalusia, 23292, Spain",
    "continent": "Europe",
    "country": "Spain",
    "region": "Andalucía",
    "subregion": "Jaén"
}

và bạn muốn truy cập vào thuộc tính 'tiểu vùng', vì vậy biểu thức:

map_get(json_to_map("location"),'subregion')

sẽ trở lại 'Jaén'

Đã thử nghiệm với cơ sở dữ liệu địa lý.

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.