2012-10-19 34 views
9

Tôi hiện đang làm việc trong một dự án trường học và tôi đang cố gắng tìm hiểu các kỹ thuật tải xuống bản đồ OSM vào bộ nhớ cục bộ/bộ nhớ cục bộ của điện thoại để người dùng có thể xem bản đồ khi ngoại tuyến .Tải xuống các bản đồ cụ thể về bộ nhớ cache trong OSMDroid

Việc này được thực hiện bằng cách đặt vị trí cụ thể và các ô bản đồ nằm trong bán kính/khoảng cách cụ thể từ vị trí sẽ được tải xuống bộ nhớ điện thoại (khi có kết nối trực tuyến) để hiển thị ngoại tuyến.

Tuy nhiên, tôi gặp một số vấn đề nhỏ trong việc hiểu các API của OSMDroid. Từ hiểu biết của tôi, có vẻ như các lớp tham gia là:

hãy làm đúng cho tôi nếu tôi là nhầm lẫn.

Ngoài ra, trong MapTileBase (mà tôi tin là nhà cung cấp), getMapTile trả về android.graphics.drawable.Drawable.

Lớp học có thể vẽ này thậm chí có liên quan đến khái niệm hiển thị bản đồ ngoại tuyến không?

Hope ai đó có thể soi sáng cho tôi vào nơi chính xác bản đồ đang được kêu gọi để được tải vào bộ nhớ của điện thoại, và làm thế nào chúng ta có thể chỉnh sửa bản đồ để hiển thị các mục giao diện như các tuyến đường, chân vv

+1

thể trùng lặp của [Tải về bản đồ cho osmdroid] (http://stackoverflow.com/questions/22862534/download-maps-for-osmdroid) – yochannah

Trả lời

1

I don' t có một câu trả lời chính xác khi bạn đang tìm kiếm một phương pháp để lưu trữ ngoại tuyến bên ngoài một khu vực mà MapView chưa điều hướng đến. Việc xây dựng trong bộ nhớ đệm hỗ trợ là có, nhưng không chính xác như thế nào bạn muốn làm điều đó.

Bạn sẽ cần khả năng tải xuống trực tuyến nếu bạn định lưu vào bộ nhớ cache chứ không chỉ cung cấp các lát bản đồ ngoại tuyến của riêng bạn. Tôi sẽ xem xét MapTileDownloader và có thể thử triển khai phiên bản của riêng bạn. Phương thức MapTileDownloader.TileLoader.loadTile() lấy một MapTileRequestState mà tôi tin rằng các MapTileProviderArray gọi khi một lát bản đồ là cần thiết.

Nếu bạn có thể sao chép chức năng TileLoader hiện tại của MapTileDownloader, có thể bạn có thể tiêm MapTileRequestState tương đối của riêng bạn hoặc thẳng MapTile theo yêu cầu. ví dụ. Lấy TileLoader gọi là MapTileRequestState, kiểm tra nó, tìm ra cách xây dựng các MapTileRequestState/MapTile mới đại diện cho các tile bên ngoài khung nhìn hiện tại. Nó sẽ không dễ dàng vì bạn sẽ phải đối phó với các mức thu phóng khác nhau, và tùy thuộc vào mức thu phóng, bán kính phải nhỏ hơn, vv ... Mức thu phóng thấp hơn là 18 sẽ có bán kính lớn hơn cao hơn 10.

Cá nhân tôi gần đây đã cố gắng làm việc 100% ngoại tuyến nên tôi không có bất kỳ mã ví dụ nào để trợ giúp. Chúc may mắn mặc dù nó đã được một vài tháng.

+2

Cám ơn đầu vào anyway =) Tôi đã giải quyết vấn đề này thông qua tải xuống MapTiles cụ thể và nén chúng trong điện thoại để hiển thị ngoại tuyến. Tôi đã quản lý để tải xuống hoạt động với một mức thu phóng nhưng lại gặp sự cố với nhiều mức thu phóng [ở đây] (http://stackoverflow.com/questions/13930364/asynctask-not-executing-properly-according-to-logic) – lyk

+0

Điều đó quá tệ. Tôi đã gạch ngoại tuyến chỉ hoạt động gần đây với OSMDroid MapView được tạo từ activity_main.xml thay vì hàm tạo onCreate() thông thường: http://stackoverflow.com/questions/13894267/how-to-add-a-sliding -xét-a-mapview-view-thats-created-programmatically – garlicman

0

Trước tiên, hãy ngay nguồn https://github.com/osmdroid/osmdroid

Có một vài bài viết wiki mà sẽ giúp đỡ, đặc biệt là gạch bản đồ ngoại tuyến bài viết. Tóm lại, sử dụng MOBAC hoặc công cụ osmdroid cung cấp. OSMBonuspack cũng có một công cụ để thực hiện nhiệm vụ tương tự trên thiết bị.

Map gạch đang thực sự được tải về sử dụng lớp này https://github.com/osmdroid/osmdroid/blob/master/osmdroid-android/src/main/java/org/osmdroid/tileprovider/modules/MapTileDownloader.java

Các vấn đề liên quan