怎么样了?
我正在开发基于Google地图和位置服务的android应用。我对Google Maps有所了解,这是我在该项目中学到的,但是关于GoogleMaps有几件事我不知道...
在我的主要活动中,我使用mapFragment。我有我的onMapReady方法。
@Override
public void onMapReady(GoogleMap map) {
double myCurrentLatitude = getGPS()[0];
double myCurrentLongitude = getGPS()[1];
CameraPosition myCurrentLocation = CameraPosition.builder()
.target(new LatLng(myCurrentLatitude, myCurrentLongitude))
.zoom(12)
.bearing(0)
.tilt(2)
.build();
map.moveCamera(CameraUpdateFactory.newCameraPosition(myCurrentLocation));
map.getUiSettings().setScrollGesturesEnabled(true);
}
这只是活动中的一种方法,并且运行良好,当活动启动时,它会放大用户所在的位置。
现在,我希望能够将地图缩放到特定位置。假设用户想去某个地方,而我可以得到他们想去的地方的经度和纬度(加倍)。...我还无法获得此活动来更改地图的焦点并缩放到此位置新位置。
我已经尝试了几件事,但我只是不知道如何操作mapFragment。
我的一些不起眼的研究向我展示了getMapAsync,但是似乎这些是刚启动活动时调用的方法。我正在寻找一种方法(我称它为placeLocation(lat,long)...可以在以后每3分钟调用一次,只要我愿意,它就会采用纬度/经度,然后将mapFragment放大位置。
我在我的placeLocation方法中尝试了这一行
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
但是android studio对于此getMap()方法实在是太苦了-甚至根本无法识别它。基本上我不知道在getMap,getMapAsync之间可以用什么方法来操作我的地图...您能帮忙吗?
请给我一些指示?
感谢您的阅读,也感谢您的宝贵时间。
您在代码中谦虚的兄弟。
最佳答案
首先,您需要创建一个类变量,例如:private GoogleMap mMap;
现在,当您的onMapReady()
方法触发时,您可以获取GoogleMap
对象并将其设置为类变量。
@Override
public void onMapReady(GoogleMap map) {
mMap = map;
double myCurrentLatitude = getGPS()[0];
double myCurrentLongitude = getGPS()[1];
CameraPosition myCurrentLocation = CameraPosition.builder()
.target(new LatLng(myCurrentLatitude, myCurrentLongitude))
.zoom(12)
.bearing(0)
.tilt(2)
.build();
mMap.moveCamera(CameraUpdateFactory.newCameraPosition(myCurrentLocation));
mMap.getUiSettings().setScrollGesturesEnabled(true);
}
现在,当您需要更改地图时,只需使用类变量“ mMap”,如下所示:
private void mapMoveTo(double lat, double lng){
LatLng latLng = new LatLng(lat, lng);
if(mMap != null){
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoomFactor));
}
}