2012-02-09 28 views
13

Có thể ghi đè lên nguồn của ô mà MapView Android hiển thị không?Ghi đè nguồn Tile MapView?

Tôi có một số hình ảnh bản đồ trong một cơ sở dữ liệu và muốn sử dụng bản đồ Google MapView để xem chúng.

Ngoài ra, nếu điều này là không thể ... có ai biết MapView cho phép điều này không? (API OpenStreetMap ... API MapQuest ... vv)

Tôi đang tìm một giải pháp không dựa vào GPL/LGPL.

Trả lời

5

Bạn có thể sử dụng một số thư viện sau: osmdroid, mapsforge. Cả hai đều cung cấp giao diện cho một số cơ sở dữ liệu bản đồ internet và cho phép tạo nhà cung cấp bản đồ của riêng bạn.

Chúng cho phép bạn có (và xử lý) bộ đệm ẩn ngoại tuyến, tải bản đồ không đồng bộ động, định lại kích thước, thêm lớp phủ, v.v., như MapView gốc. Một điểm tốt khác của việc sử dụng các thư viện này là chúng được thiết kế tốt để thay thế tại chỗ MapView của Google.

Bạn cũng có thể quan tâm đến bản đồ Javascript của Google api, cũng cho phép sử dụng nguồn bản đồ tùy chỉnh (xem this link). Cách tiếp cận này có thể được sử dụng với tải bản đồ vào WebView của bạn. Nhưng trong trường hợp này, bạn vẫn cần có khóa API Maps của Google và tôi đang chống đỡ rằng bạn sẽ vẫn bị giới hạn trong 25000 tập quán mỗi ngày.

CẬP NHẬT == ==

Bây giờ, Google Maps dành cho Android (mà một trong dịch vụ Google Play) hỗ trợ gạch tùy chỉnh, vì vậy không có nhiều nhu cầu sử dụng thư viện của bên thứ 3 để áp dụng bạn sở hữu gạch (nếu thỏa thuận cấp phép sử dụng đáp ứng).

+0

Cảm ơn bạn đã trả lời. Thật không may cả hai osmdroid và mapsforge sử dụng giấy phép LGPL, mà tôi đã hy vọng để tránh. Tôi sẽ xem xét api bản đồ javascript mặc dù. Cảm ơn! – Matt

+0

Lưu ý rằng nếu bạn có thể sử dụng thư viện LGPL mà không cần mở mã, cho đến khi ứng dụng của bạn không phải là công việc phái sinh. Rất nhiều ứng dụng thương mại sử dụng thư viện LGPL (chẳng hạn như khung Qt). – OleGG

+1

Ngoài ra (nếu chúng ta đang nói về giấy phép không GPL), có khung công tác mới dựa trên JS Leaflet (http://leaflet.cloudmade.com/). Như đã nói trên trang web, nó được tối ưu hóa tốt để sử dụng trên thiết bị di động, nhưng tôi chưa thử nghiệm nó. – OleGG

3

Bạn có thể tạo TileProvider để trả lại các lát cho API Maps. Sau đó, sử dụng setMapType để đặt MAP_TYPE_NONE và chỉ các ô bạn cung cấp mới hiển thị. Tôi biết điều này có thể được thực hiện cho một MapFragment, nhưng đã không thử nó với một MapView.

Xem mã mẫu từ Google trong MapDemo TileOverlayDemo để biết ví dụ.