1.配置
1、google map和国内的高德、百度地图不同,由于国内的大环境因素,基本厂商将谷歌服务或者GMS CORE框架阉割掉了,不过搜索教程,也可以将缺少的apk打包安装完毕,在找一个免费的,这样就可以使用google地图了。
2、google地图没有过多的添加libs和so文件的过程,这点可能是android就是google的嘛,所以添加过程也减少了不少步骤。
在 android module的build.gradle中依赖
compile 'com.google.android.gms:play-services-maps:10.2.1' 即可使用google地图了
3、google地图不是使用googleMapView控件方式添加到xml文件中的,而是使用碎片代替。
"match_parent"
android:layout_height="match_parent"
android:id="@+id/map"
android:name=
"com.google.android.gms.maps.SupportMapFragment"/>
4、权限配置
5、获取密钥和mainfest
1.获取密钥:
详细步骤请浏览网址:
[google map 获取密钥URL:](https://developers.google.com/maps/documentation/android-api/signup)
2.AndroidManifest.xml
6、在java文件中获取GoogleMap
在onCreate()中使用
((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.google_map)).getMapAsync(this);
getMapAsync(this)的方法实现接口
OnMapReadyCallback
接口需实现方法
@Override
public void onMapReady(GoogleMap googleMap) {
//googleMap即为得到的googleMap
}
2.GoogleMap的基本使用
2.1 简单marker的添加
LatLng hangzhou = new LatLng(30.274136, 120.154060);
//添加marker
googleMap.addMarker(new MarkerOptions().position(sydney)
.title("Marker in Hangzhou"));
//地图自动移动至当前点 googleMap.moveCamera(CameraUpdateFactory.newLatLng(hangzhou ));
//如果想直接放大移动到当前点可以使用
CameraUpdateFactory.newLatLngZoom(LatLng latLng,int zoom);
2.2 googleMap提供了更为简单的点击屏幕获取当前地图坐标的方法
//点击
GoogleMap.setOnMapClickListener(GoogleMap.OnMapClickListener listener);
//长按
GoogleMap.setOnMapLongClickListener(GoogleMap.OnMapClickListener listener);
两种方法都可获取当前点击的LatLng
onMapClick(LatLng latLng)
onMapLongClick(LatLng latLng)
2.3更改地图显示Type
google提供了5种type类型:
Normal
典型道路地图。 显示道路、人类建造的一些特征以及河流等重要的自然特征。 此外,还会显示道路 和景观标签。
Hybrid
添加了道路地图的卫星照片数据。 此外,还会显示道路 和景观标签。
Satellite
卫星照片数据。 不显示道路和景观标签。
Terrain
地形数据。 地图包含颜色、轮廓线和标签以及 透视阴影。 此外,还会显示一些道路和标签。
None
无图块。 地图将渲染为空网格,不加载任何图块。
使用GoogleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
的方法在进行更改地图显示样式
2.4获取商家景点信息
googleMap提供了
googleMap.setOnPoiClickListener(new OnPoiClickListener(){
public void onPoiClick(PointOfInterest poi) {
Toast.makeText(getApplicationContext(), "Clicked: " +
poi.name + "\nPlace ID:" + poi.placeId +
"\nLatitude:" + poi.latLng.latitude +
" Longitude:" + poi.latLng.longitude,
Toast.LENGTH_SHORT).show();
}
});
2.5设置多边形、圆形等
1、多线段:
PolylineOptions rectOptions = new PolylineOptions()
.add(new LatLng(37.35, -122.0))
.add(new LatLng(37.45, -122.0)) // North of the previous point, but at the same longitude
.add(new LatLng(37.45, -122.2)) // Same latitude, and 30km to the west
.add(new LatLng(37.35, -122.2)) // Same longitude, and 16km to the south
.add(new LatLng(37.35, -122.0)); // Closes the polyline.
Polyline polyline = myMap.addPolyline(rectOptions);
2、多边形:
PolygonOptions rectOptions = new PolygonOptions()
.add(new LatLng(37.35, -122.0),
new LatLng(37.45, -122.0),
new LatLng(37.45, -122.2),
new LatLng(37.35, -122.2),
new LatLng(37.35, -122.0));
Polygon polygon = myMap.addPolygon(rectOptions);
3、自动完成多边形
Polygon polygon = map.addPolygon(new PolygonOptions()
.add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5), new LatLng(0, 0))
.strokeColor(Color.RED)
.fillColor(Color.BLUE));
4、圆形
CircleOptions circleOptions = new CircleOptions()
.center(new LatLng(37.4, -122.1))
.radius(1000)); // In meters
Circle circle = myMap.addCircle(circleOptions);