gpt4 book ai didi

android - 一个 LatLng 相对于另一个 LatLng 的方向

转载 作者:搜寻专家 更新时间:2023-11-01 08:22:56 27 4
gpt4 key购买 nike

我一直致力于 Android 中的 Google map 服务。我想知道是否有一个实用方法可以给出 LatLng 的方向关于另一个。

我想知道一个点是否在

  • 南还是北

  • 东方还是西方

  • 或两者的组合,各取其一

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

提前致谢

最佳答案

NORTH、SOUTH、EAST、WEST 及其组合(如 NORTH-EAST)只是航向间隔的名称,您可以从 computeHeading() 中获得(航向) Google Maps Android API Utility LibrarySphericalUtil 类的方法:

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.

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

Directions

完整源代码:

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+'

build.gradle 文件的 dependencies 部分使用 SphericalUtil 类。

关于android - 一个 LatLng 相对于另一个 LatLng 的方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48684978/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com