Android从定义的位置查找X点的纬度经度

Posted

技术标签:

【中文标题】Android从定义的位置查找X点的纬度经度【英文标题】:Android Find Latitude Longitude Of X point From Defined Location 【发布时间】:2012-12-29 05:36:23 【问题描述】:

我正在开发 android MapView 并开发基于地图的应用程序。我需要找到与特定 Co-ordinates 的 X 距离。方向不是我的首要任务距离是我的首要任务假设我需要从特定位置找到 100 米关于如何做到这一点的任何想法 提前感谢您的阅读和回答。

【问题讨论】:

【参考方案1】:

为了计算在距原点给定距离的线上找到一个点,您需要有方位(或方向)以及距离。这是一个函数,它将获取起始位置、方位角和距离(深度)并返回目标位置(对于 Android):您可能希望将其从 KM 转换为 Meters 或其他任何值。

public static Location GetDestinationPoint(Location startLoc, float bearing, float depth) 
 
    Location newLocation = new Location("newLocation");

    double radius = 6371.0; // earth's mean radius in km 
    double lat1 = Math.toRadians(startLoc.getLatitude()); 
    double lng1 = Math.toRadians(startLoc.getLongitude()); 
    double brng = Math.toRadians(bearing); 
    double lat2 = Math.asin( Math.sin(lat1)*Math.cos(depth/radius) + Math.cos(lat1)*Math.sin(depth/radius)*Math.cos(brng) ); 
    double lng2 = lng1 + Math.atan2(Math.sin(brng)*Math.sin(depth/radius)*Math.cos(lat1), Math.cos(depth/radius)-Math.sin(lat1)*Math.sin(lat2)); 
    lng2 = (lng2+Math.PI)%(2*Math.PI) - Math.PI;  

    // normalize to -180...+180 
    if (lat2 == 0 || lng2 == 0) 
    
        newLocation.setLatitude(0.0);
        newLocation.setLongitude(0.0);
    
    else
    
        newLocation.setLatitude(Math.toDegrees(lat2));
        newLocation.setLongitude(Math.toDegrees(lng2));
    

    return newLocation;
;

【讨论】:

只需将 Location 转换为 GeoPoint: int lat = (int) (location.getLatitude() * 1E6); int lng = (int) (location.getLongitude() * 1E6); GeoPoint point = new GeoPoint(lat, lng); 我不明白轴承是如何工作的?是在0-360之间吗?这似乎不起作用。谢谢 好的,所以你需要以弧度表示方位。【参考方案2】:

只是为了让 javram 的答案变成米和弧度而不是度数。

/**
 * Create a new location specified in meters and bearing from a previous location.
 * @param startLoc from where
 * @param bearing which direction, in radians from north
 * @param distance meters from startLoc
 * @return a new location
 */
public static Location createLocation(Location startLoc, double bearing, double distance) 
    Location newLocation = new Location("newLocation");

    double radius = 6371000.0; // earth's mean radius in m
    double lat1 = Math.toRadians(startLoc.getLatitude());
    double lng1 = Math.toRadians(startLoc.getLongitude());
    double lat2 = Math.asin(Math.sin(lat1) * Math.cos(distance / radius) + Math.cos(lat1) * Math.sin(distance / radius) * Math.cos(bearing));
    double lng2 = lng1 + Math.atan2(Math.sin(bearing) * Math.sin(distance / radius) * Math.cos(lat1), Math.cos(distance / radius) - Math.sin(lat1) * Math.sin(lat2));
    lng2 = (lng2 + Math.PI) % (2 * Math.PI) - Math.PI;

    // normalize to -180...+180
    if (lat2 == 0 || lng2 == 0) 
        newLocation.setLatitude(0.0);
        newLocation.setLongitude(0.0);
     else 
        newLocation.setLatitude(Math.toDegrees(lat2));
        newLocation.setLongitude(Math.toDegrees(lng2));
    

    return newLocation;

【讨论】:

以上是关于Android从定义的位置查找X点的纬度经度的主要内容,如果未能解决你的问题,请参考以下文章

在Android中查找当前位置的纬度和经度[重复]

查找最小/最大纬度和经度

在一定距离处查找经纬度四个方向的点

如何从给定的纬度和经度中查找位置名称?

给定 GPS 的地理位置,如何在给定的 x 米半径内找到纬度和经度

从中心到给定点的纬度、经度和地理区域(NW、NE、SW、SE)