最近遇到一个需求,要打开手机里的第三方地图进行定位(只有地址信息,没有经纬度),网上查了一下,也查了相关Api,百度地图没啥说的,就照着官方文档来,so easy。高德就有点麻烦了,必须的传经纬度。下面就介绍一个百度和高德各自的调用
-
百度地图
参考 官方API-2.2.4地址解析,这里就不做过多介绍,代码如下
Intent().setData(Uri.parse("baidumap://map/geocoder?src=com.jianqi.wuye&address=${地址}")) .also { startActivity(it) }
-
高德地图
官方Api–不管怎么样,肯定先要获取到地址的经纬度,刚开始我是用的地理编码求经纬度,刚开始我使用的是webApi地理编码,但是我发现这个api要必须要地址信息比较详细,否则获得经纬度偏差会比较大,导致定位不准确。后来我使用了搜索Api,这个api支持模糊搜索(关键字),返回的经纬度也是比较准确的,得到经纬度之后再根据经纬度进行定位,我用的是这个逆地理编码Api,经过几次试验之后,发现这个api最符合我的需求,总之拿到经纬度后一切都好办了。大家根据根据自己的需求选择不同的Api,下面是使用高德的部分代码
/** * 是否安装了某个应用 */ fun Context.isAvaliable(packageName: String):Boolean{ val installedPackages = packageManager.getInstalledPackages(0)// 获取所有已安装程序的包信息 installedPackages.forEach { if (packageName == it.packageName){ return true } } return false } val gaodeAvai = isAvaliable("com.autonavi.minimap")//是否安装了高德地图 //先判断是否安装了高德 if (gaodeAvai){ httpUrlConnectionGet(address) } //申请key之后可能不会立即生效,我方式申请完之后测试老是提示key无效,第二天好了,哈哈 private fun httpUrlConnectionGet(address: String){ val GET_URL = "https://restapi.amap.com/v3//place/text?key=替换逆的key&output=JSON&keywords=${地址}" val okHttpClient = OkHttpClient() val request = Request.Builder().url(GET_URL) .build() val newCall = okHttpClient.newCall(request) newCall.enqueue(object : Callback { override fun onFailure(call: Call, e: IOException) { e.printStackTrace() } override fun onResponse(call: Call, response: Response) { response.body()?.let { val string = it.string() try { val jsonObject = JSONObject(string) val status = jsonObject.getString("status") if ("1" == status) { //请求成功 val jsonArray = jsonObject.getJSONArray("pois") val geocodes = jsonArray.getJSONObject(0) val location = geocodes.getString("location") val split = location.split(",") val intent = Intent(Intent.ACTION_VIEW) intent.addCategory(Intent.CATEGORY_DEFAULT) //逆地理编码,定位到地点 val uri = Uri.parse("androidamap://viewReGeo?sourceApplication=${替换你的应用名称}&lat=${split[1]}&lon=${split[0]}&dev=0") //val uri = Uri.parse("androidamap://keywordNavi?sourceApplication=${替换你的应用名称}&keyword=${地址}") intent.data = uri startActivity(intent) } } catch (e: Exception) { e.printStackTrace() } } } }) }