LatLng相对于另一个的方向

时间:2018-02-08 11:59:04

标签: android google-maps

我一直致力于Android中的Google地图服务。我想知道是否有一个实用方法可以为另一个提供LatLng的方向。

我想知道一个点是否在

  • 南方或北方

  • 东或西

  • 或两者的组合,每个
  • 一个

SomeUtil.direction(latlng1,latlng2) - >给我关于latlng1的latlng2的方向,例如西南

提前致谢

2 个答案:

答案 0 :(得分:3)

NORTH,SOUTH,EAST,WEST及其类似于NORTH-EAST的组合只是标题间隔的名称,您可以从computeHeading() Google Maps Android API Utility LibraryDirections方法中获取(标题) }:

SphericalUtil

并通过将航向罗盘度转换为方向名来获得方向(Δ,delta - “基准”角度确定方向= 22.5度因为360/8/2,其中^ 8 - 北,南等方向的数量等。 ):

https://microlink.io

完整源代码:

computeHeading

public static double computeHeading(LatLng from, LatLng to)

Returns the heading from one LatLng to another LatLng. Headings are expressed in degrees clockwise from North within the range [-180,180).

Returns: The heading in degrees clockwise from north.

NB!你需要添加一行

enum LocationDirection {
    UNKNOWN,
    NORTH,
    NORTH_EAST,
    EAST,
    SOUTH_EAST,
    SOUTH,
    SOUTH_WEST,
    WEST,
    NORTH_WEST
}

public static LocationDirection direction(LatLng latlng1, LatLng latlng2) {
    double delta = 22.5;
    LocationDirection direction = LocationDirection.UNKNOWN;
    double heading = SphericalUtil.computeHeading(latlng1, latlng2);

    if ((heading >= 0 && heading < delta) || (heading < 0 && heading >= -delta)) {
        direction = LocationDirection.NORTH;
    } else if (heading >= delta && heading < 90 - delta) {
        direction = LocationDirection.NORTH_EAST;
    } else if (heading >= 90 - delta && heading < 90 + delta) {
        direction = LocationDirection.EAST;
    } else if (heading >= 90 + delta && heading < 180 - delta) {
        direction = LocationDirection.SOUTH_EAST;
    } else if (heading >= 180 - delta || heading <= -180 + delta) {
        direction = LocationDirection.SOUTH;
    } else if (heading >= -180 + delta && heading < -90 - delta) {
        direction = LocationDirection.SOUTH_WEST;
    } else if (heading >= -90 - delta && heading < -90 + delta) {
        direction = LocationDirection.WEST;
    } else if (heading >= -90 + delta && heading < -delta) {
        direction = LocationDirection.NORTH_WEST;
    }

    return direction;
}
使用compile 'com.google.maps.android:android-maps-utils:0.5+' 课程的dependencies文件的build.gradle部分。

答案 1 :(得分:-1)

您可以使用Google Maps Android API工具库(https://developers.google.com/maps/documentation/android-api/utility/)中的computeOffset方法:

Look at the answer in this question

  

public static LatLng computeOffset(LatLng from,double distance,double heading)

     

返回从指定标题中的原点移动距离得到的LatLng(以北方向顺时针方向表示)。

     

参数:

     
      
  • 距离 - 旅行距离。
  •   
  • from - 从中​​开始的LatLng。
  •   
  • heading - 从北方顺时针方向的航向。
  •   

你有距离和所有LatLng。您可以相应地传递角度值,并检查它们是否满足您的等式。