Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 科特林-我无法获得与谷歌地图相同的距离精度_Android_Kotlin_Google Places Api_Distance - Fatal编程技术网

Android 科特林-我无法获得与谷歌地图相同的距离精度

Android 科特林-我无法获得与谷歌地图相同的距离精度,android,kotlin,google-places-api,distance,Android,Kotlin,Google Places Api,Distance,我在我的应用程序中使用Google Places api计算两个地址之间的距离, 问题是我得到的距离比谷歌地图少 我无法获得与谷歌地图相同的准确度, 大多数时间距离比谷歌地图的结果要短 private fun SetupPlacesAutocompleteFun() { val _autocompletFragment1 = supportFragmentManager .findFragmentById(R.id.fragmentPlaces1) as Autocomp

我在我的应用程序中使用Google Places api计算两个地址之间的距离, 问题是我得到的距离比谷歌地图少

我无法获得与谷歌地图相同的准确度, 大多数时间距离比谷歌地图的结果要短

private fun SetupPlacesAutocompleteFun() {
    val _autocompletFragment1 = supportFragmentManager
        .findFragmentById(R.id.fragmentPlaces1) as AutocompleteSupportFragment
    _autocompletFragment1.setPlaceFields(_placesFields)
    _autocompletFragment1.setOnPlaceSelectedListener(object:PlaceSelectionListener{
        override fun onPlaceSelected(p1: Place) {
            _adrees1 = p1.latLng!!
            _adressString1 = p1.address!!
        }
        override fun onError(p1: Status) {
            Toast.makeText(this@GooglePlaces_Activity,"status "+p1.statusMessage,Toast.LENGTH_LONG).show()
        }
    })
    val _autocompletFragment2 = supportFragmentManager
        .findFragmentById(R.id.fragmentPlaces2) as AutocompleteSupportFragment
    _autocompletFragment2.setPlaceFields(_placesFields)
    _autocompletFragment2.setOnPlaceSelectedListener(object :PlaceSelectionListener{
        override fun onPlaceSelected(p2: Place) {
            _adress2 =p2.latLng!!
            _adressString2 = p2.address!!
        }

        override fun onError(p2: Status) {
            Toast.makeText(this@GooglePlaces_Activity,"status "+p2.statusMessage,Toast.LENGTH_LONG).show()
        }
    })
}

private fun InitPlacesFun() {
    Places.initialize(this,getString(R.string.Places_api))
    _placcesClint = Places.createClient(this)
}

我也试过:

var _Lat1 = _adrees1.latitude
var _Lat2 = _adress2.latitude
var _Long1 = _adrees1.longitude
var _Long2 = _adress2.longitude
var _LatRes = _Lat1 - _Lat2
var _longRes = _Long1 - _Long2

var R = 6371000f; // Radius of the earth in m
var dLat = _LatRes * Math.PI / 180f;
var dLon = _longRes * Math.PI / 180f;
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(_Lat1 * Math.PI / 180f) * Math.cos(_Lat2 * Math.PI / 180f) *
        Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2f * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
 dist = R* c

因为计算的是径向距离,而不是实际的管线距离,所以距离会变小

尝试使用google directions API计算距离


您可以在图像中看到径向距离(橙色)和实际距离(蓝色)之间的差异

使用方向api计算两个位置之间的距离,即源位置和目标位置,与谷歌地图完全相同..我会尝试,谢谢我会尝试,谢谢
var _Lat1 = _adrees1.latitude
var _Lat2 = _adress2.latitude
var _Long1 = _adrees1.longitude
var _Long2 = _adress2.longitude
var _LatRes = _Lat1 - _Lat2
var _longRes = _Long1 - _Long2

var R = 6371000f; // Radius of the earth in m
var dLat = _LatRes * Math.PI / 180f;
var dLon = _longRes * Math.PI / 180f;
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(_Lat1 * Math.PI / 180f) * Math.cos(_Lat2 * Math.PI / 180f) *
        Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2f * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
 dist = R* c