tia*_*ato 4 android google-maps
我有一些问题需要在Android谷歌地图上移动相机.
我有这个功能:
protected void centralizeMapToBounds(final LatLng southwest, final LatLng northeast, final LatLng taxi) {
final int padding = 30;
Location loc1 = new Location("");
loc1.setLatitude(southwest.latitude);
loc1.setLongitude(southwest.longitude);
Location loc2 = new Location("");
loc2.setLatitude(northeast.latitude);
loc2.setLongitude(northeast.longitude);
Location loc3 = new Location("");
loc3.setLatitude(taxi.latitude);
loc3.setLongitude(taxi.longitude);
float d1 = loc1.distanceTo(loc2);
float d2 = loc1.distanceTo(loc3);
float d3 = loc2.distanceTo(loc3);
LatLngBounds bounds = null;
try {
if(d1 > d2){
if(d1 > d3){
ICabDebug.i(TAG, "Maior distancia d1: " + d1);
if(southwest.latitude > northeast.latitude)
bounds = new LatLngBounds(southwest,northeast);
else
bounds = new LatLngBounds(northeast, southwest);
}else{
ICabDebug.i(TAG, "Maior distancia d3: " + d3);
if(northeast.latitude > taxi.latitude)
bounds = new LatLngBounds(northeast, taxi);
else
bounds = new LatLngBounds(taxi,northeast);
}
}else{
ICabDebug.i(TAG, "Maior distancia d2: " + d2);
if(southwest.latitude > taxi.latitude)
bounds = new LatLngBounds(southwest, taxi);
else
bounds = new LatLngBounds(taxi, southwest);
}
}catch (Exception e) {
ICabDebug.i(TAG, e.getMessage());
ICabDebug.i(TAG, "bounds = null");
bounds = null;
}
final LatLngBounds bounds2 = bounds;
// Pan to see all markers in view.
try {
ICabDebug.i(TAG, "Entro aki no primeiro bounds");
googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, padding));
}
catch (Exception e) {
if (mapView.getViewTreeObserver().isAlive()) {
mapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@SuppressLint("NewApi")
@Override
public void onGlobalLayout() {
mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
try {
ICabDebug.i(TAG, "northeast ["+ bounds2.northeast.latitude + " / " + bounds2.northeast.longitude + "]");
ICabDebug.i(TAG, "southwest ["+ bounds2.southwest.latitude + " / " + bounds2.southwest.longitude + "]");
googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds2, padding));
}
catch (Exception ee) {
ICabDebug.i(TAG, "----------------------------");
ICabDebug.i(TAG, ee.getMessage());
ICabDebug.i(TAG, "----------------------------");
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(taxi, 15));
}
}
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用它与坐标完美时:( - 23.5804166,-46.681909)( - 23.4850942,-46.5802326)( - 23.5802881,-46.6819049)
但是当我使用下面的坐标时,它会将相机移动到澳大利亚:( - 23.5792416,-46.63472729999999)( - 23.5436503,-47.4519223)( - 23.580264,-46.6818923)
有人能帮助我吗?谢谢
Mac*_*ski 12
不确定你想要用你的问题中的代码实现什么.这有点乱.
如果要显示包含3个LatLng的区域,则最好使用
LatLngBounds bounds = LatLngBounds.builder().include(latLng1).include(northeast).include(taxi).build();
map.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, padding));
Run Code Online (Sandbox Code Playgroud)
这将用几行代替你所有的ifs和try-catches.
顺便说一句.你不应该在你的代码中做try-catch.编程错误不是你捕获并尝试不同的东西,而是改变代码.
| 归档时间: |
|
| 查看次数: |
5574 次 |
| 最近记录: |