Commit b144777e8becdaf27db3629a98213fa8056012b1

Authored by 韩亚云
1 parent 63fcc83f

添加点到线距离的方法

moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/utils/MyMapUtil.java
@@ -3,18 +3,15 @@ package com.cnlive.moudle.pedometer.utils; @@ -3,18 +3,15 @@ package com.cnlive.moudle.pedometer.utils;
3 import android.content.Context; 3 import android.content.Context;
4 import android.graphics.Bitmap; 4 import android.graphics.Bitmap;
5 import android.graphics.BitmapFactory; 5 import android.graphics.BitmapFactory;
6 -import android.graphics.Color;  
7 6
8 import com.baidu.mapapi.map.BaiduMap; 7 import com.baidu.mapapi.map.BaiduMap;
9 import com.baidu.mapapi.map.BitmapDescriptorFactory; 8 import com.baidu.mapapi.map.BitmapDescriptorFactory;
10 -import com.baidu.mapapi.map.Marker;  
11 import com.baidu.mapapi.map.MarkerOptions; 9 import com.baidu.mapapi.map.MarkerOptions;
12 import com.baidu.mapapi.map.Overlay; 10 import com.baidu.mapapi.map.Overlay;
13 import com.baidu.mapapi.map.OverlayOptions; 11 import com.baidu.mapapi.map.OverlayOptions;
14 import com.baidu.mapapi.map.PolylineOptions; 12 import com.baidu.mapapi.map.PolylineOptions;
15 import com.baidu.mapapi.model.LatLng; 13 import com.baidu.mapapi.model.LatLng;
16 import com.baidu.trace.model.SortType; 14 import com.baidu.trace.model.SortType;
17 -import com.example.moudle_pedometer.R;  
18 15
19 import java.util.List; 16 import java.util.List;
20 17
@@ -385,4 +382,55 @@ public class MyMapUtil { @@ -385,4 +382,55 @@ public class MyMapUtil {
385 return true; 382 return true;
386 } 383 }
387 } 384 }
  385 +
  386 +
  387 + /**
  388 + * luming
  389 + * 点到边的最短距离
  390 + * @param pointP
  391 + * @param pointA
  392 + * @param pointB
  393 + * @return
  394 + */
  395 + public static double minDistanceToLine(LatLng pointP, LatLng pointA, LatLng pointB){
  396 + double pa = getDistance(pointP,pointA);
  397 + double pb = getDistance(pointP,pointB);
  398 + double ab = getDistance(pointA,pointB);
  399 +
  400 + if((Math.pow(pa,2) + Math.pow(ab,2)) <= Math.pow(pb,2) ){
  401 + return pa;
  402 + }
  403 + if((Math.pow(pb,2) + Math.pow(ab,2)) <= Math.pow(pa,2) ){
  404 + return pb;
  405 + }
  406 +
  407 + double p = (pa + pb + ab) / 2 ;
  408 + double s = Math.sqrt(p*(p-pa)*(p-pb)*(p-ab));
  409 +
  410 + return (2*s/ab);
  411 + }
  412 +
  413 + /**
  414 + * 通过经纬度获取距离(单位:米)
  415 + * @param location1
  416 + * @param location2
  417 + * @return
  418 + */
  419 + public static double getDistance(LatLng location1,LatLng location2) {
  420 + double lat1 = location1.latitude;
  421 + double lat2 = location2.latitude;
  422 + double lng1 = location1.longitude;
  423 + double lng2 = location2.longitude;
  424 + double radLat1 = rad(lat1);
  425 + double radLat2 = rad(lat2);
  426 + double a = radLat1 - radLat2;
  427 + double b = rad(lng1) - rad(lng2);
  428 + double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
  429 + + Math.cos(radLat1) * Math.cos(radLat2)
  430 + * Math.pow(Math.sin(b / 2), 2)));
  431 + s = s * EARTH_RADIUS;
  432 + s = Math.round(s * 10000d) / 10000d;
  433 + s = s*1000;
  434 + return s;
  435 + }
388 } 436 }