【问题标题】:Issue Converting Over To GMaps v2 for Android转换到 GMaps v2 for Android 的问题
【发布时间】: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


【解决方案1】:

这样做会使地图以一个点为中心

CameraPosition position = new CameraPosition.Builder()
            .target(new LatLng(Lat,Lon))
            .zoom(zoom).build();

         map.animateCamera(CameraUpdateFactory.newCameraPosition(position));

【讨论】:

    猜你喜欢
    • 2014-05-03
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 2023-03-19
    • 1970-01-01
    • 2015-05-26
    相关资源
    最近更新 更多