Τετάρτη 14 Οκτωβρίου 2015

osmdroid Implementation (Open Street Maps on Android)


Implementing osmdroid 


Πρώτα πρέπει να τροποποιήσουμε λίγο το αρχείο AndroidManifest και να προσθέσουμε κάποια permissions:

 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.osmdroid"
    android:versionCode="1"
    android:versionName="1.0">

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  

    <uses-feature android:name="android.hardware.location.network" />
    <uses-feature android:name="android.hardware.location.gps" />
    <uses-feature android:name="android.hardware.wifi" />

    <application
       ......... "as it is"
    </application>

</manifest>

Τροποποίηση του βασικου αρχείου xml

main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

  <org.osmdroid.views.MapView
        android:id="@+id/openmapview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>



</FrameLayout>

Βιβλιοθήκες που πρέπει να προστεθουν στο πρόγραμμα στο φάκελο libs είναι οι εξής:
 
osmdroid-android-3.0.10.jar
slf4j-android-1.5.8.jar
osmdroid-third-party-3.0.10.jar
osmdroid-packager-3.0.10.jar


 Στο andoid studio η μορφή που πρέπει να έχει το αρχείο build.gradle ειναι η εξής:

apply plugin: 'com.android.application'

android {
//Εδώ μπορείται να το πειράξεται και να στοχεύεται σε διαφορετικές εκδόσεις sdk
    compileSdkVersion 21
    buildToolsVersion '22.0.0'

    defaultConfig {
        applicationId "com.example.osmdroid"
        minSdkVersion 21
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile files('libs/slf4j-android-1.5.8.jar')
    compile files('libs/osmdroid-android-3.0.10.jar')
    compile files('libs/osmdroid-packager-3.0.10.jar')
    compile files('libs/osmdroid-third-party-3.0.10.jar')


}

 Αυτο είναι το αρχειο main.java στην συγκεκριμένη περίπτωση κανει extend μια Activity αν χρειάζεται να κάνει extend ενα Fragment χρειάζεται ελάχιστα διαφορετικός κώδικας.


package com.example.osmdroid;

import android.annotation.TargetApi;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.views.MapController;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.MyLocationOverlay;


public class main extends Activity {


    private  MapView openMapView;
    private MapController mMapController;
    private MyLocationOverlay  myLocationoverlay;


    @Override    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

setContentView = (R.id.main);
        openMapView = (MapView)this.findViewById(R.id.openmapview);
        openMapView.setUseSafeCanvas(true);
        openMapView.setMultiTouchControls(true);


    
        //the way we get the tiles 
 openMapView.setTileSource(TileSourceFactory.MAPQUESTOSM);
        mMapController = (MapController) openMapView.getController();
        openMapView.setBuiltInZoomControls(true);

        mMapController.setZoom(14);

        // My Location Overlay 
 myLocationoverlay = new MyLocationOverlay(getActivity(),
 openMapView);
        myLocationoverlay.enableMyLocation(); // not on by default
        myLocationoverlay.enableCompass();
        myLocationoverlay.setDrawAccuracyEnabled(true);


        myLocationoverlay.runOnFirstFix(new Runnable() {
            public void run() {
                mMapController.animateTo
(myLocationoverlay.getMyLocation());
            }
        });

        openMapView.getOverlays().add(myLocationoverlay);

      


    }

    @Override    public void onResume() {
        // TODO Auto-generated method stub        super.onResume();
        myLocationoverlay.enableMyLocation();
        myLocationoverlay.enableFollowLocation();
    }

    @Override    public void onPause() {
        // TODO Auto-generated method stub        super.onPause();
        myLocationoverlay.disableMyLocation();
        myLocationoverlay.disableFollowLocation();
    }

    }

Donate for this tutorial









Δεν υπάρχουν σχόλια: