给定点(纬度和长度),找到给定距离的正方形角的坐标

时间:2011-03-03 15:29:54

标签: position distance latitude-longitude

我使用小数点得到纬度'x'和经度'y'的点。该点以正方形为中心,每边的长度为12米。如何找到广场每个角落的纬度和经度?我用Java编程,但我很欣赏任何伪代码。 : - )

在阅读有关此事的文章后,我想'd-meter的变化等于'e'度(十进制)......?如果是这样,那么“转换率”是多少?

我不知道这是否有帮助,但考虑到每边12米,每个角落距离该点必须是16,97米。

事先,谢谢: - )

3 个答案:

答案 0 :(得分:5)

存储您的中心点lat / lon,以及到角落的距离(使用一些触发来计算),以及以米为单位的地球半径。你的度数为45,左上角为115,左上角为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 :(得分:1)

这是使用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;
}

答案 2 :(得分:0)

我可能会过分简化这个问题,但是......

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

没有