GIS算法--已知一点经纬度,方位角,距离求另一点
来源:互联网 发布:adobe软件破解补丁 编辑:程序博客网 时间:2024/05/18 02:50
已知一个点A的经纬度坐标,点B相对与A的方位角,B到A的距离,求B的经纬度坐标,用Javascript语言来完成该算法,借用了一下openL
CommonFunc.caculate={ VincentyConstants : { a: 6378137, b: 6356752.3142, f: 1/298.257223563 }, /** *Calculate destination point given start point lat/long (numeric degrees), * bearing (numeric degrees) & distance (in m). */ destinationVincenty : function(lonlat, brng, dist) { var u = this; var ct = u.VincentyConstants; var a = ct.a, b = ct.b, f = ct.f; var lon1 = lonlat.lon; var lat1 = lonlat.lat; var s = dist; var alpha1 = u.rad(brng); var sinAlpha1 = Math.sin(alpha1); var cosAlpha1 = Math.cos(alpha1); var tanU1 = (1-f) * Math.tan(u.rad(lat1)); var cosU1 = 1 / Math.sqrt((1 + tanU1*tanU1)), sinU1 = tanU1*cosU1; var sigma1 = Math.atan2(tanU1, cosAlpha1); var sinAlpha = cosU1 * sinAlpha1; var cosSqAlpha = 1 - sinAlpha*sinAlpha; var uSq = cosSqAlpha * (a*a - b*b) / (b*b); var A = 1 + uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq))); var B = uSq/1024 * (256+uSq*(-128+uSq*(74-47*uSq))); var sigma = s / (b*A), sigmaP = 2*Math.PI; while (Math.abs(sigma-sigmaP) > 1e-12) { var cos2SigmaM = Math.cos(2*sigma1 + sigma); var sinSigma = Math.sin(sigma); var cosSigma = Math.cos(sigma); var deltaSigma = B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)- B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM))); sigmaP = sigma; sigma = s / (b*A) + deltaSigma; } var tmp = sinU1*sinSigma - cosU1*cosSigma*cosAlpha1; var lat2 = Math.atan2(sinU1*cosSigma + cosU1*sinSigma*cosAlpha1, (1-f)*Math.sqrt(sinAlpha*sinAlpha + tmp*tmp)); var lambda = Math.atan2(sinSigma*sinAlpha1, cosU1*cosSigma - sinU1*sinSigma*cosAlpha1); var C = f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha)); var L = lambda - (1-C) * f * sinAlpha * (sigma + C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM))); var revAz = Math.atan2(sinAlpha, -tmp); // final bearing return new OpenLayers.LonLat(lon1+u.deg(L), u.deg(lat2)); }, /** * 度换成弧度 * @param {Float} d 度 * @return {[Float} 弧度 */ rad:function(d) { return d * Math.PI / 180.0; }, /** * 弧度换成度 * @param {Float} x 弧度 * @return {Float} 度 */ deg:function(x) { return x*180/Math.PI; } }
destinationVincenty方法返回的值即为B点的经纬度坐标。
0 1
- GIS算法--已知一点经纬度,方位角,距离求另一点
- 已知两点经纬度,求一点相对于另一点方位角和两点间的距离
- 已知一点的经纬度和该点到另一点的距离,求另一点的经纬度
- 已知一点经纬度和距离,求距离返回内点
- 已知点的经纬度 与另一个点的距离 以及方向角 求另一点的经纬度
- GIS技术 计算经纬度、距离、方位角
- 已知经纬度求地球上两地点之间球面距离
- 已知两点经纬度求距离
- 经纬度 距离,角度 计算另一点经纬度
- 计算经纬度、距离、方位角
- 根据两点的经纬度求方位角和距离,等
- 根据两点的经纬度求方位角和距离,等
- 根据两点的经纬度求方位角和距离,等
- 根据两点的经纬度求方位角和距离,等
- 转载]根据两点的经纬度求方位角和距离
- 根据两点的经纬度求方位角和距离
- [转载]根据两点的经纬度求方位角和距离等
- 根据两点的经纬度求方位角和距离
- android7.0 系统更新日志
- JAVA全集-02-基本语法
- 例子:'0'和'/0','\0'的输出变化
- python sys.exitfunc (回调函数)
- jquery
- GIS算法--已知一点经纬度,方位角,距离求另一点
- MinInStack
- JQuery优化规范
- *【布局优化】android布局原则
- 深入浅出 RPC - 浅出篇
- Centos配置163 yum源方法
- symbol lookup error: undefined symbol
- 汇编 - ORG指令详解
- PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择的问题