1:第一步就是去http://code.google.com/intl/ja-JP/android/maps-api-signup.html 申请一个KEY,当然 前面要申请密钥啥的。
2:建立一个基于GOOGLE API的工程,选择MapActivity 作为自己Activity的基类
3:可以象往常一样,在layout里面进行界面设计,只是map 基础类有些特别:
<com.google.android.maps.MapView
android:id="@+id/myMapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
android:apiKey="xx"
/>
注:别的控件,如按钮,edicttext 等 都可以象往常一样普通布局,不见得需要象书本推荐的在mapview上进行操作
4:在AndroidManifest.xml 加入:
<uses-library android:name="com.google.android.maps" />
以及:
<uses-sdk android:minSdkVersion="3" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> // gps 定位
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> // 网络定位
5: 一些关键代码:
// Get the Map View’s controller
mapController = myMapView.getController();
// 使用默认缩放按钮
myMapView.setBuiltInZoomControls(true);
// Configure the map display options
myMapView.setSatellite(true);// 卫星
// 得到当前位置
String context = Context.LOCATION_SERVICE;
locationManager = (LocationManager)getSystemService(context);
// provider = LocationManager.GPS_PROVIDER;
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);
//移动地图中心到指定位置(当前位置)
positionOverlay.setLocation(location);
Double geoLat = location.getLatitude()*1E6; // 注意两者单位不同
Double geoLng = location.getLongitude()*1E6;
GeoPoint point = new GeoPoint(geoLat.intValue(),
geoLng.intValue());
mapController.animateTo(point);
6: MapView 有一个overlay的概念,你可以添加自己的overlay来进行 绘制。
可以继承overlay,并重载draw函数进行的canvas 进行绘图
通过下面代码来添加这个overlay:
positionOverlay = new MyPositionOverlay();
List<Overlay> overlays = myMapView.getOverlays();
overlays.add(positionOverlay);
一个特殊的overlay:
MyLocationOverlay 可以自动定位当前位置并进行标注
通过MyLocationOverlay.enableCompass / disableCompass 来进行监听位置变化
7: 通过Geocoder 来查询,定位感兴趣位置
下面的代码是定位到我家,哈哈
Geocoder fwdGeocoder = new Geocoder(this, Locale.CHINA);
//String streetAddress = "160 Riverside Drive, New York, New York";
//String streetAddress = "West Lake, Hang Zhou, Zhe Jiang";
String streetAddress = "湖墅嘉园,湖墅北路,杭州";
List<Address> locations = null;
try {
locations = fwdGeocoder.getFromLocationName(streetAddress, 10);
} catch (IOException e) {}
StringBuilder sb = new StringBuilder();
if (locations.size() > 0) {
Double geoLat = locations.get(0).getLatitude()*1E6;
Double geoLng = locations.get(0).getLongitude()*1E6;
GeoPoint point = new GeoPoint(geoLat.intValue(),
geoLng.intValue());
mapController.animateTo(point);
}
对应google map的intent
Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=" + streetAddress));
startActivity(myIntent);