将纬度/经度转换为 X/Y
Convert latitude / longitude to X/Y
我正在从事地理本地化项目。我有一张我校园的图像,我找到了 4 个角中的 4 Long/Lat,但现在我一直在寻找一种方法将其转换为像素定位。
我找到了很多关于这个的主题,但我不是很清楚。
这是可用于获取两个 LatLon 坐标之间的距离(以米为单位)的方法。一旦你有了它,那么只需一些简单的数学运算就可以将它映射到你的图像的像素中。
public static double distance(LatLon loc1, LatLon loc2) {
double EARTH_RADIUS = 6371000; // in meters
double lat1 = Math.toRadians(loc1.latitude);
double lon1 = Math.toRadians(loc1.longitude);
double lat2 = Math.toRadians(loc2.latitude);
double lon2 = Math.toRadians(loc2.longitude);
// based on https://www.movable-type.co.uk/scripts/latlong.html
double a = Math.sin((lat2 - lat1) / 2.0);
double b = Math.sin((lon2 - lon1) / 2.0);
double c = a * a + Math.cos(lat1) * Math.cos(lat2) * b * b;
double distanceRadians = 2.0 * Math.asin(Math.sqrt(c));
return EARTH_RADIUS * distanceRadians;
}
纬度范围 [-90,90],经度范围 [-180,180]
我正在从事地理本地化项目。我有一张我校园的图像,我找到了 4 个角中的 4 Long/Lat,但现在我一直在寻找一种方法将其转换为像素定位。 我找到了很多关于这个的主题,但我不是很清楚。
这是可用于获取两个 LatLon 坐标之间的距离(以米为单位)的方法。一旦你有了它,那么只需一些简单的数学运算就可以将它映射到你的图像的像素中。
public static double distance(LatLon loc1, LatLon loc2) {
double EARTH_RADIUS = 6371000; // in meters
double lat1 = Math.toRadians(loc1.latitude);
double lon1 = Math.toRadians(loc1.longitude);
double lat2 = Math.toRadians(loc2.latitude);
double lon2 = Math.toRadians(loc2.longitude);
// based on https://www.movable-type.co.uk/scripts/latlong.html
double a = Math.sin((lat2 - lat1) / 2.0);
double b = Math.sin((lon2 - lon1) / 2.0);
double c = a * a + Math.cos(lat1) * Math.cos(lat2) * b * b;
double distanceRadians = 2.0 * Math.asin(Math.sqrt(c));
return EARTH_RADIUS * distanceRadians;
}
纬度范围 [-90,90],经度范围 [-180,180]