예제 #1
0
 private static bool checkCross(LatLng p1, LatLng p2, LatLng p3, LatLng p4)
 {
     LatLng v1 = new LatLng { Lng = p1.Lng - p3.Lng, Lat = p1.Lat - p3.Lat };
     LatLng v2 = new LatLng { Lng = p2.Lng - p3.Lng, Lat = p2.Lat - p3.Lat };
     LatLng v3 = new LatLng { Lng = p4.Lng - p3.Lng, Lat = p4.Lat - p3.Lat };
     double v = crossMul(v1, v3) * crossMul(v2, v3);
     v1 = new LatLng { Lng = p3.Lng - p1.Lng, Lat = p3.Lat - p1.Lat };
     v2 = new LatLng { Lng = p4.Lng - p1.Lng, Lat = p4.Lat - p1.Lat };
     v3 = new LatLng { Lng = p2.Lng - p1.Lng, Lat = p2.Lat - p1.Lat };
     return (v <= 0 && crossMul(v1, v3) * crossMul(v2, v3) <= 0) ? true : false;
 }
예제 #2
0
 /// <summary>
 /// 判断点是否在多变形内
 /// </summary>
 /// <param name="point">测试点</param>
 /// <param name="polygon">面多边形</param>
 /// <returns></returns>
 public static bool IsInPolygon(LatLng point, List<LatLng> polygon)
 {
     LatLng p1, p2, p3, p4;
     p1 = point;
     p2 = new LatLng() { Lng = -180, Lat = point.Lat };
     Int32 count = 0;
     for (var i = 0; i < polygon.Count-1; i++)
     {
         p3 = polygon[i];
         p4 = polygon[i + 1];
         if (checkCross(p1, p2, p3, p4))
         {
             count++;
         }
     }
     p3 = polygon[polygon.Count - 1];
     p4 = polygon[0];
     if (checkCross(p1, p2, p3, p4))
     {
         count++;
     }
     return (count % 2 == 0) ? false : true;
 }
예제 #3
0
 /// <summary>
 /// 向量叉乘
 /// </summary>
 /// <param name="v1"></param>
 /// <param name="v2"></param>
 /// <returns></returns>
 private static double crossMul(LatLng v1, LatLng v2)
 {
     return v1.Lng * v2.Lat - v2.Lng * v1.Lat;
 }
예제 #4
0
 public static bool IsInCircle(LatLng center, LatLng testPoint, double radius)
 {
     return IsInCircle(center.Lat, center.Lng, testPoint.Lat, testPoint.Lng, radius);
 }