将坐标转换为WGS84

时间:2016-02-14 08:31:01

标签: c# geometry geocoding geospatial computational-geometry

我有以下函数绘制给定质心的圆,但我希望坐标在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));
}

3 个答案:

答案 0 :(得分:1)

你说转换为WGS84但是从什么?

查看类似http://www.gdal.org/http://dotspatial.codeplex.com/的内容(如果您使用的是数据库中的空间支持)。

关于GIS的这个答案将有助于解释WGS84 / EPSG:4326

https://gis.stackexchange.com/questions/23690/is-wgs84-itself-a-coordinate-reference-system

当圆圈变成椭圆形时,这将有所帮助:)

SQL Server Circle

答案 1 :(得分:0)

编辑**:抱歉,我在开始时误解了这个问题。我不太了解您的命名约定,所以我不会最初编写代码。我也是一个差异几何爱好者,所以笑话在我身上...... Circle function

首先,我们先看看任何球体表面的距离: spherical transformation 作为我们所具有的坐标的提醒:r≥0,0≤θ≤π且0≤φ<1。 2π。 (θ==纬度,φ==经度) 现在,因为我们的位移ds被限制在表面,我们有dr == 0.此外,我们可以考虑距离点a = [r,0,0]的距离为ds的光盘

这些点必须满足ds ==rdθ,这给出b = [r,ds / r,0]。这很容易因为φ实际上是什么并不重要,它可以从0到2π并且这个距离将保持不变,所以任何点b = [r,ds / r,φ]都坐在坐标盘上我们正在寻找。

那么如果我们从a = [r,θ,φ]开始你可能会问,我可以问,然后为什么不通过添加变换向量t = [0转换回a = [r,0,0] ,-θ,-φ]计算光盘的坐标,然后在找到的每个点(b)上减去相同的变换向量。也许力量在你身边

答案 2 :(得分:0)

这个古老问题的答案可能对其他人有用,那就是弧度的结果需要转换回度。

代码的以下部分将度转换为弧度:

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中使用: enter image description here

有关更多信息,请参见http://www.edwilliams.org/avform.htm

的“简介”部分