`
yelinsen05
  • 浏览: 494094 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Android Map库

阅读更多
Maps库分析
Maps库提供了十几个类,具体可以参考这里http://code.google.com/intl/ja/android/add-ons/google-apis/reference/index.html,包括Mapview,MapController,MapActivity等。
(1)MapController
控制地图移动,伸缩,以某个GPS坐标为中心,控制MapView中的view组件,管理Overlay,提供View的基本功能。使用多种地图模式(地图模式(某些城市可实时对交通状况进行更新),卫星模式,街景模式)来查看Google Map。
常用方法:animateTo(GeoPoint point)  setCenter(GeoPoint point)  setZoom(int zoomLevel) 等。
(2)MapView
Mapview是用来显示地图的view, 它派生自android.view.ViewGroup。当MapView获得焦点,可以控制地图的移动和缩放。
地图可以以不同的形式来显示出来,如街景模式,卫星模式等,通过setSatellite(boolean)  setTraffic(boolean), setStreetView(boolean) 方法。
MapView只能被MapActivity来创建,这是因为mapview需要通过后台的线程来连接网络或者文件系统,而这些线程要由mapActivity来管理。
需要特别说明的一点是,android 1.5中,map的zoom采用了built-in机制,可以通过setBuiltInZoomControls(boolean)来设置是否在地图上显示zoom控件。
常用方法:getController()  getOverlays()  setSatellite(boolean)  setTraffic(boolean),  setStreetView(boolean)  setBuiltInZoomControls(boolean)等。
(3)MapActivity
管理Activity的生命周期,为mapview建立及取消对map service的连接。
MapActivity是一个抽象类,任何想要显示MapView的activity都需要派生自MapActivity。并且在其派生类的onCreate()中,都要创建一个MapView实例,可以通过MapViewconstructor (然后添加到View中ViewGroup.addView(View)) 或者通过layout XML来创建。
(4)Overlay
Overlay是覆盖到MapView的最上层,可以扩展其ondraw接口,自定义在MapView中显示一些自己的东西。MapView通过MapView.getOverlays()对Overlay进行管理。
除了Overlay这个基类,Google还扩展了2个比较有用的Overlay

1)MylocationOverlay—集成了Android.location中接收当前坐标的接口,集成SersorManager中CompassSensor的接口我们只需enableMyLocation(),enableCompass就可以让我们的程序拥有实时的MyLocation以及Compass 功能(Activity.onResume()中)。
2)ItemlizedOverlay—管理一个OverlayItem链表,用图片等资源在地图上作风格相同的标记。
(5)Projection:MapView中GPS坐标与设备坐标的转换(GeoPoint和Point)。
一个简单的小例子
用一个小程序来演示一下android中地图功能的开发。主要功能是实现了地图的缩放,添加了菜单,从而可以手动选择地图的显示模式等
Step1: 新建一个android project, 注意这里要选择的buildtarget为"GoogleAPIs"

Step 2: 修改menifest文件:
<?xmlversion="1.0"encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.map.prac"
     android:versionCode="1"
     android:versionName="1.0">
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.INTERNET" />
   <application android:icon="@drawable/icon"android:label="@string/app_name">
   <uses-library android:name="com.google.android.maps" />
       <activity android:name=".MapViewPrac2"
             android:label="@string/app_name">
         <intent-filter>
          <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
       </activity>
   </application>
    <uses-sdk android:minSdkVersion="3" />
</manifest>


Step 3: 修改layout文件,main.xml

<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
   <com.google.android.maps.MapView
       android:id="@+id/map"
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"
       android:enabled="true"
       android:clickable="true"
       android:apiKey="???????????????????????????????????"
       />    
</LinearLayout>


这里需要将api key中的????????????改成你自己申请到的api key.

Step4: 修改代码:

package feisky.navigation;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends MapActivity {
	
	// 地图显示控制相关变量定义
	private MapView map=null;
	private MapController mapCon;
	
	// 菜单项
	final private int menuMode=Menu.FIRST;
	final private int menuExit=Menu.FIRST+1;
	private int chooseItem=0;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        // 获取MapView
        map=(MapView)findViewById(R.id.map);
        // 设置显示模式
        map.setTraffic(true);
        map.setSatellite(false);
        map.setStreetView(true);
        // 设置可以缩放
        map.setBuiltInZoomControls(true);
        
        // 设置初始地图的中心位置
        GeoPoint geoBeijing=new GeoPoint((int)(39.95*1000000), (int)(116.37*1000000));
        mapCon=map.getController();
        mapCon.setCenter(geoBeijing);
    }
    
    @Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// 建立菜单
    	menu.add(0,menuMode,0,"地图模式");
		menu.add(0, menuExit, 1, "退出");
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		return super.onKeyDown(keyCode, event);
	}

	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		switch (item.getItemId()) {
		case menuExit:
			finish();
			break;
		case menuMode:
			Dialog dMode=new AlertDialog.Builder(this)
			.setTitle("地图模式设置")
			.setSingleChoiceItems(R.array.MapMode, chooseItem, new DialogInterface.OnClickListener()
			{
				
				@Override
				public void onClick(DialogInterface dialog, int which) {
					chooseItem=which;
				}
			})
			.setPositiveButton("确定", new DialogInterface.OnClickListener()
			{
				
				@Override
				public void onClick(DialogInterface dialog, int which) {
					switch (which) {
					case 0:
						map.setSatellite(true);
						//map.setTraffic(false);
						//map.setStreetView(false);
						break;
					case 1:
						//map.setSatellite(false);
						map.setTraffic(true);
						//map.setStreetView(false);
						break;
					case 2:
						//map.setSatellite(false);
						//map.setTraffic(false);
						map.setStreetView(true);
						break;
					default:
						break;
					}
				}
			})
			.setNegativeButton("取消", new DialogInterface.OnClickListener() {
				
				@Override
				public void onClick(DialogInterface dialog, int which) {
					
				}
			})
			.create();
			dMode.show();
			break;
		default:
			break;
		}
		return super.onMenuItemSelected(featureId, item);
	}

	@Override
	protected boolean isRouteDisplayed() {
		return false;
	}
}
分享到:
评论

相关推荐

    Android google map开发

    压缩包包含play-services-maps-16.1.0.aar/play-services-places-15.0.1.aar/play-services-location-15.0.1.aar/android-maps-utils-0.5.aar 等...

    android-open-street-map:适用于 Android 的 OpenStreetMap 库

    android-open-street-map 适用于 Android 的 OpenStreetMap 库 该项目已在此处更新: : 特征: 离线工作,瓷砖保存在本地数据库中 支持不同类型的叠加,如标记、轨迹、多边形...

    react-native-amap, 针对 iOS + Android响应本机AMap组件.zip

    react-native-amap, 针对 iOS + Android响应本机AMap组件 react-native-amap针对 iOS + Android响应本机AMap组件react-native-amap-view是由react-native-maps激发的amap库的包装器,它可以在安卓和iOS中使用##Demo

    google map GPS纠偏库

    这是一个access类型的gps纠偏数据库,共有9万多条记录,大小5M,我导入到sqlite3...适用于要求精度不是太高的google map应用。所有经过纠偏的gps点,基本上能够显示到道路上。如果需要sqlite的可以自己导入或者联系我吧

    Android-ExtraMapUtils一个Android库实现更方便在Google地图上标记绘制多边形和折线

    ExtraMapUtils一个Android库实现更方便在Google地图上标记,绘制多边形和折线

    GoogleMapDemo(Android)

    GoogleMapDemo是一个简单的基于Google Maps Android API v2的demo并实现了通过请求google direction 服务,得到两点之间导航线路 googlepalyservice是google的play商店lib库,地图类等都需要此库,我一并打包上传。...

    AddressPicker,一个简单的轻量级android库,可以从google map和places api中选择地址.zip

    一个简单的轻量级android库,可以从google map和places api中选择地址

    集成目前Android主流优秀第三方组件

    表单验证库android-validation-komensky 更多优秀开源库等待集成... 已封装工具类: HTTP网络通信工具类(ToolHTTP.java),get/post请求,支持多种接口回调 SOAP协议通信工具类(ToolSOAP.java),基于异步回调请求...

    android-pattern-map:Android 模式 - 谷歌地图

    android-pattern-map #Overview Android 模式 - 谷歌地图 - 如何通过示例进行指导。 #Description 这是一个关于如何在您的 android 应用程序上运行 Google 地图的快速示例。 为数不多的第一次就搞定的令人困惑的部分...

    Android代码-Curve-Fit

    Android library for drawing curves on Google Maps. This library uses Bezier cubic equation in order to compute all intermediate points of a curve. Demo Setup Gradle dependencies { ...

    适用于Android实用程序库的Maps SDK-Android开发

    Google Maps Android API实用程序库此开放源代码库包含实用程序,这些实用程序对使用Google Maps Android API的各种应用程序有用。 标记群集-处理大型nu Google Maps Android API实用程序库的显示此开源库包含实用...

    android libusbcamera jni 动态库 修复拔下camera崩溃问题

    在android libusbcamear module中,默认JNI库存在bug,在预览过程中拔下usb摄像头,会出现signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 的空指针异常,此so已修改源码重新打包,替换可修复该异常

    Android 初学中阶高阶书籍_集合打包2

    Android系统概述,Android系统的开发综述,Android的Linux内核与驱动程序,Android的底层库和程序,Android的JAVA虚拟机 和JAVA环境,Android的GUI系统,Android的Audio系统,Android的Video 输入输出系统,Android的多媒体...

    Android 初学中阶高阶书籍_集合打包3

    Android系统概述,Android系统的开发综述,Android的Linux内核与驱动程序,Android的底层库和程序,Android的JAVA虚拟机 和JAVA环境,Android的GUI系统,Android的Audio系统,Android的Video 输入输出系统,Android的多媒体...

    Android高级编程--源代码

     由于Android构建在开源代码的框架之上,而且提供了强大的SDK库和开放的理念,所以它为广大的没有任何移动应用程序开发经验的新手开辟了一条开发完美的移动应用程序的康庄大道。而富有经验的移动开发人员现在也可以...

    Android-基于高德地图的marker集合点库

    基于高德地图的,marker集合点库

    Android-位置搜索智能提示框利用了GoogleMap的Api

    位置搜索智能提示框,利用了 Google Map 的 Api,想要用到国内的话,可以对接一个国内的地图服务,但是整个库初衷不错,为了更好的用户体验。

    android开发入门与实战(下)

    第13章 Android综合案例二——基于GoogleMap开发个人移动地图 13.1 项目UI规划 13.2 数据存储实现 13.2.1 设计数据库及表结构 13.2.2 设计SharePreference存储 13.3 项目实现流程 13.3.1 创建项目工程 13.3.2 项目各...

    axure8.0 最全元件库下载

    元件库,使用方法:打开axsure,选择元件库--载入元件库--选择下载的文件即可使用 常用移动axure8元件库,主要用与移动产品设计。希望能帮到大家 元件库,使用方法:打开axsure,选择元件库--载入元件库--选择下载的...

    Android例子源码集成安卓主流优秀第三方组件框架.zip

    表单验证库android-validation-komensky 更多优秀开源库等待集成... 已封装工具类: HTTP网络通信工具类(ToolHTTP.java),get/post请求,支持多种接口回调 SOAP协议通信工具类(ToolSOAP.java),基于异步回调...

Global site tag (gtag.js) - Google Analytics