通过纬度和经度绘制圆形

4

我希望使用Matlab绘制纬度和经度。以该纬度和经度为圆心,我想绘制一个半径为5海里的圆。

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)

圆圈看起来不像我预期的那样。

它是什么样子?这是Google Maps Javascript API v3地图上的一个圆(您是否考虑了地图的投影?)。 - geocodezip
更新了我的回答。即使正确绘制,圆在投影的中心看起来也只是一个圆形。(蒂索特误差椭圆) - AlexWien
我发现这个链接:https://social.msdn.microsoft.com/Forums/onedrive/en-US/33878b72-08ca-4c3b-8291-75bd4f43b776/draw-a-circle-given-a-latlong-and-radius-in-miles?forum=vemapcontroldev 可能会有用。 - Reut Sharabani
1个回答

3
在地球上画一个圆比看起来更加复杂。画线或折线很简单,因为顶点已经定义好了。但是对于圆形不是这样的。圆由所有距离中心相同的点(以米为单位!而不是度数!!!)定义。不幸的是,纬度和经度坐标没有相同的比例尺。纬度两度之间的距离始终约为111.3公里,而经度只在赤道上成立。在极地,两个经度之间的距离趋近于零。在欧洲,这个因素约为0.6 (cos(48deg))。有两种解决方案,第一种是更通用的,对几乎所有问题都有用。
1. 使用转换(例如等距变换,也称为等经纬度变换,该变换使用cos(centerLat)补偿因子)将球面坐标(圆心)转换为具有单位= 1m的笛卡尔平面。 2. 使用学校数学计算x、y平面中的点(例如圆点)。 3. 使用点1的反向转换将所有(x,y)点转换回球面(lat,lon)坐标。
其他解决方案
1.编写一个函数,在定义的矩形中绘制椭圆(所有笛卡尔x,y)
2.定义要绘制的圆的边界:
2a:计算圆形的南北直径/以度为单位:这有点棘手:距离以米为单位定义,您需要进行转换以获得纬度跨度:一度纬度约为111.3公里(地球周长/ 360.0):使用此meters_per_degree值计算N-S disatcne(南北距离)以度为单位。
2b:计算东西跨度(以度为单位):现在更棘手:像2a一样计算,但现在除以cos(centerLatitude)以补偿从北向移动时E-W距离需要更多的度数才能具有相同的米数。

现在使用N-S和E_W跨度绘制ellipseInRectangle以用于高度和宽度。

但是,球体上的圆在投影监视器显示(或纸张)上只看起来像投影中心的圆。 这表明:

Tissot's Error Ellipse


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接