Преобразование координат в 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));
}
Ответы
Ответ 1
Вы говорите, что конвертируете в 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
и это поможет, когда ваш круг превратится в эллипс:)
Круг SQL Server
Ответ 2
ИЗМЕНИТЬ **: извините, я неправильно понял проблему в начале. Я не совсем понимаю ваше соглашение об именах, поэтому я не буду писать код изначально. Также я - энтузиаст дифференциальной геометрии, поэтому шутки на меня...
![Функция круга]()
Для начала рассмотрим расстояния на поверхностях любой сферы:
в качестве напоминания для координат, которые мы имеем: r ≥ 0, 0 ≤ θ ≤ π и 0 ≤ φ < 2π. (θ == широта, φ == долгота)
теперь, поскольку наше смещение ds ограничено поверхностью, мы имеем dr == 0. Также мы можем рассмотреть диск расстояния ds от точки a = [r, 0, 0]
Эти точки должны тогда удовлетворять ds == r dθ, что дает b = [r, ds/r, 0]. это легко, потому что не имеет значения, что на самом деле φ, оно может идти от 0 до 2π, и это расстояние останется прежним, поэтому любая точка b = [r, ds/r, φ] находится на диске координат которые мы ищем.
Итак, что, если мы начнем с a = [r, θ, φ], вы можете спросить, к чему я говорю, то почему бы не преобразовать обратно в = [r, 0, 0], добавив вектор преобразования t = [0, -θ, -φ] вычислить координаты для диска, а затем вычесть один и тот же вектор преобразования на каждую найденную вами точку (b). может ли сила быть с вами