[英]Converting coordinates to WGS84
我有以下函數繪制給定質心的圓,但我希望坐標在 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));
}
您說轉換為 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
當你的圓圈變成橢圓時,這會有所幫助:)
編輯**:抱歉,我一開始就誤解了這個問題。 我不太了解您的命名約定,因此我不會在最初編寫代碼。 另外我是一個微分幾何愛好者,所以笑話在我身上......
首先,我們看一下任何球體表面上的距離: 作為坐標的提示,我們有:r ≥ 0, 0 ≤ θ ≤ π 和 0 ≤ φ < 2π。 (θ == 緯度, φ == 經度) 現在因為我們的位移 ds, 被限制在表面上, 我們有 dr == 0. 我們也可以考慮一個距離點 a = [r, 0, 0]
這些點必須滿足 ds == r dθ,即 b = [r, ds/r, 0]。 這很容易,因為實際上 φ 是什么並不重要,它可以從 0 到 2π 並且這個距離將保持不變,因此任何點 b = [r, ds/r, φ] 都位於坐標盤上我們正在尋找的。
那么如果我們從 a = [r, θ, φ] 開始,你可能會問,我說的,那么為什么不通過添加轉換向量 t = [0, -θ] 轉換回 a = [r, 0, 0] , -φ] 計算圓盤的坐標,然后在您找到的每個點 (b) 上減去相同的變換向量。 願原力與你同在
這個可能對其他人有用的老問題的答案是弧度的結果需要轉換回度數。
代碼的以下部分將度數轉換為弧度:
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));
有關更多信息,請參閱http://www.edwilliams.org/avform.htm 上的介紹部分
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.