Вычислить координаты GPS для формирования радиуса заданного размера

Я придумал метод, который принимает координату и диапазон (в милях) и возвращает список координат, которые образуют круг вокруг начала координат. Я, кажется, добился определенного прогресса, но у меня есть проблема с тем, чтобы уменьшить часть диапазона.

private const ****** LAT_MILE = 0.0144839;
private const ****** LONG_MILE = 0.0190693;
public static List<gps.coordinate> GetRadius(****** OriginLatitude, ****** OriginLongitude, ****** Range, int Points)
{
 List<gps.coordinate> Result = new List<coordinate>();
 //insert a new point
 for (int i = 0; i < Points; i++)
 {
 Result.Add(new Gps.Coordinate()
 {
 Latitude = ((Range * LAT_MILE) * System.Math.Cos(i)) + OriginLatitude,
 Longitude = ((Range * LONG_MILE) * System.Math.Sin(i)) + OriginLongitude
 });
 }
 //sort using nearest neighbor
 return SortCoords(ref Result);
}
</coordinate></gps.coordinate></gps.coordinate>

Проблема, которую я обнаружил, заключается в том, что константа, которую я использую, чтобы рассчитать расстояние в милях до градусов, изменяется в зависимости от местоположения. Есть ли у кого-нибудь предложения по решению этой проблемы или лучшей мышеловке?

EDIT: Я должен отметить, что я ужасен по математике:)

3 ответа

посмотрите на это (включая примерный код): http://www.movable-type.co.uk/scripts/latlong.html

"Сферический закон косинусов" дает вам расстояние между двумя координатами. это должно быть возможно изменить, чтобы дать вам координаты вокруг указанного центра и заданный радиус (расстояние).


Вместо определения LONG_MILE как константы, вы должны рассчитать его внутри своего GetRadius: LONG_MILE = LAT_MILE / cos(OriginLatitude*PI/180.0)

Кроме того, немного странно, что вы принимаете sin() и cos() вашего целого числа index i. Если вы намереваетесь создавать точки на расстоянии 1 радиан, окружающих центр, он будет работать. Но я подозреваю, что вам может понадобиться нечто большее, как

angle_radians = i * 2.0*PI/Points;

и замените sin(angle_radians) на sin(i) и т.д.


Сделайте ваши вычисления в сферическом координатном пространстве, а затем преобразуйте их в широту/долготу.

licensed under cc by-sa 3.0 with attribution.