我有两个由points
代表的(lat, lng)
和一个代表circle
和center = point(lat, lng)
的{{1}}。
radius
我有一个使用Haversine公式计算距离的方法,所以如果我从圆心到两点都这样做,我会得到:
[2] pry(main)> points
=> [#<struct Geography::Point x=8.6836, y=56.7619>, #<struct Geography::Point x=8.7501, y=56.8298>]
[3] pry(main)> circle
=> #<struct Geography::Circle center=#<struct Geography::Point x=8.71685, y=56.79585>, radius=5253.053885917054>
请注意,第一个点与圆心之间的距离是圆的实际半径。所有距离均以米为单位。我的意思是,一个点在弧上,一个点应该非常接近。
如果我在谷歌地图中表示,那么圆弧将通过一个点并超越第二个。
谷歌地图投影在我的案例中是如何运作的,我怎样才能有一个满足现实的输出?
[4] pry(main)> Geography::Utils.distance_between(circle.center, points.first)
=> 5253.053885917054
[5] pry(main)> Geography::Utils.distance_between(circle.center, points.second)
=> 5252.8180384905045
答案 0 :(得分:3)
您应该使用Spherical Geometry library作为Javascript Maps API的一部分加载,方法是在加载API时附加&amp; libraries = geometry - 例如:
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=geometry">
此方法的优点是它抽象了Maps API中默认投影的实现细节。这使您的生活变得轻松,更重要的是,如果默认投影发生变化,则不会破坏。
将lat / lng坐标向下传递到浏览器并计算它们之间的距离(以米为单位),如下所示:
var location1 = new google.maps.LatLng(lat1, lng1);
var location2 = new google.maps.LatLng(lat2, lng2);
var distance = google.maps.geometry.spherical.computeDistanceBetween(location1, location2);
或在Coffeescript中:
location1 = new google.maps.LatLng lat1, lng1;
location2 = new google.maps.LatLng lat2, lng2;
distance = google.maps.geometry.spherical.computeDistanceBetween location1, location2;
答案 1 :(得分:2)
圆的半径需要是圆心的距离和米中的CoordinateA
。
转换为米后,以下网站显示4288
应为圆的半径https://www.daftlogic.com/projects-google-maps-distance-calculator.htm?route=56.79585,8.716850000000022|56.7619,8.68360000000007
基本上,您的Haversine公式并不能完全满足您的需求。