Android百度地图、高德地图、腾讯地图导航路线规划问题
国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。于是,
public class MapTranslateUtils {/** * 坐标转换,腾讯地图(火星坐标)转换成百度地图坐标 * @param lat 腾讯纬度 * @param lon 腾讯经度 * @return 返回结果:经度,纬度 */ public static double[] map_hx2bd(double lat, double lon){double bd_lat;double bd_lon;double x_pi=3.14159265358979324;double x = lon, y = lat;double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);bd_lon = z * Math.cos(theta) + 0.0065;bd_lat = z * Math.sin(theta) + 0.006;double[] doubles = new double[]{bd_lat,bd_lon};System.out.println("bd_lat:"+bd_lat);System.out.println("bd_lon:"+bd_lon);return doubles;}/** * 坐标转换,百度地图坐标转换成腾讯地图坐标 * @param lat 百度坐标纬度 * @param lon 百度坐标经度 * @return 返回结果:纬度,经度 */ public static double[] map_bd2hx(double lat, double lon){double tx_lat;double tx_lon;double x_pi=3.14159265358979324;double x = lon - 0.0065, y = lat - 0.006;double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);tx_lon = z * Math.cos(theta);tx_lat = z * Math.sin(theta);double[] doubles = new double[]{tx_lat,tx_lon};return doubles;}}
ok,现在百度地图坐标系,火星坐标系都在手了。开干.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#ffffff"android:orientation="vertical"> <com.zk.common.TitleBarViewandroid:id="@+id/titleBar"android:layout_width="fill_parent"android:layout_height="wrap_content"android:background="@color/title_bg"/> <WebViewandroid:id="@+id/web_wv"android:layout_width="fill_parent"android:layout_height="fill_parent"/> </LinearLayout>
public class WebViewActivity extends AppCompatActivity {private WebView detailsWebView;private String mUrl;private Handler handler;private ProgressDialog pd;private String mTitle;public static void launch(Activity activity, String url, String title) {Intent intent = new Intent(activity, WebViewActivity.class);intent.putExtra("url", url);intent.putExtra("title", title);activity.startActivity(intent);}@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_web_view);mUrl = this.getIntent().getStringExtra("url");mTitle = this.getIntent().getStringExtra("title");detailsWebView = (WebView) findViewById(R.id.web_wv);detailsWebView.getSettings().setJavaScriptEnabled(true);detailsWebView.getSettings().setDomStorageEnabled(true);detailsWebView.requestFocus(View.FOCUS_DOWN);detailsWebView.getSettings().setUserAgentString("User-Agent");detailsWebView.setWebViewClient(new WebViewClient() {@Override public boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return false;}});// 设置web视图客户端 detailsWebView.setWebChromeClient(new WebChromeClient() {@Override public void onProgressChanged(WebView view, int progress) {// 载入进度改变而触发 if (progress == 100) {handler.sendEmptyMessage(1);// 如果全部载入,隐藏进度对话框 } detailsWebView.setVisibility(View.VISIBLE);}super.onProgressChanged(view, progress);}@Override public void onReceivedTitle(WebView view, String title) {super.onReceivedTitle(view, title);}});detailsWebView.setVisibility(View.GONE);pd = new ProgressDialog(this);pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);pd.setMessage("数据载入中,请稍候!");handler = new Handler() {public void handleMessage(Message msg) {// 定义一个Handler,用于处理下载线程与UI间通讯 super.handleMessage(msg);if (!Thread.currentThread().isInterrupted()) {switch (msg.what) {case 0:pd.show();// 显示进度对话框 break;case 1:pd.hide();// 隐藏进度对话框,不可使用dismiss()、cancel(),否则再次调用show()时,显示的对话框小圆圈不会动。 break;}}}};loadurl(detailsWebView, mUrl);}public void loadurl(final WebView view, final String url) {handler.post(new Runnable() {@Override public void run() {handler.sendEmptyMessage(0);view.loadUrl(url);// 载入网页 }});} }
private void selectBaidu() {this.dismiss();try {//调起App if (isInstallByread("com.baidu.BaiduMap")) {Intent intent = Intent.getIntent("intent://map/direction?origin=latlng:" + nowLat + "," + nowLng + "|name:&destination=" + desAddress + "&mode=driving®ion=" + "我的位置" + "&referer=Autohome|GasStation#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");mActivity.startActivity(intent);} else {/*String url = "http://api.map.baidu.com/direction?origin=latlng:" + mLatitude + "," + mLongitude + "|name:&destination=" + mDestination + "&mode=driving&output=html&src=天工项目共建"; WebViewActivity.launch(getActivity(), url, "网页版地图导航");*/ Toast.makeText(mActivity, "如果您没有安装百度地图APP," +"可能无法正常使用导航,建议选择其他地图", Toast.LENGTH_SHORT).show();}} catch (URISyntaxException e) {e.printStackTrace();}}
private void selectGaode() {this.dismiss();double[] txDesLatLng = MapTranslateUtils.map_bd2hx(desLat, desLng);double[] txNowLatLng = MapTranslateUtils.map_bd2hx(nowLat, nowLng);if (isInstallByread("com.autonavi.minimap")) {try {Intent intentOther = new Intent("android.intent.action.VIEW",Uri.parse("androidamap://navi?sourceApplication=amap&lat=" + desLat + "&lon=" + desLng + "&dev=1&stype=0"));intentOther.setPackage("com.autonavi.minimap");intentOther.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);mActivity.startActivity(intentOther);} catch (Exception e) {String url = "http://m.amap.com/?from=" + nowLat + "," + nowLng + "(from)&to=" + desLat + "," + desLng + "(to)&type=0&opt=1&dev=0";WebViewActivity.launch(mActivity, url, "网页版地图导航");}} else {String url = "http://m.amap.com/?from=" + txNowLatLng[0] + "," + txNowLatLng[1]+ "(from)&to=" + txDesLatLng[0] + "," + txDesLatLng[1] + "(to)&type=0&opt=1&dev=0";WebViewActivity.launch(mActivity, url, "网页版地图导航");}}
private void selectTencent() {this.dismiss();double[] txDesLatLng = MapTranslateUtils.map_bd2hx(desLat, desLng);double[] txNowLatLng = MapTranslateUtils.map_bd2hx(nowLat, nowLng);String url = "http://apis.map.qq.com/uri/v1/routeplan?type=drive&from=&fromcoord=" + txNowLatLng[0] + "," + txNowLatLng[1]+ "&to=&tocoord=" + txDesLatLng[0] + "," + txDesLatLng[1] + "&policy=0&referer=myapp";WebViewActivity.launch(mActivity, url, "网页版地图导航"); }
另外 此处是 高德地图 对其他坐标进行转换的api:
Android百度地图、高德地图、腾讯地图导航路线规划问题相关推荐
- android 通过scheme唤起百度、高德、腾讯地图路线规划功能,唤起滴滴出行打车功能
import android.content.Context; import android.content.Intent; import android.net.Uri;import java.ut ...
- [html] 如何使用H5唤起原生地图APP(百度、高德、腾讯地图等)
[html] 如何使用H5唤起原生地图APP(百度.高德.腾讯地图等) <iframe src="sinaweibo://qrcode"> 或 <a href=& ...
- android 跳转腾讯地图导航,Android 跳转到百度、高德、腾讯地图导航
项目中遇到的一个需求,跳转外部App进行步行导航.分别是百度.高德.腾讯. 东西不难但是每次都要去官方文档找(有时候会更新一些字段). 所以在此做下记录和分享. 腾讯地图 try { LatLng l ...
- 安卓APP跳转百度、高德、腾讯地图
一:国内主流坐标系类型 来自百度地图的介绍: https://lbsyun.baidu.com/index.php?title=androidsdk/guide/coordtrans 主要有以下三种 ...
- APP跳转百度、高德、腾讯地图导航
这个本来是一个很简单的需求,奈何我遇到了很奇葩的问题.最开始我用的是百度sdk中的跳转api,自己用小米和联想测试跳转没有问题,然而用户的魅蓝note5点击跳转没有任何响应,后来又陆续出现了华为met ...
- 高德地图怎么搜索marker_百度、高德、腾讯地图坐标认证怎么弄,3分钟轻松自助认证...
各位头条的朋友,各位长期关注我的无人店运营情况的朋友,大家好.上次跟大家分享了一些无人店引流的办法,有一些已经开店的朋友就很感兴趣,纷纷私信问我,具体怎么操作.这次有机会就跟大家讲一下,百度.高德地图 ...
- android app调用第三方地图路线规划导航(百度,高德,腾讯)
android app调用第三方地图路线规划导航(百度,高德,腾讯) 因为直接使用高德的sdk提供的导航被投诉说不准,所以需要接第三方. 把BAT系的地图都接上了,有兄弟找到其他的地图调用方法告诉下小 ...
- android 跳转腾讯地图导航,Android 地图跳转到百度、高德、腾讯导航
项目中遇到的一个需求,跳转外部App进行步行导航.分别是百度.高德.腾讯. 东西不难但是每次都要去官方文档找(有时候会更新一些字段). 所以在此做下记录和分享. 腾讯地图 try { LatLng l ...
- 百度、高德、腾讯、天地图、谷歌、必应等地图切图工具 MapCutter 3.7.1
百度.高德.腾讯.天地图.谷歌.必应等自定义地图/图片叠加层/瓦片图/金字塔图地图切图高清切片生成工具 MapCutter(旧名MapTiler) ,定位便捷,支持超大地图,支持leaflet.map ...
最新文章
- [导入]JavaScript 滑动条效果
- Ubuntu 14.04.1 配置 Android 源码开发环境(jdk版本切换)(转载)
- flutter 弹幕插件_Flutter 实现虎牙/斗鱼 弹幕效果 | 秒速技术
- CentOS 7 Linux 的初始化系统(系统服务管理和控制程序/Init System) -- systemd 详解
- SQL 异常处理 Begin try end try begin catch end catch--转
- AI算法连载21:统计之概率图模型
- python web框架 多线程和多进程_python的多线程和多进程(一)
- 《视觉SLAM十四讲》课后习题—ch7(更新中……)
- 这可能是最全的 Redis 集群方案介绍了
- Jquery中val、text、html的区别
- 新一期,微信免费领7天WPS稻壳会员活动!
- 数据分析岗位求职经验分享
- 统计学考研笔记:季度指数
- 复杂性应业务抽象本质——系统化多维度思考(如何让抽象更上一层楼)
- 20200321——IO 多路复用
- java虚拟机开源_IBM J9 Java虚拟机正式开源
- eclipse中的图片路径 image
- arcgis 出图背景_ArcGIS入门教程来袭,零基础的同学快看过来!
- 接入微信分享 以及使用eclipse调试cocos2dx
- 月份加日期前面用on还是in_英语当中,年月日前加哪个介词on还是in;月日/年月的话呢?...