我使用小数点得到纬度'x'和经度'y'的点。该点以正方形为中心,每边的长度为12米。如何找到广场每个角落的纬度和经度?我用Java编程,但我很欣赏任何伪代码。 : - )
在阅读有关此事的文章后,我想'd-meter的变化等于'e'度(十进制)......?如果是这样,那么“转换率”是多少?
我不知道这是否有帮助,但考虑到每边12米,每个角落距离该点必须是16,97米。
事先,谢谢: - )
答案 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
没有