`
yelinsen05
  • 浏览: 497876 次
  • 性别: 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;
	}
}
分享到:
评论

相关推荐

    ex_map.rar_android_android mapa_android mapapi_ex_map_google ear

    同时,我们可以通过MapFragment或SupportMapFragment(对于兼容库)来实现地图功能,这对于支持不同版本的Android系统很有帮助。 Google Earth API,虽然在某些场景下可以提供更为立体和真实的3D地图视图,但在...

    android map的使用

    ### Android Map API 使用详解 #### 一、准备工作 在深入探讨如何使用Android Map API之前,首先需要做一些必要的准备工作。这包括获取API密钥、创建基于Google APIs的Android虚拟设备(AVD)、创建工程项目以及安装...

    androidmap转json字符串、list转json字符串工具类.zip

    在Java中,我们可以使用`org.json`库或者Gson库将Map转换为JSON字符串。这个工具类可能包含以下方法: ```java public static String mapToJsonString(Map, Object&gt; map) { // 使用Gson库进行转换 Gson gson = ...

    AndroidMap

    【AndroidMap】是一个关于在Android平台上开发地图应用的专题,主要涉及如何集成地图SDK、实现地图功能以及优化地图性能等方面的知识。在这个项目中,开发者可能使用了如Google Maps API、高德地图API或其他第三方...

    google-Map.zip_android_android google map_android map_google map

    Android应用要使用Google Maps,需要集成Google Play Services库。这可以通过在build.gradle文件中添加依赖来实现,例如: ``` dependencies { implementation '...

    android map

    "Android Map"是指利用Google Maps API或者其他的地图服务提供商在Android应用中集成地图展示、位置定位、导航等功能的技术。本篇文章将深入探讨Android地图开发的关键知识点。 1. **Google Maps API**: Google ...

    android google map 导航

    在Android平台上实现Google Map导航功能,需要利用Google Maps Android API v2。自2013年起,API进行了重大更新,导致旧版本的一些类不再适用。本文将详细介绍如何使用最新的API来实现位置获取、通过地名获取经纬度...

    gdal_android版本库

    这个“gdal_android版本库”很可能是一个包含预编译GDAL库及其相关组件的资源集合,专为Android开发者设计,以便在Android应用中集成地理空间处理功能。 GDAL在Android上的应用需要解决几个关键问题: 1. **兼容性...

    Android中MapApp代码段

    在Android开发中,Map应用是常见的功能之一,用于展示地理位置信息和进行导航。这个"Android中MapApp代码段"很可能是包含了一个简单的Android应用程序,它使用Google Maps API来显示地图。接下来,我们将深入探讨...

    简单的android Map 程序

    本文将深入探讨如何构建这样的程序,基于提供的"简单的android Map程序"的描述。 首先,我们要了解Android中的Map API,它允许开发者在应用程序中嵌入交互式地图。在Android 2.2(API级别8)及以上版本,推荐使用...

    android GoogleMap定位(四)

    首先,我们需要在项目中引入Google Play Services库,这是GoogleMap API的基础。在`build.gradle`模块文件中添加依赖: ```groovy dependencies { implementation '...

    androidMap

    1. **Google Maps API集成**:AndroidMap项目首先展示了如何在Android应用中引入Google Play Services库,这是使用Google Maps API的基础。你需要在项目中配置相应的依赖,并在AndroidManifest.xml文件中添加必要的...

    google map for android

    2. **添加依赖库**:在应用的`build.gradle`文件中,添加Google Maps依赖库。这通常涉及到添加Google Play服务的依赖项,具体版本可能会随时间而变化。 3. **修改AndroidManifest.xml**:确保在应用的`...

    Android-Google-Map-APi.doc.zip_android_google map android

    在使用Android Map API v1之前,开发者需要在项目中添加Google Maps库。这通常涉及到获取一个API密钥,该密钥是应用与Google Maps服务交互的身份证明。API密钥可以通过注册Google APIs Console并关联Android项目来...

    Android-Android分页库

    本知识点主要聚焦于Android分页库的使用和实现,尤其是通过开源库来简化这一过程。 Android分页库通常提供以下功能: 1. **动态加载**:当用户滚动到页面底部时,自动请求下一页数据。 2. **预加载**:在用户到达...

    Android_Google_Map.rar_Google api_android_android google map_and

    本文将深入讲解如何进行Android Google Map的开发入门,从搭建环境、申请API Key到关键类的使用。 首先,我们需要**搭建环境**。在Android Studio中,确保你已经更新到最新版本,并安装了Android SDK。在项目级...

    轨迹记录 android google map 应用

    1. **Android SDK集成**:开发者需要在Android Studio项目中配置Google Play Services库,以便使用Google Maps API。 2. **Google Maps API密钥**:在Google Cloud Console中创建项目,启用Google Maps Android API...

    Android之Map&GPS

    在Android开发中,Map和GPS是两个非常关键的组件,它们为移动应用提供了地理定位和地图展示的功能。这篇博文将深入探讨如何在Android应用程序中使用Map和GPS技术,以及相关的关键知识点。 首先,我们来了解Android...

Global site tag (gtag.js) - Google Analytics