2015年5月22日 星期五

OSMDROID: MapController


介紹Introduction


  MapController拆開來是 Map Controller但是雖然說是Controller但是能控制的真的還蠻有限的...當然這個類別只是讓一些操作比較容易一點,所以如果你想直接操作MapView的話也是可以。在MapController中主要就是在設定啟動時的Map Center與設定Map的Zoom Level,還有就是縮放特效的調整。

方法介紹Method Introduction


設定螢幕正中央的經緯度
GeoPoint startPoint = new GeoPoint(latitude, longitude);//GeoPoint(緯度y,經度x)
mapController.setCenter(startPoint);
地圖Zoom Level設定(通常值是介於1~18,這取決於圖資所能提供的Zoom Level來決定,值越大就越多細節)
mapController.setZoom(12); //將Zoom Level設定在12
縮放動畫設定
mapController.stopAnimation(true);//停止動畫效果
mapController.stopAnimation(false);//開啟動畫效果

2015年5月10日 星期日

OSMDROID:MapView


簡介


  OpenStreetMap最核心的部分,就是他的地圖囉,而在OSMDROID中當然也會有個東西用來顯示地圖的元件,那就是我們現在要來介紹的MapView
OSMDROID的MapView是改寫Android本身的MapView,簡單來說就是把原本是Google Map的MapView變成是OpenStreetMap的。

使用方式


OSMDROID中用MapView有兩種方式,一種是寫在Layout裡面,一種是寫在Activity裡面 首先先介紹如果寫在Layout裡面會是什麼樣子
<org.osmdroid.views.MapView
        android:id="@+id/mapview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tilesource="Mapnik"
        />

然後是Activity中的寫法
public class MainActivity extends Activity {
    @Override public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        MapView map = (MapView) findViewById(R.id.map);
        map.setTileSource(TileSourceFactory.MAPNIK);
    }
}

這兩種寫法都很棒,就看個人習慣囉

另外MapView還有提供一些其他的方法,像是
這是在MapView上新增內建的縮放工具
map.setBuiltInZoomControls(true);

這個是啟用兩指縮放功能
map.setMultiTouchControls(true);

這是限制最大縮放等級
map.setMaxZoomLevel(16);
這是限制最小縮放等級
map.setMinZoomLevel(1);
這個是在設定說是否當本機沒有圖資時,允許讓MapView去跟Tile Server要圖資
map.useDataConnection(true);
最後這個是個很重要的東西,因為Android能支援的螢幕解析度太多了,但圖資的解析度是固定的,所以可能會出現到明明Zoom Level已經到最細緻的部分了,但還是沒辦法看到全部的東西,所以OSMDROID中提供這個方法可以根據手機的螢幕解析度去將圖資做一些調整,讓圖資顯示正常。
map.setTilesScaledToDpi(true);

2015年5月6日 星期三

OSMDROID: Introduction



簡介  Introduction

OSMDROID是一個Android的函式庫,主要目的是要提供與OpenStreetMap(簡稱OSM)互動的工具,裡面包含了:


MapView

    提供一個類似Android中MapView的環境,讓OSM的圖資可以顯示在Android中,並可以做拖拉,縮放,圖資來源設定等動作。
MapController

    這是個設定工具,也就是對於MapView的Zoom Level與起始位置做設定。
TileProvider

    TileProvider主要是負責MapView圖資的部分,OSMDROID本身的MapView是需要給他一個圖資來源才能運作的,而提供圖資這個部分就是TileProvider的工作。
Overlay

    Overlay照字面上就是圖層,在OSMDROID中底層是MapView,但如果我們需要去新增一些事件, 要繪製矩形區域, 放置指標等行為就會需要去新增一個圖層定義其行為模式。



安裝  Install

  1. 使用Android Studio

    Android Studio真的是個很棒的工具,因為在安裝Library上面真的非常的方便,像OSMDROID你只需要在專案中建立一個libs的資料夾,然後把osmdroid的jar檔跟slf4j-android(載點)放進去就可以囉
    p.s 如果你發現你放進去了但是卻不能使用的話,請檢查一下專案中的build.gradle中的dependencies大括號裡面有沒有 compile fileTree(dir: 'libs', include: ['*.jar']) 這行,如果沒有補上去之後Sync就會正常了。
  2. 使用Maven


    <dependency>
      <groupid>org.osmdroid</groupid>
      <artifactid>osmdroid-android</artifactid>
      <version>4.3</version>
    </dependency>
    


    <dependency>
        <groupid>org.slf4j</groupid>
        <artifactid>slf4j-android</artifactid>
        <version>1.6.1-RC1</version> 
    </dependency>
    

    放進Maven設定檔中就可以囉。
  3. 使用Eclipse

    OSMDROID的Jar檔跟slf4j-android(載點)下載好,之後
    對著專案點右鍵 內容(Properties) > Java Build Path > Add External JARs > 選擇剛下載的OSMDROID跟slf4j-android > 確定 這樣就完成囉。
最後記得別忘了在AndroidManifest.xml中把這幾行權限加進去喔
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


下載  Download


    你們可以從(網址)取得最新版本(OSMDROID在Google Code上面也有上傳相關的檔案,但是版本到4.2就停止更新了)
當你進去的時候你會發現有三種不同的檔名,分別是:

  1. osmdroid-android-x.x-javadoc.jar

        這個裡面存放的是OSMDROID這個版本中的所有API的說明,解壓縮之後裡面會是個網站,點擊index.html之後你就會看到















    這個漂亮的網站囉~
  2. osmdroid-android-x.x-sources.jar

        這個檔案中存放的就是完整OSMDROID的原始碼,也就是可以讓你離線也能查閱原始碼喔,當然如果你喜歡線上版的你也可以參閱他們Github的專案
  3. osmdroid-android-x.x.jar

        這個就是我們要放在我們專案中的jar檔囉,裡面放了全部OSMDROID編譯過的檔案,讓我們可以在我們的程式中使用。