401 lines
9.8 KiB
Java
401 lines
9.8 KiB
Java
package com.mogo.map;
|
|
|
|
import android.graphics.Point;
|
|
import android.graphics.Rect;
|
|
import android.location.Location;
|
|
import android.util.Log;
|
|
import android.view.View;
|
|
import android.view.animation.Interpolator;
|
|
|
|
import com.mogo.map.marker.IMogoMarker;
|
|
import com.mogo.map.uicontroller.CarCursorOption;
|
|
import com.mogo.map.uicontroller.EnumMapUI;
|
|
import com.mogo.map.uicontroller.IMogoMapUIController;
|
|
import com.mogo.map.uicontroller.MapCameraPosition;
|
|
import com.mogo.map.uicontroller.MapControlResult;
|
|
import com.mogo.utils.logger.Logger;
|
|
|
|
import org.json.JSONObject;
|
|
|
|
import java.util.List;
|
|
|
|
/**
|
|
* @author congtaowang
|
|
* @since 2019-12-26
|
|
* <p>
|
|
* 描述
|
|
*/
|
|
public class MogoMapUIController implements IMogoMapUIController {
|
|
|
|
private static final String TAG = "MogoMapUIController";
|
|
|
|
private IMogoMapUIController mDelegate;
|
|
|
|
private static volatile MogoMapUIController sInstance;
|
|
|
|
private MogoMapUIController() {
|
|
initDelegate();
|
|
}
|
|
|
|
public static MogoMapUIController getInstance() {
|
|
if ( sInstance == null ) {
|
|
synchronized ( MogoMapUIController.class ) {
|
|
if ( sInstance == null ) {
|
|
sInstance = new MogoMapUIController();
|
|
}
|
|
}
|
|
}
|
|
return sInstance;
|
|
}
|
|
|
|
public void setDelegate( IMogoMapUIController mDelegate ) {
|
|
this.mDelegate = mDelegate;
|
|
}
|
|
|
|
public static synchronized void release() {
|
|
sInstance = null;
|
|
}
|
|
|
|
@Override
|
|
public void setTrafficEnabled( boolean visible ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.setTrafficEnabled( visible );
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public MapControlResult changeZoom( boolean zoom ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
return mDelegate.changeZoom( zoom );
|
|
}
|
|
return MapControlResult.ERROR;
|
|
}
|
|
|
|
@Override
|
|
public MapControlResult changeZoom( float zoom ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
return mDelegate.changeZoom( zoom );
|
|
}
|
|
return MapControlResult.ERROR;
|
|
}
|
|
|
|
@Override
|
|
public void changeMapMode( EnumMapUI mode ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
Logger.d( TAG, "set type: %s", mode.name() );
|
|
mDelegate.changeMapMode( mode );
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
public void moveToCenter( MogoLatLng latLng, boolean animate ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.moveToCenter( latLng, animate );
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void showMyLocation( boolean visible ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.showMyLocation( visible );
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void emphasizeMyLocation() {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.emphasizeMyLocation();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void showMyLocation( View view ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.showMyLocation( view );
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void recoverLockMode() {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.recoverLockMode();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void loseLockMode() {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.loseLockMode();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void setLockZoom( int var1 ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.setLockZoom( var1 );
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void displayOverview( Rect bounds ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.displayOverview( bounds );
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public float getScalePerPixel() {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
return mDelegate.getScalePerPixel();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public float getZoomLevel() {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
return mDelegate.getZoomLevel();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public float getRoadWidth(double lon, double lat, float angle, boolean isGpsLocation, boolean isRTK) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
return mDelegate.getRoadWidth(lon, lat, angle, isGpsLocation, isRTK);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public MogoLatLng getCameraNorthEastPosition() {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
return mDelegate.getCameraNorthEastPosition();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public MogoLatLng getCameraSouthWestPosition() {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
return mDelegate.getCameraSouthWestPosition();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public MogoLatLng getWindowCenterLocation() {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
return mDelegate.getWindowCenterLocation();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public void setPointToCenter( double mapCenterX, double mapCenterY ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.setPointToCenter( mapCenterX, mapCenterY );
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Point getLocationPointInScreen( MogoLatLng latLng ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
return mDelegate.getLocationPointInScreen( latLng );
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public MogoLatLng getLocationMogoLatLngInScreen( Point point ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
return mDelegate.getLocationMogoLatLngInScreen( point );
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public void startJumpAnimation( IMogoMarker marker, float high, Interpolator interpolator, long duration ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.startJumpAnimation( marker, high, interpolator, duration );
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void setRenderFps( int fps ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.setRenderFps( fps );
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void showBounds( String tag, MogoLatLng carPosition, List< MogoLatLng > lonLats, Rect bound, boolean lockCarPosition ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.showBounds( tag, carPosition, lonLats, bound, lockCarPosition );
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void forceRender() {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.forceRender();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public float calculateLineDistance( MogoLatLng p1, MogoLatLng p2 ) throws Exception {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
return mDelegate.calculateLineDistance( p1, p2 );
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public EnumMapUI getCurrentUiMode() {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
return mDelegate.getCurrentUiMode();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public void changeMyLocation( Location location ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.changeMyLocation( location );
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean isCarLocked() {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
return mDelegate.isCarLocked();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public void setCarCursorOption( CarCursorOption option ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.setCarCursorOption( option );
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public MapCameraPosition getMapCameraPosition() {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
return mDelegate.getMapCameraPosition();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public void changeBearing( float bearing ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.changeBearing( bearing );
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void rtkEnable( boolean enable ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.rtkEnable( enable );
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void syncLocation2Map( JSONObject data ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.syncLocation2Map( data );
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void destroy() {
|
|
mDelegate = null;
|
|
}
|
|
|
|
private void initDelegate() {
|
|
if ( mDelegate == null ) {
|
|
mDelegate = MogoMapDelegateFactory.getMapUIControllerDelegate();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void openVrMode( boolean zoomGestureEnable ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.openVrMode( zoomGestureEnable );
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public double[] matchRoad( String id, double lon, double lat, double angle, boolean isGpsLocation, boolean isRTK ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
return mDelegate.matchRoad( id, lon, lat, angle, isGpsLocation, isRTK );
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public String getMarkerInfoResName( String speedVal ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
return mDelegate.getMarkerInfoResName( speedVal );
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public void setMarkerInfoResName( String speedVal, String val ) {
|
|
initDelegate();
|
|
if ( mDelegate != null ) {
|
|
mDelegate.setMarkerInfoResName( speedVal, val );
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void clearRoadCacheById(String id) {
|
|
initDelegate();
|
|
if (mDelegate != null) {
|
|
mDelegate.clearRoadCacheById(id);
|
|
}
|
|
}
|
|
}
|