<legend id='c2LjS'><style id='c2LjS'><dir id='c2LjS'><q id='c2LjS'></q></dir></style></legend>

<small id='c2LjS'></small><noframes id='c2LjS'>

      <bdo id='c2LjS'></bdo><ul id='c2LjS'></ul>
      <i id='c2LjS'><tr id='c2LjS'><dt id='c2LjS'><q id='c2LjS'><span id='c2LjS'><b id='c2LjS'><form id='c2LjS'><ins id='c2LjS'></ins><ul id='c2LjS'></ul><sub id='c2LjS'></sub></form><legend id='c2LjS'></legend><bdo id='c2LjS'><pre id='c2LjS'><center id='c2LjS'></center></pre></bdo></b><th id='c2LjS'></th></span></q></dt></tr></i><div id='c2LjS'><tfoot id='c2LjS'></tfoot><dl id='c2LjS'><fieldset id='c2LjS'></fieldset></dl></div>
    1. <tfoot id='c2LjS'></tfoot>

    2. 谷歌地图两个圆的交点

      时间:2023-09-08
          • <tfoot id='pwNG3'></tfoot>
              <legend id='pwNG3'><style id='pwNG3'><dir id='pwNG3'><q id='pwNG3'></q></dir></style></legend>
              <i id='pwNG3'><tr id='pwNG3'><dt id='pwNG3'><q id='pwNG3'><span id='pwNG3'><b id='pwNG3'><form id='pwNG3'><ins id='pwNG3'></ins><ul id='pwNG3'></ul><sub id='pwNG3'></sub></form><legend id='pwNG3'></legend><bdo id='pwNG3'><pre id='pwNG3'><center id='pwNG3'></center></pre></bdo></b><th id='pwNG3'></th></span></q></dt></tr></i><div id='pwNG3'><tfoot id='pwNG3'></tfoot><dl id='pwNG3'><fieldset id='pwNG3'></fieldset></dl></div>
                <tbody id='pwNG3'></tbody>
              • <bdo id='pwNG3'></bdo><ul id='pwNG3'></ul>

                <small id='pwNG3'></small><noframes id='pwNG3'>

                本文介绍了谷歌地图两个圆的交点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                问题描述

                有没有一种简单的方法来获取两个

                var R = 6371;//公里var dLat = (lat2-lat1).toRad();var dLon = (lon2-lon1).toRad();var lat1 = lat1.toRad();var lat2 = lat2.toRad();var a = Math.sin(dLat/2) * Math.sin(dLat/2) +Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

                和我们的

                AC = c/2

                如果给定的圆半径Rd是公里,那么

                AB = Rd/R = Rd/6371

                现在我们可以找到角度了

                A = arccos(tg(AC) * ctg(AB))

                起始方位(AF方向):

                var y = Math.sin(dLon) * Math.cos(lat2);var x = Math.cos(lat1)*Math.sin(lat2) -Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon);var brng = Math.atan2(y, x);

                交叉点的方位:

                B_bearing = brng - AD_轴承 = brng + A

                交点坐标:

                var latB = Math.asin( Math.sin(lat1)*Math.cos(Rd/R) +Math.cos(lat1)*Math.sin(Rd/R)*Math.cos(B_bearing));var lonB = lon1.toRad() + Math.atan2(Math.sin(B_bearing)*Math.sin(Rd/R)*Math.cos(lat1),Math.cos(Rd/R)-Math.sin(lat1)*Math.sin(lat2));

                同样适用于 D_bearing

                latB, lonB 以弧度为单位

                Is there an easy way to get the lat/lng of the intersection points (if available) of two circles in Google Maps API V3? Or should I go with the hard way?

                EDIT : In my problem, circles always have the same radius, in case that makes the solution easier.

                解决方案

                Yes, for equal circles rather simple solution could be elaborated:
                Let's first circle center is A point, second circle center is F, midpoint is C, and intersection points are B,D. ABC is right-angle spherical triangle with right angle C.

                We want to find angle A - this is deviation angle from A-F direction. Spherical trigonometry (Napier's rules for right spherical triangles) gives us formula:

                cos(A)= tg(AC) * ctg(AB) where one symbol denote spherical angle, double symbols denote great circle arcs' angles (AB, AC). We can see that AB = circle radius (in radians, of course), AC = half-distance between A and F on the great circle arc. To find AC (and other values) - I'll use code from this excellent page

                var R = 6371; // km
                var dLat = (lat2-lat1).toRad();
                var dLon = (lon2-lon1).toRad();
                var lat1 = lat1.toRad();
                var lat2 = lat2.toRad();
                
                var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
                        Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
                var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
                

                and our

                AC = c/2
                

                If circle radius Rd is given is kilometers, then

                AB = Rd / R = Rd / 6371
                

                Now we can find angle

                A = arccos(tg(AC) * ctg(AB))
                

                Starting bearing (AF direction):

                var y = Math.sin(dLon) * Math.cos(lat2);
                var x = Math.cos(lat1)*Math.sin(lat2) -
                        Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon);
                var brng = Math.atan2(y, x);
                

                Intersection points' bearings:

                B_bearing = brng - A
                D_bearing = brng + A
                

                Intersection points' coordinates:

                var latB = Math.asin( Math.sin(lat1)*Math.cos(Rd/R) + 
                              Math.cos(lat1)*Math.sin(Rd/R)*Math.cos(B_bearing) );
                var lonB = lon1.toRad() + Math.atan2(Math.sin(B_bearing)*Math.sin(Rd/R)*Math.cos(lat1), 
                                     Math.cos(Rd/R)-Math.sin(lat1)*Math.sin(lat2));
                

                and the same for D_bearing

                latB, lonB are in radians

                这篇关于谷歌地图两个圆的交点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                上一篇:如何定位相机以使对象在屏幕上始终具有相同的 下一篇:如何在 MongoDB 中创建长时间戳的 TTL 索引

                相关文章

                最新文章

                  <bdo id='EPcJn'></bdo><ul id='EPcJn'></ul>
                1. <i id='EPcJn'><tr id='EPcJn'><dt id='EPcJn'><q id='EPcJn'><span id='EPcJn'><b id='EPcJn'><form id='EPcJn'><ins id='EPcJn'></ins><ul id='EPcJn'></ul><sub id='EPcJn'></sub></form><legend id='EPcJn'></legend><bdo id='EPcJn'><pre id='EPcJn'><center id='EPcJn'></center></pre></bdo></b><th id='EPcJn'></th></span></q></dt></tr></i><div id='EPcJn'><tfoot id='EPcJn'></tfoot><dl id='EPcJn'><fieldset id='EPcJn'></fieldset></dl></div>

                  <small id='EPcJn'></small><noframes id='EPcJn'>

                  <tfoot id='EPcJn'></tfoot>

                    <legend id='EPcJn'><style id='EPcJn'><dir id='EPcJn'><q id='EPcJn'></q></dir></style></legend>