API web Javascript tốt (tốt nhất là mở) để xây dựng bản đồ web yêu cầu ít / không cần bảo trì là gì?


11

Gần đây tôi đã tình nguyện làm một bản đồ web cho một tổ chức phi lợi nhuận địa phương. Bản đồ sẽ khá cơ bản. Nó cần hiển thị quận Lane, Oregon được chia thành nhiều quận, với vị trí "văn phòng trung tâm" cho mỗi quận. Tôi dự định xây dựng nó trong thời gian rảnh rỗi vào mùa hè và tôi muốn có thể giao nó cho họ với rất ít rủi ro về việc nó cần bất kỳ loại bảo trì nào trong tương lai.

Tôi đã xây dựng một số bản đồ web bằng API Javascript ArcGIS với ArcGIS Server, nhưng tôi dự định học một API khác vì tổ chức này không có bất kỳ phần mềm ESRI nào (hoặc bất kỳ phần mềm GIS nào cho vấn đề đó). Tôi đã xem xét OpenLayers / OpenGeo. Một lưu ý là tổ chức này không / sẽ không có máy chủ được thiết lập để lưu trữ các lớp của bản đồ này nên tôi không chắc mình sẽ lưu trữ và truy cập dữ liệu như thế nào. JSON có thể?

Tôi hiện không quen thuộc với hầu hết các giải pháp không phải ArcGIS, vì vậy mọi lời khuyên sẽ được đánh giá cao.

Câu trả lời:


4

Bạn chỉ có thể mã hóa các tính năng của mình thành Javascript như trong ví dụ OpenLayers này: http://openlayers.org/dev/examples/vector-features.html . Không cần phải bận tâm về việc lưu trữ dữ liệu hơn nữa. Tất nhiên đây chỉ là một tùy chọn nếu bạn có ít tính năng để hiển thị. Nhưng đó là giải pháp "một tập tin" mà bất kỳ nhà bảo trì nào trong tương lai cũng có thể tìm ra.

Nếu bạn có thể xuất đa giác của mình sang shapefile, QGIS có thể giúp "trích xuất các nút" mà sau đó bạn có thể sử dụng để tạo Đa giác trong OpenLayers như thế này:

// create a polygon feature from a linear ring of points
var pointList = [new OpenLayers.Geometry.Point(x1,y1),new OpenLayers.Geometry.Point(x2,y2),<<<more points>>>];
var linearRing = new OpenLayers.Geometry.LinearRing(pointList);
var polygonFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Polygon([linearRing]));

Nếu bạn muốn phủ các đa giác đó lên trên Google Maps hoặc tương tự, trước tiên bạn có thể muốn chuyển hướng đa giác thành trình chiếu Web Mercator.


Cảm ơn! Điều này có vẻ như nó có thể là những gì tôi cần, miễn là tôi không có quá nhiều tính năng. Tôi se thử no. Tôi chỉ cần tìm ra cách xuất lớp tính năng đa giác quận hiện tại của mình vào các giá trị được mã hóa cứng này.
Tanner

1
@Tanner: Bạn có thể sử dụng GDAL / OGR để chuyển đổi sang GeoJSON. Ít nhất, hãy cung cấp cho họ một Cloudcraft, Google Maps, Yahoo! Lớp cơ sở Bản đồ hoặc Bing Maps trong OpenLayers. Tôi ghét âm thanh như tôi đang đẩy mạnh các dịch vụ thương mại nhưng có vẻ như bạn đang sử dụng công nghệ mở vì lợi ích của công nghệ mở. Cung cấp cho org một bản đồ tìm kiếm phong nha.
Sean

@Tanner: Định dạng nào bạn có dữ liệu quận của bạn?
underdark

Lớp tính năng đa giác ArcGIS.
Tanner

@Sean: Cảm ơn vì lời khuyên. Tôi sẽ kiểm tra GDAL / OGR. Vì đây là một dự án tình nguyện, nên (hy vọng) là một thỏa thuận một lần. Tôi không muốn phải quay lại với nó. Mối quan tâm chính là tạo ra một bản đồ web đơn giản có thể được lưu trữ trên trang web của họ mà không yêu cầu bất kỳ phần mềm máy chủ nào (như MapServer) và ít có khả năng bị hỏng bất cứ lúc nào. Nếu một lớp cơ sở thương mại / API có thể cung cấp điều này, tôi sẽ xem xét nó. Ít nhất tôi có thể sẽ sử dụng một lớp cơ sở thương mại.
Tanner

10

Đối với giải pháp ánh xạ nguồn mở, bạn có thể xem xét như sau:

  1. Nền tảng máy chủ ánh xạ - Nguồn mở và dựa trên Java GeoServer. Hoạt động tốt trong nhiều môi trường sản xuất: Kiểm tra: http://geoserver.org/display/GEOS/Welcome Hướng dẫn sử dụng: http://docs.geoserver.org/ sóng / en / user /

    Tùy chọn khác sẽ là MapServer: http://mapserver.org/

    Kiểm tra so sánh: http://www.sl slideshoware.net/novum.limitis/mapserver-vs-geoserver

  2. Phía khách hàng - kịch bản trang web. Openlayers thích hợp nhất để bắt đầu càng nhiều ví dụ và cũng dễ thực hiện. Kiểm tra: http://openlayers.org/ Ví dụ: http://openlayers.org/dev/examples/

  3. Dữ liệu không gian: Bạn có thể đi với bản đồ Google / Yahoo / Bing dựa trên các điều khoản và điều kiện và giấy phép của họ. Hoặc Bản đồ OpenStreet mà bạn có thể xuất bản trong GeoServer và sử dụng nó. Bản đồ OpenStreet: http://www.openstreetmap.org/ Các tệp hình dạng bản đồ OpenStreet có thể được tải xuống qua: http://wiki.openstreetmap.org/wiki/Shapefiles

Nếu bạn định sử dụng bản đồ Google / Yahoo / Bing, bạn có thể sử dụng API hoặc OpenLayers của họ để sử dụng và không cần dữ liệu GeoServer và Spatial. Mặc dù câu hỏi yêu cầu API bản đồ web tốt, nền tảng Lập bản đồ và tham chiếu dữ liệu không gian được đưa ra ở trên để suy nghĩ về nền tảng ánh xạ nguồn mở hoàn toàn.


Kinda những gì tôi nói, nhưng tốt hơn đặt!
MerseyViking

3

Tôi sử dụng OpenLayers như một phần trong luận văn UG của mình và tôi không thể phạm lỗi. Vâng, tôi có thể, và tôi đã thức đến tận đêm qua để cố gắng làm cho nó hoạt động, nhưng đó hầu như là sự thiếu hiểu biết của tôi khi cố gắng kết hợp một trang web thân thiện với thiết bị di động thay vì OL per se.

Thật dễ dàng để thêm các lớp đến từ một máy chủ khác bằng WMS; Tôi có MapServer đang chạy các ô đó WMS và từ OL tôi chỉ sử dụng:

var layer = new OpenLayers.Layer.WMS(
    "Resistivity",
    "http://mywebsite.com/maps?map=amap.map",
    {'layers': 'resistivity', 'format':'image/png', 'transparent':'true'},
    {singleTile: true}
);

map.addLayer(layer);

Thật vậy, nó có thể đối phó với các máy chủ WFS và thậm chí WFS-T, và với các lớp bản đồ và ảnh OSM, Google hoặc Bing, bạn có thể có một ứng dụng bản đồ web đẹp mắt với một dấu chân nhỏ.




2

Siêu muộn đến bữa tiệc, nhưng tôi đoán rằng tôi sẽ thêm một lựa chọn khác có ý nghĩa ngày nay.

Nếu bạn không muốn lưu trữ một máy chủ nhưng bạn vẫn muốn hưởng lợi từ kiểu dáng và bộ đệm ẩn rất nhanh, tại sao không phải là Google Fusion BảngOpenlayers ? Từ blog của Allan Glenn

var proj_4326 = new OpenLayers.Projection('EPSG:4326');
var proj_900913 = new OpenLayers.Projection('EPSG:900913');
map = new OpenLayers.Map({
   div: "map",
   projection: proj_900913,
   'displayProjection': proj_4326,
   allOverlays: true
});

var osm = new OpenLayers.Layer.OSM();

var fusionLayer = new OpenLayers.Layer.OSM("Fusion Table       
Map","http://mt0.googleapis.com/mapslt?hl=en- 
US&lyrs=ft:113681&x=${x}&y=${y}&z=${z}&w=256&h=256&source=maps_api");
map.addLayers([osm,fusionLayer]);

var long=12;
var lat=56.5;

var lonlat = new OpenLayers.LonLat(long,lat).transform(map.displayProjection,
map.projection);

map.setCenter(lonlat, 6);

Bạn có thể sử dụng gdal để tải các bảng tổng hợp . Theo cách đó, bạn không phải trả giá khi phân tích hình học gejson ở phía máy khách. Chi phí này có thể dao động từ tầm thường (đối với số lượng nhỏ tính năng) đến đáng kể (đối với số lượng lớn tính năng). Nó cũng sẽ làm cho hình học của bạn nhiều


1

Dọc theo dòng câu trả lời của @ Sean, đây là câu hỏi tôi đặt ra vào tháng 10 năm ngoái và giải pháp. Tôi cũng muốn một cái gì đó có thể được truyền lại. Theo như hiển thị ranh giới quận của bạn, Fusion Table có thể làm điều đó không?


1

CloudMade , Google Maps , Yahoo! Bản đồ hoặc Bản đồ Bing . Cuối cùng, ai đó sẽ đến để giúp họ với trang web của họ và sẽ không có manh mối về OpenLayers hoặc GeoJSON. Sẽ là bằng chứng trong tương lai nhiều hơn để sử dụng một đề nghị thương mại nổi tiếng. Sẽ dễ dàng hơn cho họ khi tìm ai đó biết phải làm gì với Google Maps và nó sẽ có giao diện quen thuộc. Và, nó vẫn miễn phí cho các trang web công khai.

Hãy chắc chắn rằng bạn có được khóa API riêng của họ.


3
Câu hỏi này được gắn thẻ "nguồn mở", không bỏ phiếu vì bạn có toàn quyền đề xuất phiên bản thương mại. Chỉ cần nói rằng, với google maps, bạn sẽ cần nâng cấp mã của mình sau 3 năm bị trục xuất buộc bạn phải tiếp tục phát triển cùng một ứng dụng cho mỗi phiên bản mới của google maps api. Khi bạn phát triển với trình mở, bạn có thể tự lưu trữ thư viện bao lâu tùy thích. Bạn không phải lo lắng về bất cứ ai lật công tắc sẽ tắt dịch vụ của bạn.
CaptDragon

1
Tôi không có gì chống lại nguồn mở. Hoàn toàn ngược lại. Tôi có thể đã giải thích 'mở' một cách tự do (và tôi không coi các thẻ là hạn chế). Tuy nhiên, đối với miền vấn đề mà anh ấy đang giải quyết, các đề xuất cho OpenLayers, MapServer, GeoServer, OpenStreetMap, v.v ... về mặt kỹ thuật phức tạp hơn 99,9% nhân viên phi lợi nhuận có thể tự xử lý. Nếu anh ta muốn giúp org, anh ta nên đưa cho họ thứ gì đó họ có thể sửa hoặc dễ dàng tìm ai đó để sửa khi anh ta đi. Số người có Google Maps trong bộ kỹ năng của họ cao hơn đáng kể và sẽ không yêu cầu bất kỳ quyền truy cập máy chủ org nào.
Sean

1
Vâng, tôi không biết tại sao mọi người lại bỏ phiếu cho các câu trả lời gợi ý GeoServer & MapServer khi người hỏi đặc biệt nói rằng anh ta không thể lưu trữ bất kỳ dịch vụ bản đồ nào. : P
CaptDragon

@capdragon: Nó cũng nêu rõ trong các câu trả lời rằng GeoServer / MapServer và dữ liệu không gian là tùy chọn. Có thể tiếp tục với Openlayers mà không có chúng .. Không có hại khi cung cấp thêm thông tin phụ thuộc trong câu trả lời cho người dùng để nhận biết chúng ...
Senthil

@Senthil: đọc lại và tôi trích dẫn: "tổ chức này không / sẽ không có máy chủ được thiết lập để lưu trữ các lớp của bản đồ này". Tùy chọn thậm chí không phải là một từ trong câu hỏi.
CaptDragon

1

Có lẽ đáng để kiểm tra CartoDB:

http://cartodb.com/

đó là một dịch vụ lập bản đồ web miễn phí, mượt mà cho phép bạn dễ dàng tải và chỉnh sửa dữ liệu địa lý. Tôi không chắc họ có tùy chọn để tạo bản đồ 'riêng tư' hay không.

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.