/// <summary>
/// 判断经纬度是否在范围类
/// </summary>
/// <param name="longitudeCur">经度</param>
/// <param name="latitudeCur">纬度</param>
/// <param name="pathList"></param>
/// <returns></returns>
public static bool IsInRegion(double longitudeCur, double latitudeCur, IList<RegionPath> pathList)
{
if (pathList.Count < 3)//点小于3无法构成多边形
{
return false;
}
int iSum = 0;
int pathCount = pathList.Count;
double longStart = 0, latiStart = 0, longEnd = 0, latiEnd = 0;
double dLong = 0;
for (int i = 0; i < pathCount; i++)
{
int nextIndex = i + 1;
if (i == pathCount - 1)
{
nextIndex = 0;
}
longStart = pathList[i].Longitude;
latiStart = pathList[i].Latitude;
longEnd = pathList[nextIndex].Longitude;
latiEnd = pathList[nextIndex].Latitude;
//判断纬度即Y坐标是否在2点的Y坐标内,只有在其内水平线才会相交
if ((latitudeCur >= latiStart && latitudeCur < latiEnd) ||
(latitudeCur >= latiEnd && latitudeCur < latiStart))
{
if (Math.Abs(latiStart-latiEnd)>0)
{
dLong = longStart - ((longStart - longEnd) * (latiStart - latitudeCur)) / (latiStart - latiEnd);
if (dLong < longitudeCur)
{
iSum++;
}
}
}
}
if ((iSum % 2) != 0)
{
return true;
}
return false;
}