我有下面的函数,它在给定质心的情况下绘制一个圆,但我希望坐标为WGS84。
var coords = new List<Tuple<double, double>>();
const double EARTH_RADIUS_NM = 3437.670013352;
var lat = (latIn * Math.PI) / 180;
var lon = (lonIn * Math.PI) / 180;
double d = radiusIn / EARTH_RADIUS_NM;
for (int x = 0; x <= 360; x++)
{
double brng = (x * Math.PI) / 180;
var latRadians = Math.Asin(Math.Sin(lat) * Math.Cos(d) + Math.Cos(lat) * Math.Sin(d) * Math.Cos(brng));
var lngRadians = lon + Math.Atan2(Math.Sin(brng) * Math.Sin(d) * Math.Cos(lat), Math.Cos(d) - Math.Sin(lat) * Math.Sin(latRadians));
coords.Add(new Tuple<double, double>(latRadians, lngRadians));
}发布于 2016-02-15 18:44:15
您说转换为WGS84,但是从哪里转换呢?
看看像http://www.gdal.org/或http://dotspatial.codeplex.com/这样的东西(如果您正在使用数据库中的空间支持,也可以这样做)。
这份关于地理信息系统的答案将有助于解释WGS84 / EPSG:4326
https://gis.stackexchange.com/questions/23690/is-wgs84-itself-a-coordinate-reference-system
当您的圆变成椭圆时,这将有所帮助:)
发布于 2016-02-14 17:25:41
编辑**:很抱歉我一开始就误解了这个问题。我不太理解您的命名约定,所以我不会一开始就写代码。此外,我是一个微分几何爱好者,所以笑话都在我身上…

首先,我们看一下任何球体表面上的距离:

作为对坐标的提醒:R≥0,0≤θ≤π和0≤φ< 2π。( ==纬度,==经度)现在,由于我们的位移ds,被限制在表面上,所以我们有dr,==,0,θ,dr,φ。我们还可以考虑距离点a= r,0,0的距离为ds的圆盘
然后,这些点必须满足ds == r dθ,它给出b= r,ds/r,0。这很简单,因为φ实际上是什么并不重要,它可以从0到2π,这个距离保持不变,所以任何点b= r,ds/r,φ都在我们寻找的坐标圆盘上。
所以如果我们从a=r开始,你可能会问,为什么不通过添加变换向量t= 0,-θ,-φ,a= r,0,θ,φ,愿原力与你同在
发布于 2020-04-24 21:51:23
这个可能对其他人有用的老问题的答案是,弧度的结果需要转换回度数。
代码的以下部分将度数转换为弧度:
var lat = (latIn * Math.PI) / 180;
var lon = (lonIn * Math.PI) / 180;在将结果添加到列表之前,需要将它们转换回度数:
var latDegrees = (180/Math.PI) * latRadians;
var lngDegrees = (180/Math.PI) * lngRadians;
coords.Add(new Tuple<double, double>(latDegrees, lngDegrees));已确认在Mapview中工作:

有关更多信息,请参阅http://www.edwilliams.org/avform.htm的简介部分
https://stackoverflow.com/questions/35389834
复制相似问题