【问题标题】:Convert latitude / longitude to X/Y [closed]将纬度/经度转换为 X/Y [关闭]
【发布时间】:2021-11-14 13:32:17
【问题描述】:

我正在从事一个地理本地化项目。我有一张我的校园图片,我找到了 4 个角中的 4 个 Long/Lat,但现在我不得不找到一种将其转换为像素定位的方法。 我发现了很多关于这个的话题,但对我来说不是很清楚。

【问题讨论】:

  • 您的问题很不清楚:您是否试图生成一个以 lat/long 作为输入并输出图像中 x/y 像素位置的函数?您的问题似乎也不是 Java 特有的。
  • 是的,这就是我想要的
  • 您尝试执行的操作称为“Map Projection”。对于大比例尺的地图来说,这是一个既广又深的问题。但是,对于非正式地映射一个像大学校园一样小的区域,你可以伪造它:wuciawe.github.io/transform/2014/09/30/…

标签: java android latitude-longitude geography


【解决方案1】:

这是可用于获取两个 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]

【讨论】:

  • 这需要以度为单位的 lat long 输入,对吧?
  • 没错。纬度范围 [-90,90] 和经度范围 [-180,180]
  • 它就像一个魅力,但它让我与代表一个圆圈的中心有一段距离。我如何知道计算 x,y 的角度?
  • 您到底要计算什么?你有所有角落的纬度坐标,使用上面的函数你可以在公制系统中计算它们之间的距离,你的图像可能跨经线和平行线对齐,这意味着所有的值可以直接相互映射。您拥有您可能需要的任何计算的所有数据。
猜你喜欢
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
  • 1970-01-01
  • 2016-02-07
相关资源
最近更新 更多