По заданной точке (широта и долгота) найдите координаты углов квадрата с заданным расстоянием - PullRequest
6 голосов
/ 03 марта 2011

Я получил точку с широтой 'x' и долготой 'y', используя десятичные дроби. Точка центрирована в квадрате, длина до каждой стороны 12 метров. Как мне найти широту и долготу каждого угла квадрата? Я программирую на Java, но я ценю любой псевдокод. : -)

После прочтения статей по этому вопросу, я предполагаю, что изменение d-метров равно e-градусам (в десятичной дроби) ..? Если да, то что такое «коэффициент конверсии»?

Я не знаю, помогает ли это, но учитывая, что это 12 метров с каждой стороны, каждый угол должен быть 16,97 метров от точки.

Заранее спасибо: -)

Ответы [ 3 ]

5 голосов
/ 03 марта 2011

Сохраните вашу центральную точку широта / долгота, а также расстояние до угла (используйте для этого триггер) и радиус Земли в метрах.Ваше направление в градусах будет 45, чтобы дать вам верхний правый, 115 для верхнего левого и так далее.Используйте причудливую математику ниже, чтобы найти широту / длину желаемого угла в десятичном формате.Преобразование в градусы путем умножения каждого на 180 / PI

lat1 = centerPoint.lat * ( Math.PI / 180 );  //Only do this if you need to convert from deg. to dec.
lon1 = centerPoint.lng * ( Math.PI / 180 );  //Only do this if you need to convert from deg. to dec.
d = distance;
R = EARTHS_RADIUS_IN_METERS;
brng = bearingInDegrees * ( Math.PI / 180 );
lat2 = Math.asin( Math.sin( lat1 ) * Math.cos( d / R ) + Math.cos( lat1 ) * Math.sin( d / R ) * Math.cos( brng ) );
lon2 = lon1 + Math.atan2( Math.sin( brng ) * Math.sin( d / R ) * Math.cos( lat1 ), Math.cos( d / R ) - Math.sin( lat1 ) * Math.sin( lat2 ) );

return new LatLong( lat2 * ( 180 / Math.PI ), lon2 * ( 180 / Math.PI ) );
1 голос
/ 10 июля 2011

Вот решение с использованием библиотеки GeographicLib, которую я написал:

// Assumes GeographicLib, http://geographiclib.sf.net, is installed
// 
// Compile and link with
//   g++ -o foo foo.cpp -L /usr/local/lib -Wl,-rpath=/usr/local/lib -lGeographic

#include <GeographicLib/Geodesic.hpp>
#include <iostream>
#include <iomanip>

using namespace GeographicLib;
using namespace std;

int main() {
  double lat1, lon1, side;
  cin >> lat1 >> lon1 >> side;
  cout << fixed << setprecision(14);
  double s12 = sqrt(0.5) * side;
  const Geodesic& g = Geodesic::WGS84;
  for (int i = 0; i < 4; ++i) {
    double azi1 = i * 90 - 135;
    double lat2, lon2;
    g.Direct(lat1, lon1, azi1, s12, lat2, lon2);
    cout << lat2 << " " << lon2 << "\n";
  }
  return 0;
}
0 голосов
/ 03 марта 2011

Возможно, я слишком упрощаю проблему, но ...

top-left = x - 12, y + 12
top-right = x + 12, y + 12
bottom-left = x - 12, y - 12
bottom-left = x - 12, y - 12

нет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...