安卓百度地图根据2点坐标计算marker旋转角度

在网上找了很久都没有找到有用的,后来拿我经理发给我的,说这也是他在百度提供的代码复制过来的.所以附上源码和翻译成kotlin的代码,方便大家使用,也防止以后自己再遇到这样的问题不知如何是好.

这是js代码

/**
    *在每个点的真实步骤中设置小车转动的角度(车载图标)
    *@param{BMap.Point} curPos 起点
     *@param{BMap.Point} targetPos 终点
     *@return deg 角度值
    */
      this.setRotation = function (curPos, targetPos) {
          var me = this;
          var deg = 0;
          //这个方法安卓api没有,但根据方法名称可以推断出是将经纬度进行一样倍数的放大或缩小,也忘了
          //拿小数位比较多的double来计算对精度影响大不大,所以自己写了一个方法,直接将经纬度放大一百万倍
          curPos = map.pointToPixel(curPos);
          targetPos = map.pointToPixel(targetPos);
          if (targetPos.x != curPos.x) {
              var tan = (targetPos.y - curPos.y) / (targetPos.x - curPos.x),
              atan = Math.atan(tan);
              deg = atan * 360 / (2 * Math.PI);
              if (targetPos.x < curPos.x) {
                  deg = -deg + 90 + 90;
              } else {
                  deg = -deg;
              }
			  deg=-deg;
          } else {
              var disy = targetPos.y - curPos.y;
              var bias = 0;
              if (disy > 0)
                  bias = -1
              else
                  bias = 1
              deg = -bias * 90;
          }
          return deg;
      }

这是kotlin代码,需要java的自行翻译

     private fun rotation(start: LatLng, end: LatLng): Float {
        val bigStart = latlngLarger(start)
        val bigEnd = latlngLarger(end)
        return if (bigEnd.longitude != bigStart.longitude) {
            val tan = (bigEnd.latitude - bigStart.latitude) / (bigEnd.longitude - bigStart.longitude)
            val atan = Math.atan(tan)
            var deg = atan * 360 / (2 * Math.PI)
            if (bigEnd.longitude < bigStart.longitude) {
                deg = -deg + 90 + 90
            } else {
                deg = -deg
            }
            -deg.toFloat()
            /*deg = -deg
            deg.toFloat()*/
        } else {
            val disy = bigEnd.latitude - bigStart.latitude
            var bias = 1
            if (disy > 0) {
                bias = -1
            }
            -bias * 90f
            /*val deg = -bias * 90
            deg.toFloat()*/
        }
    }
    private val MUL = 100_0000

    private fun latlngLarger(latLng: LatLng): LatLng =
            LatLng(latLng.latitude * MUL, latLng.longitude * MUL)

效果图就不上了,自己试一下就知道了

猜你喜欢

转载自blog.csdn.net/android_upl/article/details/78524949
今日推荐