已知起点和距离计算第二点
使用纬度和经度值(A 点),我尝试计算另一个点 B,距离 A 点 X 米,距离 A 点 0 弧度。然后显示 B 点的纬度和经度值。
示例(伪代码):
PointA_Lat = x.xxxx;
PointA_Lng = x.xxxx;
Distance = 3; //Meters
bearing = 0; //radians
new_PointB = PointA-Distance;
我能够计算两点之间的距离,但我想找到的是知道距离和方位的第二个点。
最好是 PHP 或 Javascript。
谢谢
using a Latitude and Longitude value (Point A), I am trying to calculate another Point B, X meters away bearing 0 radians from point A. Then display the point B Latitude and Longitude values.
Example (Pseudo code):
PointA_Lat = x.xxxx;
PointA_Lng = x.xxxx;
Distance = 3; //Meters
bearing = 0; //radians
new_PointB = PointA-Distance;
I was able to calculate the distance between two Points but what I want to find is the second point knowing the distance and bearing.
Preferably in PHP or Javascript.
Thank you
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您似乎正在以米为单位测量距离 (R),并从正东逆时针方向测量 (theta)。对于您的目的(数百米),平面几何应该足够准确。在这种情况下,
如果 theta 是从正北顺时针测量的(例如,罗盘方位角),
dx 和 dy 的计算略有不同:
无论哪种情况,经度和纬度的变化为:
常数 110540 和 111320 之间的差异是由于地球的扁率造成的
(极地周长和赤道周长不同)。
这是一个有效的示例,使用您后面的问题中的参数:
给定起始位置为经度 -87.62788 度,纬度 41.88592 度,
找到距起始位置西北 500 米的点的坐标。
如果我们从正东逆时针测量角度,“西北”对应
到 theta=135 度。 R为500米。
It seems you are measuring distance (R) in meters, and bearing (theta) counterclockwise from due east. And for your purposes (hundereds of meters), plane geometry should be accurate enough. In that case,
If theta is measured clockwise from due north (for example, compass bearings),
the calculation for dx and dy is slightly different:
In either case, the change in degrees longitude and latitude is:
The difference between the constants 110540 and 111320 is due to the earth's oblateness
(polar and equatorial circumferences are different).
Here's a worked example, using the parameters from a later question of yours:
Given a start location at longitude -87.62788 degrees, latitude 41.88592 degrees,
find the coordinates of the point 500 meters northwest from the start location.
If we're measuring angles counterclockwise from due east, "northwest" corresponds
to theta=135 degrees. R is 500 meters.
如果您知道 3600 弧秒为 1 度(纬度或经度)、一海里有 1852 米、一海里为 1 弧秒,这可能会有所帮助。当然,您所依赖的距离相对较短,否则您将不得不使用球面三角学。
It might help if you knew that 3600 seconds of arc is 1 degree (lat. or long.), that there are 1852 meters in a nautical mile, and a nautical mile is 1 second of arc. Of course you're depending on the distances being relatively short, otherwise you'd have to use spherical trigonometry.
这是使用 Swift 的更新版本:
使用此扩展:
Here is an updated version using Swift:
Using this extension:
dx = sin(方位角)
dy = cos(轴承)
x = center.x + distdx;
y = center.y + distdy;
dx = sin(bearing)
dy = cos(bearing)
x = center.x + distdx;
y = center.y + distdy;