我一直致力于Android中的Google地图服务。我想知道是否有一个实用方法可以为另一个提供LatLng的方向。
我想知道一个点是否在
中南方或北方
东或西
SomeUtil.direction(latlng1,latlng2) - >给我关于latlng1的latlng2的方向,例如西南
提前致谢
答案 0 :(得分:3)
NORTH,SOUTH,EAST,WEST及其类似于NORTH-EAST的组合只是标题间隔的名称,您可以从computeHeading()
Google Maps Android API Utility Library类方法中获取(标题) }:
SphericalUtil
并通过将航向罗盘度转换为方向名来获得方向(Δ,delta - “基准”角度确定方向= 22.5度因为360/8/2,其中^ 8 - 北,南等方向的数量等。 ):
完整源代码:
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。您可以相应地传递角度值,并检查它们是否满足您的等式。