使用经纬度画圆
Posted
技术标签:
【中文标题】使用经纬度画圆【英文标题】:Draw circle using latitude and longitude 【发布时间】:2013-06-09 14:09:19 【问题描述】:我想用 matlab 绘制一个纬度和经度。使用该纬度和经度作为圆心,我想绘制一个半径为 5 Nm 的圆。
r = 5/60;
nseg = 100;
x = 25.01;
y = 55.01;
theta = 0 : (2 * pi / nseg) : (2 * pi);
pline_x = r * cos(theta) + x;
pline_y = r * sin(theta) + y;
hold all
geoshow(pline_x, pline_y)
geoshow(x, y)
圆圈看起来不像我预期的那样。
【问题讨论】:
它是什么样子的? Here is a circle on a Google Maps javascript API v3 map(你在考虑地图的投影吗? 更新了我的答案。即使做得正确,一个圆看起来也只是在投影中心的一个圆。 (天梭误差椭圆) 我发现这个:social.msdn.microsoft.com/Forums/onedrive/en-US/… 可能有用 【参考方案1】:在地球上画一个圆比看起来更复杂。
绘制一条线或一条折线很简单,因为定义了顶点。 不是这样的圈子。 一个圆由与中心具有相同距离的所有点定义(以米为单位!不是以度数为单位!!!) 不幸的是,纬度和经度坐标的比例不同。
(两个纬度之间的距离始终约为 111.3 公里,而经度仅在赤道处如此。在两极,两个经度之间的距离接近于零。在欧洲,该系数约为 0.6。(cos (48度))
有两种解决方案,第一种更通用,对几乎所有问题都有用。
-
使用变换(例如等距变换,也称为 equirectangular 变换,此变换与 cos(centerLat) 补偿因子配合使用)将(圆心的)球坐标转换为单位 = 1m 的笛卡尔平面
使用学校数学计算 x,y 平面上的点(例如圆点)。
使用点 1 的逆变换将所有 (x,y) 点转换回球面 (lat, lon) 坐标。
其他解决方案 1. 编写一个在定义的矩形(所有笛卡尔x,y)中绘制椭圆的函数 2. 定义要绘制的圆的边界: 2a:计算圆的南北直径/度数:这有点棘手:距离以米为单位定义,您需要进行转换以获得纬度跨度:纬度一度约为 111.3 公里(地球周长 / 360.0):使用此meters_per_degree 值以度为单位计算N-S disatcne。 2b:以度为单位计算东西跨度:现在更棘手:像 2a 一样计算,但现在除以 cos(centerLatitude) 以补偿向北移动时东西距离需要更多度数才能获得相同的米。
现在使用 N-S 和 E_W 跨度作为高度和宽度绘制 ellipseInRectangle。
但球体上的圆圈在投影显示器(或纸张)上看起来就像投影中心的圆圈。这表明:
Tissot's Error Ellipse
【讨论】:
以上是关于使用经纬度画圆的主要内容,如果未能解决你的问题,请参考以下文章