zoukankan      html  css  js  c++  java
  • Android开发之Google Map

    2013-07-03

    Google Map 提供三种视图:

    1. 传统的矢量地图,提供行政区域、交通以及商业信息等。

    2. 不同分辨率的卫星照片,与Google Earth 基本一样。

    3. 地形地图,可以显示地形和等高线。

    Google Map的姐妹产品Google Earth是一个桌面应用程序,在三维模型上提高街景、更多的卫星视图以及GPS定位的功能。

    基于Google Earth 和 Google Map 的游戏举例:

    在全球任何地方甚至海底模拟开飞机或者潜水艇,来漫游整个世界,详见:http://www.sea-seek.com/

    在地球上任何地方开着自己喜欢的奔跑车,在自己周围以及熟悉的地方模拟驾驶,详见:http://geoquake.jp/en/webgame/DrivingSimulatorGM/

     

    手机上如何应用Google Map

    1. 我的位置

    通过识别你附近无线发射塔的信息广播确定你的位置,在地图上显示出来。通常在1000米范围之内。即使没有GPS,也可以确定位置。支持内置GPS,可以链接到蓝牙GPS传感器。

    2. 地图和卫星视图

    提供所查看地区的地图和卫星视图,其界面使用感觉与在台式机上相同。

    3. 商户列表

    不需要输入当前位置即可找到附近的商户。

    4. 驾车路线

    不需要输入出发点,就可方便地获得驾车路线,其中会清楚地标明每次转弯。

    5. 公交换乘

    查看公交和地铁路线,确定转车路线。

    6. 路况信息

    Google Map中的公路会根据实时路况数据,以绿色、黄色或红色显示。

    7. 收藏夹

    为你常去的地方加上书签,以便能在地图上非常方便地返回到这些地方。

    使用 Android Maps API 和 Android Location API 就可以实现这些功能。

     

    准备工作

    1. 找到/下载Map扩展库:com.google.android.maps

    <ANDROID_SDK_ROOT>/add-ons/google_apis-3/libs/

    2. 申请Android Map API Key

    准备Google账号。Google账号是通用的,Gmail的账号就可以。

    当一个APP发布时必须要证明书。证明书就是MD5。

    debug版的证明书:debug.keystore

    a. 找到debug.keystore文件

    Eclipse中,Windows->Preference->Android->Build ,其中Default debug keystore的值便是debug.keystore的路径。

    b. 取得debug.keystore的MD5值

    在命令提示符下进入debug.keystore文件所在路径,执行命令:keytool –list –keystore debug.keystore ,输入keystore密码:android ,即可取得MD5值。

    c. 申请Android Map的API Key

    http://code.google.com/intl/zh-CN/android/maps-api-signup.html

    d. 记下申请的Android Map API Key值

    3. 创建基于Google APIs的AVD

    Eclipse中,AVD管理,Create AVD,Target处选择Google APIs-1.5(或其他版本)

    4. 创建基于Google APIs的Android 工程

    在创建Android工程时,Target处选择Google APIs

    在AndroidManifest.xml文件中添加权限

    <uses-library android:name=”com.google.android.maps”/>

     

    Google Map API 的使用

    Android 中定义了一个名为com.google.android.maps的包,其中包含了一系列用于在Google Map上显示、控制和层叠信息的功能类。

    MapActivity, 用于显示Google Map的Activity类,需要连接底层网络。必须被扩展并在子类onCreate()方法中创建一个MapView实例。

    MapView, 用于显示地图的View组件。派生自android.view.ViewGroup,只能在MapActivity中创建。MapView需要通过后台线程来连接网络或文件系统,这些线程由MapActivity管理。

    MapController, 用于控制地图的移动、缩放等。

    Overlay, 可显示于地图之上的可绘制的对象。

    GeoPoint, 包含经纬度位置的对象。

     

    创建MapView的两种方法:

    a. 在xml布局文件中创建MapView

    <com.google.android.maps.MapView

      android:id=”@+id/mapview01”

      android:layout_width=”fill_parent”

      android:layout_height=”fill_parent”

      android:apiKey=”xxx” />

    其中apiKey在之前已经申请。

    b. 在代码中创建MapView

    MapView map = new MapView(this, apiKey);

     

    实现MapActivity

    在MapActivity中,方法isRoutedDisplayed必须要被重写

    MapView提供三种模式分别是

    mapView.setTraffic(true); // 设置为交通模式

    mapView.setSatellite(true); // 设置为卫星模式

    mapView.setStreetView(true); // 设置为街景模式

     

    使用MapController在地图定位到某地以及设置放大的倍数

    mapController = mapView.getController();

    要定位地点,需要构建一个GeoPoint来表示地点的经度和纬度,然后使用animateTo将地图定位到指定的GeoPoint上

    // 在地图上定位到成都

    geoPoint = new GeoPoint((int)(30.659259*1000000), (int)(104.065762*1000000));

    mapController.animateTo(geoPoint);

     

    使用Overlay在地图上标注一些图标文字等信息

    首先,将地图上的经度和纬度转换为屏幕上的坐标

    Projection.toPixels(GeoPoint in, Point out);

    其次,实现Overlay的draw方法

    class LocationOverlay extends Overlay {

      public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {

        // 绘制图标文字等信息

        super.draw(canvas, mapView, shadow);

        Paint paint = new Paint();

        Point point = new Point();

        mapView.getProjection().toPixels(geoPoint, point);

        paint.setStrokeWidth(1);

        paint.setARGB(255, 255, 0, 0);

        paint.setStyle(Paint.Style.STROKE);

        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.home);

        canvas.drawBitmap(bitmap, point.x, point.y, point);

        canvas.drawText(“天府广场”, point.x, point.y, point);

        return true;

      }

    }

    创建LocationActivity,将LocationOverlay作为其的内部类

    public class LocationActivity extends MapActivity {

      private MapView mapView;

      private MapController mapController;

      private GeoPoint geoPoint;

      public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

     

        mapView = (MapView) findViewById(R.id.mapView01);

        mapView.setTraffic(true);

        mapView.setSatellite(true);

        mapView.setStreetView(true);

        mapView.setEnabled(true);

        mapView.setClickable(true);

        mapView.setBuiltInZoomControls(true);

     

        mapController = mapView.getController();

        geoPoint = new GeoPoint((int)(30.659259*1000000), (int)(104.065762*1000000));

        mapController.animateTo(geoPoint);

        mapController.setZoom(12);

     

        LocationOverlay locationOverlay = new LocationOverlay();

        List<Overlay> list = mapView.getOverlays();

        list.add(locationOverlay);

      }

      protected boolean isRouteDisplayed() {

        return false;

      }

    }

  • 相关阅读:
    MongoDB理解
    jQuery+Ajax+PHP实现异步分页数据显示
    PHP设计模式四:适配器模式
    PHP设计模式三:原型设计模式
    Event Managers
    NetAdvantage
    英语
    CA1060
    DateTime和DateTime2
    宿主进程 vshost.exe
  • 原文地址:https://www.cnblogs.com/fengzhblog/p/3168736.html
Copyright © 2011-2022 走看看