mapbox java 服务

mapbox java 服务

  • java-service
    • 1. 线条简化(Simplify)
    • 2. 匹配相似道路(Matching)
    • 3. 导航线路获取(Directions)
    • 4. 多条导航线路最优化(Optimized Directions)
    • 5. 静态地图(MapboxStaticMap)
    • 6. 检索多个点之间的距离(Matrix API)
    • 7. 逆地理(Geocoding)
    • 8. 等时线(Isochrone)
    • 9. 瓦片查询(TileQuery) 高程查询
    • 10. 构造圆(Circle)
    • 11. 测距(Distance)
    • 12. 示例没有了,写一些其它

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 points, double sqTolerance) 根据距离先简化一次,相邻两个点的距离小于容忍值的时候,后面的点被舍弃掉。

getSqDist(Point p1, Point p2)  两个点距离的简单计算,没有开根。

simplifyDouglasPeucker(List points, double sqTolerance)  添加原线路首尾点,再利用 simplifyDpStep 方法处理

simplifyDpStep(List points, int first, int last, double sqTolerance, List 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);

你可能感兴趣的:(mapbox地图,android)