简介

谷歌地图(Google Map)是 Google 公司提供的电子地图服务,包括局部详细的卫星照片。它提供了三种视图:一是矢量地图(传统地图),可提供政区和交通以及商业信息;二是不同分辨率的卫星照片(俯视图);三是地形视图,可以用以显示地形和等高线。 Google公司在2004年11月收购了美国Keyhole公司,推出了http://maps.google.com,令人耳目一新。但Google并未就此止步,在2005年6月底推出了桌面工具Google Earth,把“地球”放到了每个人的桌面上,让你坐在电脑前,就可以在名川大山间漫步,在摩天楼群中俯瞰,这一软件迅速震惊了整个互联网界。随着Google Map和Google Earth的诞生,也出现了很多非常有趣的应用,这些基于Google Earth和Google Maps的小游戏非常有创意,吸引了不少玩家。 目前Google Map在美国、英国、加拿大、日本等其它地区的服务已经完成。在北美的部分地方,开通了“街景视图”服务。使用者可以通过街道上的视角查看街景(例如公交车站,商铺等)。可以让使用者搜寻餐厅,亦可以建立自己的地图,与其他使用者分享有关的照片和评论。其它功能包括路线查询,可以显示两个地点之间的距离和行车时间等。 对于Google重点推出的Android系统来说,Google Map服务在其中有大量的应用。Android中基于Google Map的服务体现在两个方面:地图API和位置API。这两个API是彼此隔离的,都拥有自己的包。地图包为com.google.android.maps,而位置包为android.location。Android中的地图API提供了一些工具来显示和操作地图。例如:可以缩放和平移地图,可以更改地图模式(例如,从卫星视图更改为街道视图),可以向地图添加自定义数据等等;位置API则提供了GPS数据和实时位置数据的处理。这些API通过互联网调用来自Google服务器的服务,因此它们需要有网络连接才能工作。此外,在使用这些Android Maps API服务开发应用程序之前,需要同意Google的服务条款。Google对服务数据的用途设置了一定的限制,例如,可以将位置信息用于用户的个人用途,不能用于某些商业用途。

谷歌地图的简单应用

示例 演示Google Map的简单应用。

第一步:按照如下所示修改主布局文件的代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <com.google.android.maps.MapView
        android:id="@+id/mapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:apiKey="0ZunUBGNC7PWrqO119b-n16583gjdHYGasrYZJQ"/>
</RelativeLayout>

第二步:修改MainActivity类代码的代码如下所示:

public class MainActivity extends MapActivity {
	@Override
	protected void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		setContentView(R.layout.activity_main);
	}
	@Override
	protected boolean isRouteDisplayed() {
		return false;
	}
}

第三步:在功能清单文件中添加如下代码:

<uses-library android:name="com.google.android.maps" />   <!-引用地图库->

运行程序,结果如下图所示: image.png

运行程序会发现,上面的地图只能看不能操作,下面我们地图添加拖动和放大缩小功能,修改Activity类代码如下所示:

public class MainActivity extends MapActivity {
	MapView mapView = null;
	@Override
	protected void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		setContentView(R.layout.activity_main);
		mapView = (MapView) findViewById(R.id.mapView);
		mapView.setClickable(true);
		mapView.setBuiltInZoomControls(true);
	}
	@Override
	protected boolean isRouteDisplayed() {
		return false;
	}
}

再次运行程序,发现现在可以对地图进行点击手动和放大缩小等操作了,运行结果如下图所示: image.png

示例:利用学过的选项菜单知识,为示例10.1中的地图程序添加地图显示模式(卫星视图、交通视图、街景视图)切换功的能。

第一步:在res目录下新建一个menu子目录,然后在里面新建一个名为activity_main.xml的文件,往其中添加如下代码:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/general"
        android:title="普通模式" />
    <item android:id="@+id/traffic"
        android:title="交通模式" />
    <item android:id="@+id/satellite"
        android:title="卫星模式" />
</menu>

第二步:修改Activity类的代码如下所示:

public class MainActivity extends MapActivity {
	MapView mapView = null;
	@Override
	protected void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		setContentView(R.layout.activity_main);
		mapView = (MapView) findViewById(R.id.mapView);
		mapView.setClickable(true);
		mapView.setBuiltInZoomControls(true);
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return super.onCreateOptionsMenu(menu);
	}
	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		switch (item.getItemId()) {
		case R.id.general:
			mapView.setStreetView(true);
			mapView.setTraffic(false);
			mapView.setSatellite(false);
			break;
		case R.id.traffic:
			mapView.setStreetView(false);
			mapView.setTraffic(true);
			mapView.setSatellite(false);
			break;
		case R.id.satellite:
			mapView.setStreetView(false);
			mapView.setTraffic(false);
			mapView.setSatellite(true);
			break;
		}
		return super.onMenuItemSelected(featureId, item);
	}
	@Override
	protected boolean isRouteDisplayed() {
		return false;
	}
}

运行程序,结果如下图所示: image.png
image.png