2012-06-04 59 views
0

我使用Openstreetmaps和OsmDroid構建了一個包含離線地圖數據的Android應用程序。在具有MDPI 320x480像素的設備上,地圖看起來不錯,但在具有480x800像素HDPI屏幕的設備上,街道名稱很小,閱讀起來有點困難。我的地圖數據直到縮放級別18(我可以下載並使用Mapnik tile源代碼的最大值)從SD卡加載爲zip文件。我的本地地圖來自布魯塞爾(比利時)的明確區域。街道名openstreetmaps在Android上更具可讀性

的MDPI裝置的屏幕截圖與320x480像素:

enter image description here

的華電國際設備與480x800像素的屏幕截圖:

enter image description here

如果你看到在應用這些意見在設備上,MDPI地圖具有良好的可讀性,在HDPI地圖中,街道名稱更小。

有沒有辦法讓街道名稱在HDPI設備上更具可讀性,所以用戶有這樣的想法,他在地圖上放大了一步?因爲無法進入縮放級別19,因爲它沒有openstreetmaps數據。因此,一個小巧的解決方案,具有簡單且小巧的實施時間/工作方式,對我來說我可以。縮放現在通過在地圖上滑動來完成。如果您還需要代碼,請告訴我,我會發布它。

在此先感謝。

Kr

回答

4

Osmdroid使用靜態PNG圖片。您無法更改平鋪圖像。如果您想擁有更好的地圖解決方案,請嘗試MapsForge。這個應用程序/庫可以處理地圖數據並動態呈現它們。通過這種方式,您可以更好地控制渲染地圖,並且可以自定義其文本,字體和顏色。

+0

Thnx爲您的偉大答案! MapsForge確實比OSMDroid更好。花了一些時間讓街道名稱更具可讀性,但現在一切正常。同時,使用MapsForge的地圖數據大小縮小了50倍,因此我不需要地圖數據的擴展文件! Thnx很多人,你太棒了! –

+0

感謝MapsForge的作者! –

+0

@pinyin_samu你是如何使mapforge變得更大的街道名稱? – bk138

3

在這個答案中我會解釋一點,我是如何改變街道名稱的大小。

在MapsForge的jar文件中有一個xml文件,它將被用於渲染地圖數據。您也可以通過檢查服務器的源代碼來下載此文件:http://mapsforge.googlecode.com或從此處下載xml文件本身:http://mapsforge.googlecode.com/svn/trunk/mapsforge-render-theme/src/main/resources/osmarender/osmarender.xml。所以,你有一個基本的調整你自己的渲染文件。我tweeked像這樣一點:

(對XML文件的片段):

enter image description here

在MapsForgeRenderThemeAPI頁的維基頁面(上面的網站上),你可以找到如何調整您自己的渲染文件以及規則元素中的e,k,v屬性的含義。正如你所看到的,在規則元素之下的某個地方有一個規則元素,其中規則元素爲e =「way」,k =「area」,v =「〜| no | false」。該元素下的每個規則元素都有一個e =「way」,k =「highway」,v值等於openstreetmap參數。當您登錄openstreetmap.org的編輯頁面時,您可以找到想要調整名稱的街道類型。

現在我要告訴你如何確定特定類型街道的字體大小。作爲一個例子,我將採取三級公路要素。每一種方式統治元素包含像這樣的代碼:

<rule e="way" k="highway" v="tertiary"> 
    <line stroke="#ffff90" stroke-width="1.5" /> 
    <rule e="way" k="*" v="*" zoom-min="14"> 
     <pathText k="name" font-style="bold" font-size="32" stroke="#ffff90" stroke-width="2.0" /> 
    </rule> 
</rule> 

線元素指定如何在街上會被顯示(顏色,寬度,黑色邊框,...)。 這裏還有一個規則元素,裏面包含一個pathText元素。此元素指定文本在筆畫(顏色,寬度,字體大小等)內的顯示方式。所以,這是我們需要的元素!在我的示例中,如您所見,三級道路的街道名稱的字體大小將以32像素的大小顯示,放大級別爲14或更高。

現在,我們希望用我們自己的渲染主題的XML文件:

我已經添加了我自己的渲染XML文件在我的項目的資產文件夾。比起t啓動時間,我將文件複製到一個可以在需要時從中讀出的位置。在你處理你mapsforge地圖的活動,您只需要通過實現這樣的(例子)代碼鏈接到本文件:

File f = new File(Environment.getExternalStorageDirectory(), myRenderTheme.xml); 
mapView.setRenderTheme(f); 

注意setRenderTheme(文件)將拋出一個FileNotFoundException異常。

所以,這是所有使用mapsforge更改街道名稱。你可以渲染你的整個地圖,只要你想!

感謝MapsForge開發社區。

玩得開心!

Kr