Tạo bản đồ tương tác không có máy chủ


8

Tôi đã quản lý để xây dựng một ứng dụng bản đồ web tuyệt vời bằng cách sử dụng các ô được tạo từ GeoWebCache và một lưới tùy chỉnh, nhưng bây giờ tôi cần thêm lớp phủ vào các bản đồ cơ sở. Tương tác duy nhất tôi cần là một cửa sổ thông tin bật lên đơn giản chỉ đến từ một trong các thuộc tính.

Theo mặc định, tập dữ liệu lớp phủ là Shapefile ESRI là 180Mb, từ đó tôi đã quản lý để đơn giản hóa tập dữ liệu bằng ST_SimplifyPreserverTopology đã giảm kích thước ESRI Shapefile xuống còn 28Mb. Tuy nhiên, là một tệp GeoJSON, đây vẫn là 78Mb, quá lớn.

Sau đó, tôi đã thử CartoDB và tải dữ liệu vào một bảng và sau đó thêm vectơ trong trình mở nhưng khối lượng dữ liệu vẫn quá lớn và trang HTML bị hỏng.

Sau đó, tôi đã dùng thử Cloud Cloud và WMS bên ngoài nhưng điều đó bị giới hạn ở WGS84 và không có tùy chọn thông tin getfeature.

Sau đó tôi bắt đầu xem Topojson mà tôi nghĩ sẽ hoạt động rất tốt trên tập dữ liệu của mình nhưng tôi không nghĩ có cách nào để tải topojson lên bản đồ trong OpenLayers 2.12 mà tôi cần sử dụng.

Tùy chọn khác của tôi là UTF-Grid, vì vậy tôi đã tải dữ liệu vào tilemill và xuất một MbTiles mà tôi có thể trích xuất bằng mbutil. Nhưng tất nhiên UTF-Grid chỉ hỗ trợ EPSG: 3857 (web mercator) khác với dự đoán của tôi, EPSG: 27700. Vì vậy, tất cả các tệp .json được đặt tên khác với các ô được lưu trong bộ nhớ cache bên dưới của tôi từ geowebcache.

Có cách nào để tạo UTF-Grid nhưng trong một phép chiếu khác không?

Vì vậy, đó là nền tảng và cảm thấy rằng tôi đã thử hầu hết các tùy chọn mà tôi biết.

Vì vậy, đơn giản là tôi cần một lớp phủ tương tác trong bản đồ OpenLayers 2.12 nhưng tôi không thể sử dụng bất kỳ máy chủ nào như GeoServer / Mapserver hoặc TileStache, v.v. và tôi không thể có bất kỳ kịch bản phía máy chủ nào như PHP.

Bất cứ ai có thể cung cấp bất kỳ lời khuyên khác ??

Cảm ơn


topojson sẽ hoạt động tốt với openlayers 2.10 (bạn thực sự chuyển đổi topojson thành Geojson trước khi sử dụng nó). Nhưng nó sẽ không giải quyết được vấn đề của bạn vì nó vẫn còn quá lớn để xử lý trong hầu hết các trình duyệt.
johanvdw

thử d3js bl.ocks.org/mbostock/4965422 797M shapefile cho các khu vực lập bảng mã quốc gia. Đơn giản hóa bằng cách sử dụng TopoJSON (với -q 1e5 -s 3e-7)
Mapperz

@Mapperz đó là một sự giảm kích thước ấn tượng. Topojson có thể ở một hình chiếu khác với thủy ngân hình cầu không?
tjmgis

@johanvdw bạn có ví dụ về topojson được tải vào openlayers không?
tjmgis

Câu trả lời:


3

Mở rộng nhận xét ban đầu của tôi:

Topojson có thể hoạt động tốt với openlayers 2.10 (bạn thực sự chuyển đổi topojson thành Geojson trước khi sử dụng nó). Nhưng tôi không chắc nó sẽ giải quyết vấn đề của bạn vì nó có thể vẫn còn quá lớn để xử lý trong hầu hết các trình duyệt. Một ví dụ về việc sử dụng topojson trong openlayers 2, dựa trên ví dụ Geojson openlayers và một số dữ liệu tôi đã sử dụng trong một bài đăng trên blog .

http://www.gisky.be/cyclists/ol-topojson.html

Bit thực tế quan trọng chỉ là dòng thứ hai:

    $.getJSON('http://www.gisky.be/cyclists/f.json', function (data) {
        fusiegem = topojson.feature(data, data.objects.fusie);
        var geojson_format = new OpenLayers.Format.GeoJSON();
        var vector_layer = new OpenLayers.Layer.Vector();
        map.addLayer(vector_layer);
        vector_layer.addFeatures(geojson_format.read(fusiegem));
    });

Dòng này xây dựng một đối tượng Geojson (fusiegem) từ đối tượng dữ liệu là topojson.


@johanvwd đã thất bại trong việc sử dụng D3 và topojson sẽ đưa ra ví dụ của bạn. Cảm ơn rất nhiều vì đã thêm mã
tjmgis

@johanvwd Tôi đã sửa đổi mã của bạn và nó đã hoạt động thành công nhưng tốc độ rất chậm ngay cả trên topojson 1,4Mb, chứ chưa nói đến mã cần sử dụng là 8Mb. Còn suy nghĩ nào khác không ??
tjmgis

Tôi đoán điều duy nhất còn lại phải làm là thực hiện khái quát hơn về quy mô tổng quan và làm việc với gạch cho quy mô thấp hơn. Tuy nhiên, tôi biết không có công cụ để thực hiện công việc đó. Tôi chắc rằng chúng sẽ xuất hiện trong tương lai gần hoặc có lẽ đã tồn tại.
johanvdw

1

Điều này nghe có vẻ như một công việc cho D3 - http://bl.ocks.org/mbertrand/5218300


D3 sẽ giúp giải quyết vấn đề như thế nào?
johanvdw

@ChrisInCambo - cảm ơn rất nhiều về ví dụ thực hiện chính xác những gì tôi đang theo đuổi nhưng đã đấu tranh để D3 và topojson của tôi hoạt động, vì vậy đã đăng một câu hỏi khác
tjmgis

Lỗi phổ biến với TopoJSON là không nhìn vào bên trong JSON và hiểu cấu trúc của nó khi sử dụng nó với D3. Nếu bạn sao chép mã ví dụ và thay thế TopoJSON của họ bằng mã của bạn, bạn cần đảm bảo rằng các đối tượng được tham chiếu trong TopoJSON cũng thực sự tồn tại trong JSON của bạn.
ChrisInCambo

1

Bạn có thể chia dữ liệu thành các tệp GeoJSON và đặt tên chúng theo ô. Khi bản đồ tải, bạn có thể truy vấn các ô hiển thị và sử dụng tên / url / tọa độ của chúng để yêu cầu các tệp GeoJSON phù hợp, khớp với một tệp trên mỗi ô.

Phần khó là tạo các tập tin. Đối với điều này, bạn chắc chắn cần phải sử dụng một công cụ. Khi các tệp được tạo, chúng sẽ được tải khi chúng cần thiết và trong các phần nhỏ như vậy chúng sẽ không áp đảo trình duyệt. Một nỗi đau khác ở đây là đối phó với mức độ phóng to. Bạn sẽ phải quyết định các tính năng có thể nhìn thấy từ cấp độ nào và tạo các tệp của bạn phù hợp.

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.