diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/search/RoadSearchClient.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/search/RoadSearchClient.java new file mode 100644 index 0000000000..71ff552352 --- /dev/null +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/search/RoadSearchClient.java @@ -0,0 +1,135 @@ +package com.mogo.map.impl.amap.search; + +import android.content.Context; + +import com.amap.api.services.core.LatLonPoint; +import com.amap.api.services.route.BusRouteResult; +import com.amap.api.services.route.DrivePath; +import com.amap.api.services.route.DriveRouteResult; +import com.amap.api.services.route.DriveStep; +import com.amap.api.services.route.RideRouteResult; +import com.amap.api.services.route.RouteSearch; +import com.amap.api.services.route.WalkRouteResult; +import com.mogo.map.MogoLatLng; +import com.mogo.map.impl.amap.utils.ObjectUtils; +import com.mogo.map.search.drive.IMogoRoadSearch; +import com.mogo.map.search.drive.IMogoRoadSearchListener; +import com.mogo.map.search.drive.MogoRoadSearchQuery; +import com.mogo.utils.logger.Logger; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author congtaowang + * @since 2020/6/1 + *

+ * 描述 + */ +public class RoadSearchClient implements IMogoRoadSearch, RouteSearch.OnRouteSearchListener { + + private static final String TAG = "DriveSearchClient"; + + private RouteSearch mRouteSearch; + private IMogoRoadSearchListener mListener; + + @Override + public void searchRoadPath( Context context, + MogoRoadSearchQuery query ) { + + if ( query == null ) { + return; + } + + if ( !checkPoint( query.mStart, "起点坐标" ) ) { + return; + } + + if ( !checkPoint( query.mTarget, "终点坐标" ) ) { + return; + } + + RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo( ObjectUtils.fromMogo( query.mStart ), ObjectUtils.fromMogo( query.mTarget ) ); + final List< LatLonPoint > latLonPointWays = new ArrayList<>(); + if ( query.mWays != null ) { + for ( MogoLatLng wayPoint : query.mWays ) { + if ( checkPoint( wayPoint, "途经点" ) ) { + latLonPointWays.add( ObjectUtils.fromMogo( wayPoint ) ); + } + } + } + + RouteSearch.DriveRouteQuery searchQuery = new RouteSearch.DriveRouteQuery( fromAndTo, RouteSearch.DRIVING_SINGLE_SHORTEST, latLonPointWays, null, "" ); + if ( mRouteSearch == null ) { + mRouteSearch = new RouteSearch( context ); + } + mRouteSearch.calculateDriveRouteAsyn( searchQuery ); + } + + private boolean checkPoint( MogoLatLng latLng, String msg ) { + if ( latLng == null ) { + Logger.e( TAG, msg + " is null" ); + return false; + } + if ( latLng.lat <= 0d || latLng.lon <= 0d ) { + Logger.e( TAG, msg + " is not a valid " ); + return false; + } + return true; + } + + @Override + public void setRoadPathSearchListener( IMogoRoadSearchListener listener ) { + mListener = listener; + } + + @Override + public void onBusRouteSearched( BusRouteResult busRouteResult, int i ) { + + } + + @Override + public void onDriveRouteSearched( DriveRouteResult driveRouteResult, int i ) { + if ( mListener == null ) { + return; + } + List< MogoLatLng > points = new ArrayList<>(); + + if ( driveRouteResult == null + || driveRouteResult.getPaths() == null + || driveRouteResult.getPaths().isEmpty() ) { + mListener.onDrivePathSearched( null ); + return; + } + DrivePath drivePath = driveRouteResult.getPaths().get( 0 ); + List< DriveStep > steps = drivePath.getSteps(); + if ( steps == null || steps.isEmpty() ) { + mListener.onDrivePathSearched( null ); + return; + } + for ( DriveStep step : steps ) { + List< LatLonPoint > polylineList = step.getPolyline(); + if ( polylineList == null || polylineList.isEmpty() ) { + continue; + } + for ( LatLonPoint latLonPoint : polylineList ) { + MogoLatLng latLng = ObjectUtils.fromAMap( latLonPoint ); + if ( latLng == null ) { + continue; + } + points.add( latLng ); + } + } + mListener.onDrivePathSearched( points ); + } + + @Override + public void onWalkRouteSearched( WalkRouteResult walkRouteResult, int i ) { + + } + + @Override + public void onRideRouteSearched( RideRouteResult rideRouteResult, int i ) { + + } +} diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/drive/IMogoRoadSearch.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/drive/IMogoRoadSearch.java new file mode 100644 index 0000000000..934380bb86 --- /dev/null +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/drive/IMogoRoadSearch.java @@ -0,0 +1,16 @@ +package com.mogo.map.search.drive; + +import android.content.Context; + +/** + * @author congtaowang + * @since 2020/6/1 + *

+ * 驾驶路线 + */ +public interface IMogoRoadSearch { + + void searchRoadPath( Context context, MogoRoadSearchQuery query ); + + void setRoadPathSearchListener( IMogoRoadSearchListener listener ); +} diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/drive/IMogoRoadSearchListener.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/drive/IMogoRoadSearchListener.java new file mode 100644 index 0000000000..87d3c5eb3d --- /dev/null +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/drive/IMogoRoadSearchListener.java @@ -0,0 +1,16 @@ +package com.mogo.map.search.drive; + +import com.mogo.map.MogoLatLng; + +import java.util.List; + +/** + * @author congtaowang + * @since 2020/6/1 + *

+ * 描述 + */ +public interface IMogoRoadSearchListener { + + void onDrivePathSearched( List< MogoLatLng > points ); +} diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/drive/MogoRoadSearchQuery.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/drive/MogoRoadSearchQuery.java new file mode 100644 index 0000000000..00684eb74c --- /dev/null +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/drive/MogoRoadSearchQuery.java @@ -0,0 +1,36 @@ +package com.mogo.map.search.drive; + +import com.mogo.map.MogoLatLng; + +import java.util.List; + +/** + * @author congtaowang + * @since 2020/6/1 + *

+ * 描述 + */ +public class MogoRoadSearchQuery { + + public MogoLatLng mStart; + public MogoLatLng mTarget; + public List mWays; + + public MogoRoadSearchQuery() { + } + + public MogoRoadSearchQuery setStart( MogoLatLng start ) { + this.mStart = start; + return this; + } + + public MogoRoadSearchQuery setTarget( MogoLatLng target ) { + this.mTarget = target; + return this; + } + + public MogoRoadSearchQuery setWays( List< MogoLatLng > ways ) { + this.mWays = ways; + return this; + } +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoRoadSearch.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoRoadSearch.java new file mode 100644 index 0000000000..cbd86301c0 --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoRoadSearch.java @@ -0,0 +1,37 @@ +package com.mogo.map; + +import android.content.Context; + +import com.mogo.map.impl.amap.search.RoadSearchClient; +import com.mogo.map.search.drive.IMogoRoadSearch; +import com.mogo.map.search.drive.IMogoRoadSearchListener; +import com.mogo.map.search.drive.MogoRoadSearchQuery; + +/** + * @author congtaowang + * @since 2020/6/1 + *

+ * 描述 + */ +public class MogoRoadSearch implements IMogoRoadSearch { + + private RoadSearchClient mDelegate; + + public MogoRoadSearch() { + mDelegate = new RoadSearchClient(); + } + + @Override + public void searchRoadPath( Context context, MogoRoadSearchQuery query ) { + if ( mDelegate != null ) { + mDelegate.searchRoadPath( context, query ); + } + } + + @Override + public void setRoadPathSearchListener( IMogoRoadSearchListener listener ) { + if ( mDelegate != null ) { + mDelegate.setRoadPathSearchListener( listener ); + } + } +} diff --git a/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml index 9a6c7dcab9..84cbe5846f 100644 --- a/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml @@ -119,10 +119,10 @@ 8px - 526px - 200px - 83px - 82px + 550px + 208px + 100px + 100px 16px 142px 66px diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml index a29ccd00e5..c7da3be0df 100644 --- a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml @@ -116,10 +116,10 @@ 15px - 950px - 320px - 150px - 150px + 1000px + 390px + 200px + 200px 240px 30px 120px diff --git a/modules/mogo-module-extensions/src/main/res/values/dimens.xml b/modules/mogo-module-extensions/src/main/res/values/dimens.xml index 45ce3e4886..be1987aaa6 100644 --- a/modules/mogo-module-extensions/src/main/res/values/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values/dimens.xml @@ -113,10 +113,10 @@ 15px - 950px - 320px - 150px - 150px + 1000px + 390px + 200px + 200px 30px 240px 120px diff --git a/modules/mogo-module-map/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-map/src/main/res/values-ldpi/dimens.xml index 0877bf204c..16c60e28c9 100644 --- a/modules/mogo-module-map/src/main/res/values-ldpi/dimens.xml +++ b/modules/mogo-module-map/src/main/res/values-ldpi/dimens.xml @@ -6,8 +6,8 @@ 80px - 526px - 200px - 83px - 82px + 550px + 208px + 100px + 100px \ No newline at end of file diff --git a/modules/mogo-module-map/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-map/src/main/res/values-xhdpi/dimens.xml index 03f0f80ee1..901ff994dc 100644 --- a/modules/mogo-module-map/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-map/src/main/res/values-xhdpi/dimens.xml @@ -6,8 +6,8 @@ 80px - 950px - 320px - 150px - 150px + 1000px + 390px + 200px + 200px \ No newline at end of file diff --git a/modules/mogo-module-map/src/main/res/values/dimens.xml b/modules/mogo-module-map/src/main/res/values/dimens.xml index 4cab8fda7f..cc7e335ad4 100644 --- a/modules/mogo-module-map/src/main/res/values/dimens.xml +++ b/modules/mogo-module-map/src/main/res/values/dimens.xml @@ -6,8 +6,8 @@ 61px 80px - 950px - 320px - 150px - 150px + 1000px + 390px + 200px + 200px \ No newline at end of file diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java b/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java index dce52487ec..0d47238536 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java @@ -4,14 +4,11 @@ import android.content.Context; import com.alibaba.android.arouter.facade.template.IProvider; import com.mogo.map.listener.IMogoHosListenerRegister; -import com.mogo.map.listener.IMogoMapListener; -import com.mogo.map.listener.IMogoMapListenerRegister; import com.mogo.map.location.IMogoLocationClient; import com.mogo.map.marker.IMogoMarkerManager; import com.mogo.map.navi.IMogoNavi; -import com.mogo.map.navi.IMogoNaviListener; -import com.mogo.map.navi.IMogoNaviListenerRegister; import com.mogo.map.overlay.IMogoOverlayManager; +import com.mogo.map.search.drive.IMogoRoadSearch; import com.mogo.map.search.geo.IMogoGeoSearch; import com.mogo.map.search.inputtips.IMogoInputtipsSearch; import com.mogo.map.search.inputtips.query.MogoInputtipsQuery; @@ -107,4 +104,11 @@ public interface IMogoMapService extends IProvider { * @return */ IMogoOverlayManager getOverlayManager( Context context ); + + /** + * 路线搜索 + * + * @return + */ + IMogoRoadSearch getRoadSearchApi(); } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java b/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java index 87a3ae0491..ac8d5c81fb 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java @@ -3,6 +3,7 @@ package com.mogo.service.impl.map; import android.content.Context; import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.map.MogoRoadSearch; import com.mogo.map.MogoGeoSearch; import com.mogo.map.MogoInputtipsSearch; import com.mogo.map.MogoLocationClient; @@ -17,6 +18,7 @@ import com.mogo.map.location.IMogoLocationClient; import com.mogo.map.marker.IMogoMarkerManager; import com.mogo.map.navi.IMogoNavi; import com.mogo.map.overlay.IMogoOverlayManager; +import com.mogo.map.search.drive.IMogoRoadSearch; import com.mogo.map.search.geo.IMogoGeoSearch; import com.mogo.map.search.inputtips.IMogoInputtipsSearch; import com.mogo.map.search.inputtips.query.MogoInputtipsQuery; @@ -85,6 +87,11 @@ public class MogoMapService implements IMogoMapService { return MogoOverlayManager.getInstance(); } + @Override + public IMogoRoadSearch getRoadSearchApi() { + return new MogoRoadSearch(); + } + @Override public void init( Context context ) { }