关于Google Map API V2 版本的定位与导航
现在对于学习到的东西总结一下。
GOOGLE MAP API V2
新版本的GoogleMap可以使用MapFragment显示地图,Activity也不必再继承MapService。 新版本帮我们做了一些东西:连接到Google Maps Service。
下载地图资源
在手机屏幕上显示地图
显示控制按钮,例如平移及缩放。
MapFragment
MapFragment是Fragment的子类,是放置地图的容器。对于支持MapFragment的Google Maps Android API的要求:Android 3.1(API level 12)或更高版本。而低版本的API需要通过 SupportMapFragment来达到相同的功能效果。MapView
MapView同样是地图的容器,但是需要继承MapActivity才可以使用。V2版本可以继承Activity实现既定的地图功能,因此MapView不适合在此直接使用。API V2版本中获取地图组件
GoogleMap mMap = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
其中map是布局文件中所定义的地图组件的id.
地图的类型
地图一共有5种类型:Normal:典型的地图,此种地图类型是平常使用最多、最广的类型。
Hybrid:混合卫星图及道路地图,该种地图类型除了显示卫星图外,还标记了地名。
Satellite:卫星照片。
Terrain:地形图。
None:什么都没有。
改变地图的类型
使用 setMapType 可以改变地图的类型:mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
标记(Marker)
用来标记地图上的某一个地点,可以自定义标记的颜色或图示。标记可以定义click事件,如果将draggable属性射程true,即可以使得使用者在长按此标记后移动它。
建立标记的方法是使用MarkerOptions类,使用LatLng类可以用于设置标记的经纬度,代码如下:
MarkerOptions markerOpt = new MarkerOptions();
markerOpt.position(new LatLng(纬度值, 经度值));
markerOpt.title("标记地点");
markerOpt.draggable(true);
mMap.addMarker(markerOpt);
也可以根据需要自定义标记的属性:
* Position(必要):使用 LatLng 类來设定位置,该属性是唯一的必须要设定的属性。
* Title:当用户点击标记时显示的标记的标题信息。
* Snippet:额外的文字,显示在标题信息的下方。
* Draggable:是否可以允许用户移动标记,true:可移动;false:不可移动。
* Visible:是否显示标记,true:显示;false:隐藏。
* Anchor:图片上的一个点,用来定位到经纬度坐标,默认为图片底边的中间位置。取值范围为:左上角(0.0, 0.0)到右下角(1.0, 1.0)。
* Icon:图示,被放置在原标记的相同位置,只有第一次建立标记时可以使用图示,一旦使用之后不能任意更换。
初始化地图状态信息
地图信息的初始化可以设置以下参数类型:摄影机的位置,即当前可观看到的地图位置:包含 location(位置), zoom(缩放), bearing(轴承) 及 tilt(倾斜),更改地图视角的详细资料请参考:https://developers.google.com/maps/documentation/android/views?hl=zh-TW。
地图的类型。
是否显示缩放按钮(zoom)以及是否在屏幕上显示罗盘。
使用者可以使用哪些哪些手势来操作地图。
googlemap.xml
<?xml version="1.0" encoding="utf-8"?>activity_main.xml
<?xml version="1.0" encoding="utf-8"?>MainActivity.java
package com.example.googlemaptest; import java.util.List; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapFragment; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.CameraPosition; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.Toast; public class MainActivity extends Activity { //定义界面上的可视化组件 private Button btn_loc, btn_nav; private EditText edt_lng, edt_lat; private RadioGroup rg_mapType; GoogleMap mMap; private CameraPosition cameraPosition; private MarkerOptions markerOpt; //定义LocationManager对象 private LocationManager locManager; private Location location; private String bestProvider; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取用户界面的组件 findViews(); //创建LocationManager对象,并获取Provider initProvider(); //取得地图组件 mMap = ((MapFragment)getFragmentManager().findFragmentById(R.id.mapView)).getMap(); mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); updateToNewLocation(location); //给按钮添加监听器 btn_loc.setOnClickListener(new MapClickedListener()); //为RadioGroup的选中状态改变添加监听器 rg_mapType.setOnCheckedChangeListener(new ChangeMapTypeListener()); // 设置监听器,自动更新的最小时间为间隔N秒(1秒为1*1000,这样写主要为了方便)或最小位移变化超过N locManager.requestLocationUpdates(bestProvider, 3 * 1000, 8, new LocationListener() { //当Provider的状态改变时 @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { // 当GPS LocationProvider可用时,更新位置 location = locManager.getLastKnownLocation(provider); } @Override public void onProviderDisabled(String provider) { updateToNewLocation(null); } @Override public void onLocationChanged(Location location) { // 当GPS定位信息发生改变时,更新位置 updateToNewLocation(location); } }); } private void initProvider() { //创建LocationManager对象 locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // List all providers: List欢迎转载,请注明出处:http://weiweili.blog.51cto.com/blog/6675651/1341300
更多相关文章
- [置顶] Android获取本地图片缩略图终极解决方案
- Android(安卓)Map Api 使用和开发(1) 添加地图和界面
- Android(安卓)开发之集成百度地图的定位与地图展示
- 百度地图开发Marker|Polyline隐藏或显示
- Android(安卓)获取经纬度
- Android(安卓)百度地图蓝点定位
- Android(安卓)根据城市名称获取经纬度
- android googleMap使用并在指定的位置上标注
- Android百度地图之显示地图