Tương tác giữa Openlayers và Python


9

Tôi có một trang web openlayers như thế này một cung cấp cho người dùng khả năng để vẽ đa giác và sau đó tạo ra một tập tin GeoJSON. Tôi muốn xử lý GeoJSON này với một kịch bản python. Tập lệnh python trả về cuối chuỗi nên được trả về trang web và hiển thị dưới dạng hộp thông tin.

Tôi nên xem xét loại khung / ứng dụng / bước nào để thực hiện dự án này?

Câu trả lời:


5

Máy chủ: Bạn cần một khung ở phía máy chủ, có các tùy chọn python tốt: Django, Flask, Chai, webpy. Khung đó sẽ nhận được yêu cầu (ajax) xử lý GeoJson và trả về chuỗi.
Sau khi thông tin đi vào khung, bạn hiện là "pythonic" và có thể sử dụng công cụ bạn muốn đọc và làm việc với GeoJSON, ví dụ như các ràng buộc Python của Shapely hoặc Osgeo OGR . Nếu bạn chọn Django, nó đã đi kèm với trình trợ giúp hình học của nó - GeoDjango .

Khách hàng: Về phía khách hàng, bạn cần một cái gì đó để thực hiện các yêu cầu, nhận câu trả lời và hiển thị hộp thông tin dễ dàng hơn. Cho rằng bạn có thể sử dụng các khung / công cụ như ExtJS , Jquery (UI) , Dojo , KendoUI

Cá nhân tôi sử dụng kết hợp Django + ExtJS để thực hiện loại điều này. Đó là một sự kết hợp tải nặng, ý tôi là, nó có nhiều tài nguyên hơn bạn cần. Nhưng nó rất dễ sử dụng và nó được ghi chép lại rất tốt đến nỗi tôi sẽ không đề xuất những thứ khác để bắt đầu. Sau khi thực hiện hướng dẫn cơ bản của cả hai (Django, Extjs), bạn có đủ thông tin để hoàn thành nhiệm vụ được nêu trong câu hỏi. Sau này bạn có thể thử các tùy chọn khác.

Btw, Extjs nếu chỉ miễn phí cho các dự án nguồn mở, hãy tính đến điều đó.

Btw2, để chạy khung python trên máy chủ, bạn sẽ cần một máy chủ web với wsgi. Lựa chọn của tôi là Nginx + uwsgi. Hãy xem phần triển khai của tài liệu django.


6

Đề xuất Flask của Pablo ( http://flask.pocoo.org/ ) là đúng. Trừ khi bạn có các yêu cầu không được đề cập khác, Django là quá mức cần thiết.

Sử dụng jQuery.post để gửi chuỗi GeoJSON của bạn đến ứng dụng Flask, nơi bạn giải mã nó bằng json.loads. Shapely ( https://pypi.python.org/pypi/Shapely ) sử dụng đơn giản hơn nhiều so với các ràng buộc Python của OGR và có 2 chức năng dành riêng cho việc tuần tự hóa GeoJSON, vì vậy hãy sử dụng nó để vận hành trên hình học GeoJSON của bạn. Nói rằng bạn chỉ muốn "làm sạch" hình học:

import json
from shapely.geometry import mapping, shape

# 'data' is a GeoJSON string.
geom = shape(json.loads(data))

# The 0 buffer cleaning trick.
cleaned = geom.buffer(0.0)

return json.dumps(mapping(cleaned))

Trong cuộc gọi lại thành công của jQuery.post, bạn nhận được GeoJSON trả về và làm bất cứ điều gì bạn muốn: hiển thị một thông báo, vẽ lại tính năng, bất cứ điều gì.


Cảm ơn lời khuyên của bạn. Kịch bản python của tôi đã sử dụng các ràng buộc Python của OGR. Vì vậy, tôi nghĩ rằng tôi sẽ xem xét jQuery ở phía Máy khách và Flask, như bạn đã đề xuất, ở phía Máy chủ. Tôi sẽ sử dụng các ràng buộc Python của OGR để xử lý chuỗi GeoJSON bên trong tập lệnh python của tôi (nó có trình điều khiển GeoJSON).
ustroetz

Sử dụng trình điều khiển GeoJSON của OGR thay vì mô-đun json tích hợp và tốt hơn của Python không phải là một ý tưởng hay.
sgillies

Tôi muốn xử lý chuỗi GeoJSON với OGR. Vì vậy, tôi nghĩ rằng nó có ý nghĩa. Nhưng tôi sẽ thấy một khi tôi nhận được nó.
ustroetz

1

Đối với biểu diễn hình học ở phía máy khách , OpenLayers có khả năng đọc / ghi dữ liệu theo định dạng và phép chiếu được chỉ định thông qua lớp OpenLayers.Format như được mô tả ở đây. Tôi đề xuất định dạng GeoJSON cho các hoạt động vector như thế này.

Trong liên kết ví dụ của bạn, hình học được đọc, ứng dụng của bạn sẽ xem xét tính năng / vectơ

Đối với phía máy chủ, như Pablo đề xuất , có một số ràng buộc cho khung django cho python.

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.