我有已知gps坐标点a(lon,lat),并且有已知线段 bc(两个gps点),如何计算a点到bc线段的垂直距离?
在线等

解决方案 »

  1.   

    http://topic.csdn.net/u/20101108/09/C329F411-AD48-4C9D-B6A8-97CE14B37E79.html#r_69677016/// <summary> 
    /// 自定义数字解析函数 
    /// 作者:三角猫 
    /// 说明:如果输入的字符串为空或非数字开头则返回0,否则返回解析结果 
    /// </summary> 
    /// <param name="v">输入的字符串</param> 
    /// <returns>解析后的结果</returns> 
    static double CustomNumericParse(string v) 

    if (string.IsNullOrEmpty(v)) return 0d; //如果输入的字符串为空或NULL,则直接返回0 
    if (!char.IsDigit(v[0])) return 0d; //如果输入的字符串是非数字开头,直接返回0 
    string subV = string.Empty; 
    for (int i = 0; i < v.Length; i++) 

    if (char.IsDigit(v[i]) || (v[i].Equals('.') && !subV.Contains("."))) //从左至右,判断字符串的每位字符是否是数字或小数点,小数点只保留第一个 
    subV += v[i]; 
    else 
    break; 
    } subV.TrimEnd(new char[] { '.' }); // 如果解析后的子字符串的末位是小数点,则去掉它 double returnV = 0d; 
    if (subV.Contains(".")) // 如果解析结果包含小数点,则根据小数点分两段求值 

    string strPointRight = subV.Substring(subV.IndexOf('.') + 1); //小数点右侧部分 
    subV = subV.Substring(0, subV.IndexOf('.')); //小数点左侧部分 //计算小数点右侧的部分 
    for (int i = 0; i < strPointRight.Length; i++) 

    returnV += ((int)strPointRight[i] - 48) / Math.Pow(10, i+1); //(int)strPointRight[i] 是取该字符的ASCII码 

    } //计算小数点左侧的部分 
    int iLen = subV.Length; //小数点左侧部分的长度 for (int i = 0; i < iLen; i++) 

    returnV += ((int)subV[i] - 48) * Math.Pow(10, iLen - 1 - i); //按位乘以10的幂,并和小数点右侧结果相加 
    } return returnV; 
    } //使用方法 
    string a = "123.98adfd"; Console.Write(CustomNumericParse(a));
      

  2.   

    你这个代码是什么??我是传gps点进去,为什么要解析字符串啊?还有,你给的那个连接,里面的方法是让做垂直线,我要是能做垂直线我就直接算a点到相交点的距离了,我现在求的就是那个相交点在直线的位置
      

  3.   

    到线段的距离也就是到直线的垂直距离,这你可以下载下面的文档乍看看:
    http://www.hz4z.com/tea/SXZ/UploadFiles_5684/200805/2008051308533290.doc但是,GPS得到的是地球表面的球面坐标,短距离可以近似计算,距离远了就要用球面的方法计算了,计算很复杂
      

  4.   

    谢谢,我最后还是参照了海伦定理,通过面积来计算,还好,我gps点组成的直线差距并不大,我设置成了100米,百米范围内,用平面方式来解还是靠谱的,偏移量不会超过10米,还是只有你认真看了标题的,分给你了