/** 调起高德地图导航功能,如果没安装高德地图,会进入异常,可以在异常中处理,调起高德地图app的下载页面 */
 public void startAMapNavi(Marker marker) {
   // 构造导航参数
   NaviPara naviPara = new NaviPara();
   // 设置终点位置
   naviPara.setTargetPoint(marker.getPosition());
   // 设置导航策略,这里是避免拥堵
   naviPara.setNaviStyle(AMapUtils.DRIVING_AVOID_CONGESTION);
   try {
     // 调起高德地图导航
     AMapUtils.openAMapNavi(naviPara, getApplicationContext());
   } catch (com.amap.api.maps.AMapException e) {
     // 如果没安装会进入异常,调起下载页面
     AMapUtils.getLatestAMapApp(getApplicationContext());
   }
 }
 private LatLng getPointForDis(LatLng sPt, LatLng ePt, double dis) {
   double lSegLength = AMapUtils.calculateLineDistance(sPt, ePt);
   double preResult = dis / lSegLength;
   return new LatLng(
       (ePt.latitude - sPt.latitude) * preResult + sPt.latitude,
       (ePt.longitude - sPt.longitude) * preResult + sPt.longitude);
 }
示例#3
0
 // 高德地图提供计算两点的距离 返回km
 public static float CalculateDistance(
     double start_lat, double start_lng, double end_lat, double end_lng) {
   LatLng start = new LatLng(start_lat, start_lng);
   LatLng end = new LatLng(end_lat, end_lng);
   float dis = AMapUtils.calculateLineDistance(start, end);
   dis = dis / 1000;
   return dis;
 }
示例#4
0
 /** 计算距离 */
 public void calculateDistance(Double lati, Double logti) {
   LatLng startpos =
       new LatLng(mTown.getGeoinfo().getLatitude(), mTown.getGeoinfo().getLongitude());
   LatLng endpos = new LatLng(lati, logti);
   float distan = AMapUtils.calculateLineDistance(startpos, endpos);
   if (distan < DISTANCE) {
     LogUtil.v("MessboardActivity info: ", "distance is in 50!");
     this.mEditView.setVisibility(View.VISIBLE);
     this.mTophint.setText(getString(R.string.messboard_canmess));
     // stop location
     this.stopLocation();
   } else {
     LogUtil.v("MessboardActivity info: ", "distance is out of 50!");
     this.mTophint.setText(getString(R.string.messboard_showdistan, (int) distan));
   }
 }
示例#5
0
  /*
   * 返回 km
   * */
  public static double getDistance(double lat1, double lng1, double lat2, double lng2) {
    LatLng start = new LatLng(lat1, lng1);
    LatLng end = new LatLng(lat2, lng2);
    double radLat1 = rad(lat1);
    double radLat2 = rad(lat2);
    double a = radLat1 - radLat2;
    double b = rad(lng1) - rad(lng2);
    double s =
        2
            * Math.asin(
                Math.sqrt(
                    Math.pow(Math.sin(a / 2), 2)
                        + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
    s = s * EARTH_RADIUS;
    s = Math.round(s * 10000) / 10000.0;
    float result[] = new float[1];
    Location.distanceBetween(lat1, lng1, lat2, lng2, result);
    s = Math.round(((double) result[0] / 1000) * 100) / 100.0;

    AMapUtils.calculateLineDistance(start, end);
    return s;
  }
 private void colorWayUpdate(List<TMC> tmcSection) {
   if (mAMap == null) {
     return;
   }
   if (mLatLngsOfPath == null || mLatLngsOfPath.size() <= 0) {
     return;
   }
   if (tmcSection == null || tmcSection.size() <= 0) {
     return;
   }
   int j = 0;
   LatLng startLatLng = mLatLngsOfPath.get(0);
   LatLng endLatLng = null;
   double segmentTotalDistance = 0;
   TMC segmentTrafficStatus;
   List<LatLng> tempList = new ArrayList<LatLng>();
   // 画出起点到规划路径之间的连线
   addPolyLine(new PolylineOptions().add(startPoint, startLatLng).setDottedLine(true));
   // 终点和规划路径之间连线
   addPolyLine(
       new PolylineOptions()
           .add(mLatLngsOfPath.get(mLatLngsOfPath.size() - 1), endPoint)
           .setDottedLine(true));
   for (int i = 0; i < mLatLngsOfPath.size() && j < tmcSection.size(); i++) {
     segmentTrafficStatus = tmcSection.get(j);
     endLatLng = mLatLngsOfPath.get(i);
     double distanceBetweenTwoPosition = AMapUtils.calculateLineDistance(startLatLng, endLatLng);
     segmentTotalDistance = segmentTotalDistance + distanceBetweenTwoPosition;
     if (segmentTotalDistance > segmentTrafficStatus.getDistance() + 1) {
       double toSegDis =
           distanceBetweenTwoPosition
               - (segmentTotalDistance - segmentTrafficStatus.getDistance());
       LatLng middleLatLng = getPointForDis(startLatLng, endLatLng, toSegDis);
       tempList.add(middleLatLng);
       startLatLng = middleLatLng;
       i--;
     } else {
       tempList.add(endLatLng);
       startLatLng = endLatLng;
     }
     if (segmentTotalDistance >= segmentTrafficStatus.getDistance()
         || i == mLatLngsOfPath.size() - 1) {
       if (j == tmcSection.size() - 1 && i < mLatLngsOfPath.size() - 1) {
         for (i++; i < mLatLngsOfPath.size(); i++) {
           LatLng lastLatLng = mLatLngsOfPath.get(i);
           tempList.add(lastLatLng);
         }
       }
       j++;
       if (segmentTrafficStatus.getStatus().equals("畅通")) {
         addPolyLine((new PolylineOptions()).addAll(tempList).width(mWidth).color(Color.GREEN));
       } else if (segmentTrafficStatus.getStatus().equals("缓行")) {
         addPolyLine((new PolylineOptions()).addAll(tempList).width(mWidth).color(Color.YELLOW));
       } else if (segmentTrafficStatus.getStatus().equals("拥堵")) {
         addPolyLine((new PolylineOptions()).addAll(tempList).width(mWidth).color(Color.RED));
       } else if (segmentTrafficStatus.getStatus().equals("严重拥堵")) {
         addPolyLine(
             (new PolylineOptions())
                 .addAll(tempList)
                 .width(mWidth)
                 .color(Color.parseColor("#990033")));
       } else {
         addPolyLine(
             (new PolylineOptions())
                 .addAll(tempList)
                 .width(mWidth)
                 .color(Color.parseColor("#537edc")));
       }
       tempList.clear();
       tempList.add(startLatLng);
       segmentTotalDistance = 0;
     }
     if (i == mLatLngsOfPath.size() - 1) {
       addPolyLine(new PolylineOptions().add(endLatLng, endPoint).setDottedLine(true));
     }
   }
 }