mapbox java 服务
java-service
1. 线条简化(Simplify)
减少(reduces)构成线条的坐标点数量(amount),通过一个容忍(tolerance)的偏差值。
List<Point> after = PolylineUtils.simplify(points, 0.001);
PolylineUtils 包名 com.mapbox.geojson.utils ,所属的gradle依赖 com.mapbox.mapboxsdk:mapbox-sdk-geojson:5.5.0
PolylineUtils 中几个关键的方法:
simplifyRadialDist(List<Point> points, double sqTolerance) 根据距离先简化一次,相邻两个点的距离小于容忍值的时候,后面的点被舍弃掉。
getSqDist(Point p1, Point p2) 两个点距离的简单计算,没有开根。
simplifyDouglasPeucker(List<Point> points, double sqTolerance) 添加原线路首尾点,再利用 simplifyDpStep 方法处理
simplifyDpStep(List<Point> points, int first, int last, double sqTolerance, List<Point> simplified) 一个递归简化的方法
getSqSegDist(Point point, Point p1, Point p2) 点到后面两个点构成的线段距离,没有开根。
2. 匹配相似道路(Matching)
把一条GPS定位路线校准到道路上。
// Setup the request using a client.
MapboxMapMatching client = MapboxMapMatching.builder()
.accessToken(Objects.requireNonNull(Mapbox.getAccessToken()))
.profile(PROFILE_DRIVING)
.coordinates(points)
.build();
client.enqueueCall(new Callback<MapMatchingResponse>() { });
MapboxMapMatching 包名 com.mapbox.api.matching.v5 ,所属的gradle依赖 com.mapbox.mapboxsdk:mapbox-sdk-services:5.5.0
MapMatchingService 对应的 Retrofit 网络请求接口定义。
整个包里的内容使用 AutoValue 很多。
3. 导航线路获取(Directions)
MapboxDirections client = MapboxDirections.builder()
.origin(origin)
.destination(destination)
.overview(DirectionsCriteria.OVERVIEW_FULL)
.profile(DirectionsCriteria.PROFILE_DRIVING)
.accessToken(getString(R.string.access_token))
.build();
client.enqueueCall(new Callback<DirectionsResponse>() { });
MapboxMapMatching 包名 com.mapbox.api.directions.v5 ,所属的gradle依赖 com.mapbox.mapboxsdk:mapbox-sdk-services:5.5.0
DirectionsService 对应的 Retrofit 网络请求接口定义。
model数据不像matching也在mapbox-sdk-services中,单独写在了 com.mapbox.mapboxsdk:mapbox-sdk-directions-models:5.5.0
4. 多条导航线路最优化(Optimized Directions)
MapboxOptimization optimizedClient = MapboxOptimization.builder()
.source(FIRST)
.destination(ANY)
.coordinates(coordinates)
.overview(DirectionsCriteria.OVERVIEW_FULL)
.profile(DirectionsCriteria.PROFILE_DRIVING)
.accessToken(Mapbox.getAccessToken() != null ? Mapbox.getAccessToken() : getString(R.string.access_token))
.build();
optimizedClient.enqueueCall(new Callback<OptimizationResponse>() { });
MapboxOptimization 包名 com.mapbox.api.optimization.v1 ,所属的gradle依赖 com.mapbox.mapboxsdk:mapbox-sdk-services:5.5.0
OptimizationService 对应的 Retrofit 网络请求接口定义。
整个包里的内容使用 AutoValue 很多。
5. 静态地图(MapboxStaticMap)
MapboxStaticMap staticMap = MapboxStaticMap.builder()
.accessToken(getString(R.string.access_token))
.styleId(styleUrl)
.cameraPoint(Point.fromLngLat(cameraPosition.target.getLongitude(),
cameraPosition.target.getLatitude()))
.cameraZoom(cameraPosition.zoom)
.cameraPitch(cameraPosition.tilt)
.cameraBearing(cameraPosition.bearing)
.width(width)
.height(height)
.retina(true)
.build()
String imgPath = staticMap.url().toString();
MapboxStaticMap 包名 com.mapbox.api.staticmap.v1 ,所属的gradle依赖 com.mapbox.mapboxsdk:mapbox-sdk-services:5.5.0
没有网络请求,直接生成的一个url链接,这里给一个 imgPath 的示例:
https://api.mapbox.com/styles/v1/mapbox/streets-v11/static/122.426582,6.071399,3.000000,-0.000000,0.000000/1080x903@2x?access_token=sk.eyJ1IjoieXVhbi1tbCIsImEiOiJjbGl0bnl3amIwNXc2M2RsZmNmN2hrczQyIn0.OyEHezjFlJpWXYaaGquWCQ&logo=false&attribution=false
https://api.mapbox.com/ 是baseUrl,
styles 固定,v1 固定,
mapbox 是user,streets-v11 是地图样式id(styleId),
static 固定,
122.426582,6.071399,3.000000,-0.000000,0.000000 是中心点经纬度、级别、旋转、俯仰,这部分也可以是auto,
1080x903@2x 是宽高还有retina,retina的放大之后会清晰些,
access_token 参数,
logo 参数,只能是true或者false,是否在左下角显示logo,
attribution 参数,只能是true或者false,是否在右下角显示attribution,
6. 检索多个点之间的距离(Matrix API)
MapboxMatrix directionsMatrixClient = MapboxMatrix.builder()
.accessToken(getString(R.string.access_token))
.profile(DirectionsCriteria.PROFILE_DRIVING)
.coordinates(pointList)
.build();
directionsMatrixClient.enqueueCall(new Callback<MatrixResponse>() { });
// 距离长度的单位转换,米,英尺等
TurfConversion.convertLength(@FloatRange(from = 0) double distance,
@NonNull @TurfUnitCriteria String originalUnit,
@Nullable @TurfUnitCriteria String finalUnit)
MapboxMatrix 包名 com.mapbox.api.matrix.v1 ,所属的gradle依赖 com.mapbox.mapboxsdk:mapbox-sdk-services:5.5.0
MatrixService 对应的 Retrofit 网络请求接口定义。
7. 逆地理(Geocoding)
MapboxGeocoding client = MapboxGeocoding.builder()
.accessToken(getString(R.string.access_token))
.query(Point.fromLngLat(latLng.getLongitude(), latLng.getLatitude()))
.geocodingTypes(GeocodingCriteria.TYPE_PLACE)
.mode(GeocodingCriteria.MODE_PLACES)
.build();
client.enqueueCall(new Callback<GeocodingResponse>() { });
MapboxGeocoding 包名 com.mapbox.api.geocoding.v5 ,所属的gradle依赖 com.mapbox.mapboxsdk:mapbox-sdk-services:5.5.0
GeocodingService 对应的 Retrofit 网络请求接口定义。
8. 等时线(Isochrone)
MapboxIsochrone mapboxIsochroneRequest = MapboxIsochrone.builder()
.accessToken(getString(R.string.access_token))
.profile(IsochroneCriteria.PROFILE_DRIVING)
.addContoursMinutes(contourMinutes[0], contourMinutes[1], contourMinutes[2])
.polygons(usePolygon)
.addContoursColors(contourColors[0], contourColors[1], contourColors[2])
.generalize(2f)
.denoise(.4f)
.coordinates(Point.fromLngLat(mapClickPoint.getLongitude(), mapClickPoint.getLatitude()))
.build();
mapboxIsochroneRequest.enqueueCall(new Callback<FeatureCollection>() { });
MapboxIsochrone 包名 com.mapbox.api.isochrone ,所属的gradle依赖 com.mapbox.mapboxsdk:mapbox-sdk-services:5.5.0
IsochroneService 对应的 Retrofit 网络请求接口定义。
9. 瓦片查询(TileQuery) 高程查询
高程查询的 layers 是 “contour”
MapboxTilequery tilequery = MapboxTilequery.builder()
.accessToken(getString(R.string.access_token))
.tilesetIds("mapbox.mapbox-streets-v7")
.query(Point.fromLngLat(point.getLongitude(), point.getLatitude()))
.radius(50)
.limit(10)
.geometry("polygon")
.dedupe(true)
.layers("building")
.build();
tilequery.enqueueCall(new Callback<FeatureCollection>() { });
MapboxTilequery 包名 com.mapbox.api.tilequery ,所属的gradle依赖 com.mapbox.mapboxsdk:mapbox-sdk-services:5.5.0
TilequeryService 对应的 Retrofit 网络请求接口定义。
10. 构造圆(Circle)
TurfTransformation.circle(centerPoint, radius, CIRCLE_STEPS, UNIT_MILES);
TurfTransformation 包名 com.mapbox.turf ,大名鼎鼎的 turf 包,都是一些简单算法工具类。
TurfTransformation 中只有构造圆的 circle() 方法。
11. 测距(Distance)
TurfMeasurement.distance(@NonNull Point point1, @NonNull Point point2);
TurfMeasurement 包名 com.mapbox.turf ,还有方位角、目标点、中点、bbox、面积、沿一条线返回距离起点指定距离的点等。
12. 示例没有了,写一些其它
// 沿一条线返回距离起点指定距离的点,返回Point对象,只有经纬度值
TurfMeasurement.nearestPointOnLine(@NonNull Point pt, @NonNull List<Point> coords);
// 找到一条线上离某个点最近的点,返回Feature对象,图形是点,还包含两个点的距离信息"dist",还有"index"属性
TurfMisc.nearestPointOnLine(@NonNull Point pt, @NonNull List<Point> coords);
// 返回一条线两个点中间的部分,两个点可以不在线条上,找的是两个点离线条最近的两个点之间的线条
TurfMisc.lineSlice(@NonNull Point startPt, @NonNull Point stopPt, @NonNull Feature line);
// 返回一条线 距离起点startDist距离 到 距离起点stopDist距离 之间的线条
TurfMisc.lineSliceAlong(@NonNull Feature line, @FloatRange(from = 0) double startDist, @FloatRange(from = 0) double stopDist, @NonNull @TurfConstants.TurfUnitCriteria String units);