【发布时间】:2013-04-26 18:42:33
【问题描述】:
我正在尝试将此代码的旧版本从 GMaps v1.1 转换为 GMaps v2。我在转换以下 MapController 代码时遇到问题:
private MapController mMapController;
public void setController(Object controller)
{
/*if( controller instanceof org.osmdroid.views.MapView )
{
mOpenStreetMapViewControllerSource = (org.osmdroid.views.MapView) controller;
mMapController = null;
} else */if( controller instanceof MapController )
{
mMapController = (MapController) controller;
mOpenStreetMapViewControllerSource = null;
}
}
public void setZoom( int i )
{
if( mMapController != null )
{
mMapController.setZoom( i );
}
/*else if( mOpenStreetMapViewControllerSource != null )
{
mOpenStreetMapViewControllerSource.getController().setZoom( i );
mPostponedSetZoom = i;
}*/
else
{
throw new IllegalStateException( "No working controller available" );
}
}
public void animateTo( LatLng point )
{
if( point.latitude*1000000 != 0 && point.longitude*1000000 != 0 )
{
if( mMapController != null )
{
mMapController.animateTo( point );
}
/*else if( mOpenStreetMapViewControllerSource != null )
{
mOpenStreetMapViewControllerSource.getController().animateTo( new org.osmdroid.util.GeoPoint( point.getLatitudeE6(), point.getLongitudeE6() ) );
mPostponedSetCenterPoint = point;
}*/
else
{
throw new IllegalStateException( "No working controller available" );
}
}
}
public void setCenter( LatLng point )
{
if( point.latitude*1000000 != 0 && point.longitude*1000000 != 0 )
{
if( mMapController != null )
{
mMapController.setCenter( point );
}
/*else if( mOpenStreetMapViewControllerSource != null )
{
mOpenStreetMapViewControllerSource.getController().setCenter( new org.osmdroid.util.GeoPoint( point.getLatitudeE6(), point.getLongitudeE6() ) );
mPostponedSetCenterPoint = point;
}*/
}
}
public boolean zoomIn()
{
if( mMapController != null )
{
return mMapController.zoomIn(); //USE CameraUpdateFactory for zoomIn() - https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/CameraUpdateFactory
}
/*if( mOpenStreetMapViewControllerSource != null )
{
return mOpenStreetMapViewControllerSource.getController().zoomIn();
}*/
return false;
}
public boolean zoomOut()
{
if( mMapController != null )
{
return mMapController.zoomOut(); //USE CameraUpdateFactory for zoomOut() - https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/CameraUpdateFactory
}
/*else if( mOpenStreetMapViewControllerSource != null )
{
return mOpenStreetMapViewControllerSource.getController().zoomOut();
}*/
return false;
}
这是我要转换的整个文件:
import android.util.Log;
import com.google.android.gms.maps.model.LatLng;
//import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapController;
public class MapControllerProxy
{
private static final String TAG = "OGT.MapControllerProxy";
private MapController mMapController;
private org.osmdroid.views.MapView mOpenStreetMapViewControllerSource;
private LatLng mPostponedSetCenterPoint = null;
private int mPostponedSetZoom = -1;
public MapControllerProxy()
{
}
public void setController(Object controller)
{
/*if( controller instanceof org.osmdroid.views.MapView )
{
mOpenStreetMapViewControllerSource = (org.osmdroid.views.MapView) controller;
mMapController = null;
} else */if( controller instanceof MapController )
{
mMapController = (MapController) controller;
mOpenStreetMapViewControllerSource = null;
}
}
public void setZoom( int i )
{
if( mMapController != null )
{
mMapController.setZoom( i );
}
/*else if( mOpenStreetMapViewControllerSource != null )
{
mOpenStreetMapViewControllerSource.getController().setZoom( i );
mPostponedSetZoom = i;
}*/
else
{
throw new IllegalStateException( "No working controller available" );
}
}
public void animateTo( LatLng point )
{
if( point.latitude*1000000 != 0 && point.longitude*1000000 != 0 )
{
if( mMapController != null )
{
mMapController.animateTo( point );
}
/*else if( mOpenStreetMapViewControllerSource != null )
{
mOpenStreetMapViewControllerSource.getController().animateTo( new org.osmdroid.util.GeoPoint( point.getLatitudeE6(), point.getLongitudeE6() ) );
mPostponedSetCenterPoint = point;
}*/
else
{
throw new IllegalStateException( "No working controller available" );
}
}
}
public void setCenter( LatLng point )
{
if( point.latitude*1000000 != 0 && point.longitude*1000000 != 0 )
{
if( mMapController != null )
{
mMapController.setCenter( point );
}
/*else if( mOpenStreetMapViewControllerSource != null )
{
mOpenStreetMapViewControllerSource.getController().setCenter( new org.osmdroid.util.GeoPoint( point.getLatitudeE6(), point.getLongitudeE6() ) );
mPostponedSetCenterPoint = point;
}*/
}
}
public boolean zoomIn()
{
if( mMapController != null )
{
return mMapController.zoomIn(); //USE CameraUpdateFactory for zoomIn() - https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/CameraUpdateFactory
}
/*if( mOpenStreetMapViewControllerSource != null )
{
return mOpenStreetMapViewControllerSource.getController().zoomIn();
}*/
return false;
}
public boolean zoomOut()
{
if( mMapController != null )
{
return mMapController.zoomOut(); //USE CameraUpdateFactory for zoomOut() - https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/CameraUpdateFactory
}
/*else if( mOpenStreetMapViewControllerSource != null )
{
return mOpenStreetMapViewControllerSource.getController().zoomOut();
}*/
return false;
}
public void executePostponedActions()
{
if( mPostponedSetCenterPoint != null )
{
Log.w( TAG, "mPostponedSetCenterPoint"+ mPostponedSetCenterPoint);
setCenter( mPostponedSetCenterPoint );
mPostponedSetCenterPoint = null;
}
if( mPostponedSetZoom >= 0 )
{
Log.w( TAG, "mPostponedSetZoom"+ mPostponedSetCenterPoint);
setZoom( mPostponedSetZoom );
mPostponedSetZoom = -1;
}
}
}
在转换到 v2 时,我可以使用什么代码来替换 MapController 功能?任何建议都会有所帮助。
【问题讨论】:
-
什么特定“MapController 功能”给您带来了问题?文档解释了如何设置中心和缩放:developers.google.com/maps/documentation/android/views
-
它不是 GMaps v2 的 Google Play 服务库的一部分。所以我正在尝试转换 MapController 功能,使其与 v2 兼容。我不知道该怎么做。我的代码中的所有问题都与 MapController 类有关。
-
当您点击我之前评论中的超链接并阅读该网页时,您学到了什么?
-
所有这些功能都已内置到 v2...
-
使用特定地理点设置地图中心的功能在哪里?我在 Gmaps v1.1 中的 setCenter() 文档中找不到任何类似的东西。
标签: java android google-maps android-location