将坐标转换为WGS84

问题描述 投票:1回答:3

我有以下函数,可以绘制一个给定中心点的圆,但我希望坐标为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));
}
c# geometry geocoding geospatial computational-geometry
3个回答
1
投票

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

看看这样的东西 http:/www.gdal.orghttp:/dotspatial.codeplex.com (或在您的DB中的空间支持,如果您使用的是空间支持).在GIS上的这个答案将帮助解释WGS84 EPSG:4326。

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

https:/gis.stackexchange.comquestions23690is-wgs84-itself-a-coord-reference-system。

当你的圆变成椭圆时,这将有助于:)

SQL服务器圆


0
投票

EDIT**:对不起,我一开始就误解了这个问题。我不太理解你的命名习惯,所以一开始我不会写代码。另外我是一个微分几何爱好者,所以笑话在我身上......Circle function

首先我们先看看任何球体表面的距离。spherical transformation提醒一下我们的坐标:r≥0,0≤θ≤π,0≤φ&lt;2π。(θ==纬度,φ==经度)现在由于我们的位移ds,仅限于表面,所以我们有dr==0.另外我们还可以考虑一个距离ds的圆盘,离点a=[r,0,0] 。

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

那么如果我们从a=[r,θ,φ]开始呢,你可能会问,对此我说,那么为什么不通过添加变换向量t=[0,-θ,-φ]转换回a=[r,0,0]计算出圆盘的坐标,然后在你找到的每个点(b)上做同样的变换向量的减法。


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));

确认可以在地图视图中使用。enter image description here

更多的信息,请看下面的介绍部分 http:/www.edwilliams.orgavform.htm

© www.soinside.com 2019 - 2024. All rights reserved.