最近在做一个安卓地图项目,需要用到世界地图,但国内谷歌基本已经不能用了,这时就需要一个新的开源api,经过别人的介绍才发现了MapBox 这个开源免费的api,加载速度比osm地图要快多了,一下是我碰到的一些问题,希望可以帮到其他的一些人
int screenWidth = getActivity().getWindowManager().getDefaultDisplay().getWidth();
float width = DensityUtils.px2dp(context, screenWidth);
zoom = 22 - Math.rint(Math.log(zoomFirst * MERCATOR_RADIUS * Math.PI / (180.0 * width)));
thisSourceDateList = MainActivityAll.getSourceDateList();
WebSourceTileLayer ws = new WebSourceTileLayer("openstreetmap", "http://tile.openstreetmap.org/{z}/{x}/{y}.png");
ws.setName("OpenStreetMap")
.setAttribution("© OpenStreetMap Contributors")
.setMinimumZoomLevel(1)
.setMaximumZoomLevel(21);
mMapView.setTileSource(ws);
mMapView.setCenter(center);
mMapView.setZoom((float) zoom);
这是设置地图的一些基本信息这种 WebSourceTileLayer 方法加载的比默认的加载速度快近一倍,不过就是图层不太好看
LocationListener locationListener = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onLocationChanged(Location location) {
// 更新当前设备的位置信息
showLocation(location);
}
};
这是定位的监听
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
// locationManager.removeUpdates(locationListener); ondestroy方法移除监听器
// 获取所有可用的位置提供器
List<String> providerList = locationManager.getProviders(true);
String provider;
if (providerList.contains(LocationManager.GPS_PROVIDER)) {
provider = LocationManager.GPS_PROVIDER;
} else if (providerList.contains(LocationManager.NETWORK_PROVIDER)) {
provider = LocationManager.NETWORK_PROVIDER;
} else {
// 当没有可用的位置提供器时,弹出Toast提示用户
Toast.makeText(context, "No location provider to use",
Toast.LENGTH_SHORT).show();
return;
}
Log.e("location", provider);
Location location = locationManager.getLastKnownLocation(provider);
if (location != null) {
// 显示当前设备的位置信息
showLocation(location);
}
locationManager.requestLocationUpdates(provider, 5000, 1, locationListener);
在官方的api看的好麻烦啊
MapViewListener mapViewListener = new MapViewListener()
实例化他的接口,可以监听手势在地图的操作
mMapView.addListener(mapListener);
这个方式可以实例化他的地图图层变化,第一次碰到这种add的,找了我好久
一些地图功能这些方式基本可以实现了,还有一些设置markdr的 ,划线的demo上有,就不一一举例了
这是项目的demo,适合初学者必看文档方便多了http://download.csdn.net/download/zhayunbiao/9968836
这个项目还有很多不懂得地方,希望有懂得人可以交流交流
联系QQ:1925413099