开箱即用的Google与百度定位坐标系转换实例

目录
  • 集成谷歌定位与百度定位并在地图上显示
    • 项目背景
  • 一. 集成谷歌定位
    • 定位Api使用流程:
  • 二. 集成百度定位
    • Application中初始化SDK
  • 三. 坐标系转换与地图上的显示

集成谷歌定位与百度定位并在地图上显示

项目背景

东南亚某小国的App,需要用到定位与地图显示,我们都知道海外人士都是喜欢谷歌地图与谷歌定位的,那么必然是要优先使用谷歌定位的,但是中国手机卖的很好,部分中国手机的海外版是没有谷歌服务的,那么我使用百度地图进行降级处理。

两者使用的定位坐标系不同,如果需要在谷歌地图上展示百度定位,需要如何转换呢?或者说谷歌的定位如何在百度地图上展示呢?

一. 集成谷歌定位

跟项目下的build.gradle

别的先不说,先把谷歌服务插件给引入

    dependencies {
        classpath 'com.android.tools.build:gradle:7.0.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:4.3.8'
    }

app模块下的build.gradle最底部 应用谷歌服务插件

apply plugin: 'com.google.gms.google-services'

然后去谷歌后台申请App-Key相关的项目,需要填写包名和一些签名文件的SHA1值,注意这里relese包的SHA1值,和谷歌市场上架的SHA1值是不同的,上架之后需要去谷歌市场把谷歌市场上的SHA1值设置进去,因为谷歌市场上架之后会把你的签名文件包装一次,完全不同的签名文件了。

完成此步之后 下载对应App的 google-services.json 文件。

此步骤完成,我们再远程依赖谷歌定位的库。location

   //定位功能
    api 'com.google.android.gms:play-services-location:16.0.0'

定位Api使用流程:

权限定义

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

注意使用之前要动态申请权限,这里不做演示

     //初始化谷歌地图API
     if (googleApiClient == null) {
        googleApiClient = new GoogleApiClient.Builder(mActivity)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
    }
   //Google-Location-Api 服务连接成功回调
    @Override
    public void onConnected(@Nullable Bundle bundle) {
        Log.e("MapLastLocationUtils", "Google-Api服务连接成功了");
        getAPILastLocation();
    }
    //Google-Location-Api 服务异常连接暂停
    @Override
    public void onConnectionSuspended(int i) {
        Log.e("MapLastLocationUtils", "Google-Api服务被暂停了");
        if (googleApiClient != null && !googleApiClient.isConnected())
            googleApiClient.connect();
    }
    //Google-Location-Api 连接异常
    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
        Log.e("MapLastLocationUtils", "Google-Api服务连接错误");
        //如果连接错误直接用百度定位
    }
    public void stopLocation() {
        if (googleApiClient != null && googleApiClient.isConnected()){
            googleApiClient.disconnect();
        }
    }
    private void getAPILastLocation() {
    FusedLocationProviderClient fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(mActivity);
    fusedLocationProviderClient.getLastLocation().addOnSuccessListener(mActivity, location -> {
        if (location != null && location.getLatitude() > 0 && location.getLongitude() > 0) {
            double latitude = location.getLatitude();
            double longitude = location.getLongitude();
            Log.e("MapLastLocationUtils", "Google-API-获取到的最后的地址为:" + "Lat:" + latitude + " Lon:" + longitude);
        } else {
                //如果没有值直接用百度定位
        }
    });
  }

二. 集成百度定位

我们也是需要在百度开发者平台上申请应用的App,不过这一块就比较简单,只需要验证包名就行了,然后会给你一个AppId。

我们下载定位的jar包与so动态库,导入到项目,然后再清单文件配置

              <meta-data
           android:name="com.baidu.lbsapi.API_KEY"
            android:value="123456789">
        </meta-data>
        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote">
            <intent-filter>
                <action android:name="com.baidu.location.service_v2.2"></action>
            </intent-filter>
        </service>

Application中初始化SDK

    SDKInitializer.initialize(context);

判断开启谷歌定位还是百度定位的逻辑封装

public class MapLastLocationUtils implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener,
        LifecycleObserver {
    private static MapLastLocationUtils ourInstance;
    private Activity mActivity;
    private GoogleApiClient googleApiClient;
    private LocationClient mBDLocationClient;
    private LocationRequest mLocationRequest;
    private boolean isNeedBackNotifyLocation = false;
    public static MapLastLocationUtils getInstance(Activity context) {
        if (ourInstance == null) {
            ourInstance = new MapLastLocationUtils(context);
        }
        return ourInstance;
    }
    private MapLastLocationUtils(Activity context) {
        mActivity = context;
        //初始化谷歌地图API
        if (googleApiClient == null) {
            googleApiClient = new GoogleApiClient.Builder(mActivity)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .addApi(LocationServices.API)
                    .build();
        }
    }
    /**
     * 只是获取当前的位置一次
     */
    public void getLastLocation() {
        int code = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(CommUtils.getContext());
        if (code == ConnectionResult.SUCCESS) {
            // 支持Google服务
            getAPILastLocation();
        } else {
            //开启百度定位
            getBDLastLocation();
        }
    }
    //API连接成功尝试获取最后的位置
    @SuppressLint("MissingPermission")
    private void getAPILastLocation() {
        FusedLocationProviderClient fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(mActivity);
        fusedLocationProviderClient.getLastLocation().addOnSuccessListener(mActivity, location -> {
            if (location != null && location.getLatitude() > 0 && location.getLongitude() > 0) {
                double latitude = location.getLatitude();
                double longitude = location.getLongitude();
                Log.e("MapLastLocationUtils", "Google-API-获取到的最后的地址为:" + "Lat:" + latitude + " Lon:" + longitude);
                if (mListener != null) {
                    //这里转换一下,如果国内转换为火星坐标,国外直接用
                    Gps gps = GPS84ToGCJ02(longitude, latitude);
                    mListener.onLastLocation(gps.getLatitude(), gps.getLongitude());
                }
            } else {
                getBDLastLocation();
            }
        });
    }
    //百度定位尝试获取最后的位置
    private void getBDLastLocation() {
        mBDLocationClient = new LocationClient(mActivity);
        //声明LocationClient类
        mBDLocationClient.registerLocationListener(mBDLastLocationListener);
        //配置百度定位的选项
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); // 可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
        option.setCoorType("gcj02"); // 可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll; 国际WGS84
        option.setScanSpan(0); // 可选,默认0,即仅定位一次,设置发起连续定位请求的间隔需要大于等于1000ms才是有效的
        option.setIsNeedAddress(false); // 可选,设置是否需要地址信息,默认不需要
        option.setIsNeedLocationDescribe(false); // 可选,设置是否需要地址描述
        option.setNeedDeviceDirect(false); // 可选,设置是否需要设备方向结果
        option.setLocationNotify(false); // 可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
        option.setIgnoreKillProcess(true); // 可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop
        option.setIsNeedLocationDescribe(false); // 可选,默认false,设置是否需要位置语义化结果,可以在BDLocation
        option.setIsNeedLocationPoiList(false); // 可选,默认false,设置是否需要POI结果,可以在BDLocation
        option.SetIgnoreCacheException(false); // 可选,默认false,设置是否收集CRASH信息,默认收集
        option.setOpenGps(false); // 可选,默认false,设置是否开启Gps定位
        option.setIsNeedAltitude(false); // 可选,默认false,设置定位时是否需要海拔信息,默认不需要,除基础定位版本都可用
        mBDLocationClient.setLocOption(option);
        //开启定位
        if (mBDLocationClient != null && !mBDLocationClient.isStarted()) {
            mBDLocationClient.start();
        }
    }
    //Google-Location-Api 服务连接成功回调
    @Override
    public void onConnected(@Nullable Bundle bundle) {
        Log.e("MapLastLocationUtils", "Google-Api服务连接成功了");
        getAPILastLocation();
    }
    //Google-Location-Api 服务异常连接暂停
    @Override
    public void onConnectionSuspended(int i) {
        Log.e("MapLastLocationUtils", "Google-Api服务被暂停了");
        if (googleApiClient != null && !googleApiClient.isConnected())
            googleApiClient.connect();
    }
    //Google-Location-Api 连接异常
    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
        Log.e("MapLastLocationUtils", "Google-Api服务连接错误");
        //如果连接错误直接用百度定位吧
        getBDLastLocation();
    }
    /**
     * 停止全部的定位
     */
    public void stopLocation() {
        if (googleApiClient != null && googleApiClient.isConnected()) {
            googleApiClient.disconnect();
        }
        if (mBDLocationClient != null) {
            if (mBDLastLocationListener != null) {
                mBDLocationClient.unRegisterLocationListener(mBDLastLocationListener);
            }
            YYLogUtils.w("定位stop了");
            mBDLocationClient.stop();
        }
    }
    private OnLocationCallbackListener mListener;
    public void setOnLocationCallbackListener(OnLocationCallbackListener listener) {
        mListener = listener;
    }
    public interface OnLocationCallbackListener {
        void onLastLocation(double lat, double lon);
    }
    /**
     * 百度的监听回调(最后的地址)
     */
    BDAbstractLocationListener mBDLastLocationListener = new BDAbstractLocationListener() {
        //百度定位成功的展示
        @Override
        public void onReceiveLocation(BDLocation bdLocation) {
            if (bdLocation != null && bdLocation.getLocType() != BDLocation.TypeServerError &&
                    !(bdLocation.getLatitude() + "").equals("4.9E-324") &&
                    !(bdLocation.getLongitude() + "").equals("4.9E-324")) {
                double latitude = bdLocation.getLatitude();    //获取纬度信息
                double longitude = bdLocation.getLongitude();    //获取经度信息
                Log.w("MapLastLocationUtils", "百度定位获取到的最后的地址为:" + "Lat:" + latitude + " Lon:" + longitude);
                //获取到了最后的位置-直接回调
                if (mListener != null) {
                    mListener.onLastLocation(latitude, longitude);
                }
            } else {
                Log.e("MapLastLocationUtils", "百度定位-获取位置失败");
                if (googleApiClient != null && !googleApiClient.isConnected()) {
                    googleApiClient.connect();
                } else {
                    getAPILastLocation();
                }
            }
        }
        @Override
        public void onConnectHotSpotMessage(String s, int i) {
            super.onConnectHotSpotMessage(s, i);
        }
        //百度定位的错误信息展示
        @Override
        public void onLocDiagnosticMessage(int locType, int diagnosticType, String diagnosticMessage) {
            super.onLocDiagnosticMessage(locType, diagnosticType, diagnosticMessage);
            int tag = 2;
            StringBuffer sb = new StringBuffer(256);
            sb.append("诊断结果: ");
            if (locType == BDLocation.TypeNetWorkLocation) {
                if (diagnosticType == 1) {
                    sb.append("网络定位成功,没有开启GPS,建议打开GPS会更好");
                    sb.append("\n" + diagnosticMessage);
                } else if (diagnosticType == 2) {
                    sb.append("网络定位成功,没有开启Wi-Fi,建议打开Wi-Fi会更好");
                    sb.append("\n" + diagnosticMessage);
                }
            } else if (locType == BDLocation.TypeOffLineLocationFail) {
                if (diagnosticType == 3) {
                    sb.append("定位失败,请您检查您的网络状态");
                    sb.append("\n" + diagnosticMessage);
                }
            } else if (locType == BDLocation.TypeCriteriaException) {
                if (diagnosticType == 4) {
                    sb.append("定位失败,无法获取任何有效定位依据");
                    sb.append("\n" + diagnosticMessage);
                } else if (diagnosticType == 5) {
                    sb.append("定位失败,无法获取有效定位依据,请检查运营商网络或者Wi-Fi网络是否正常开启,尝试重新请求定位");
                    sb.append(diagnosticMessage);
                } else if (diagnosticType == 6) {
                    sb.append("定位失败,无法获取有效定位依据,请尝试插入一张sim卡或打开Wi-Fi重试");
                    sb.append("\n" + diagnosticMessage);
                } else if (diagnosticType == 7) {
                    sb.append("定位失败,飞行模式下无法获取有效定位依据,请关闭飞行模式重试");
                    sb.append("\n" + diagnosticMessage);
                } else if (diagnosticType == 9) {
                    sb.append("定位失败,无法获取任何有效定位依据");
                    sb.append("\n" + diagnosticMessage);
                }
            } else if (locType == BDLocation.TypeServerError) {
                if (diagnosticType == 8) {
                    sb.append("定位失败,请确认您定位的开关打开状态,是否赋予APP定位权限");
                    sb.append("\n" + diagnosticMessage);
                }
            }
            Log.e("MapLastLocationUtils", sb.toString());
        }
    };
    // =======================  update begin ↓ =========================
    /**
     * 开启后台的通知栏定位
     */
    public void startBackNotifyLocation() {
        isNeedBackNotifyLocation = true;
        if (mBDLocationClient == null) {
            mBDLocationClient = new LocationClient(mActivity);
        }
        LocationClientOption mOption = new LocationClientOption();
        mOption.setScanSpan(15000);
        mOption.setIsNeedAddress(false);
        mOption.setOpenGps(true);
        mBDLocationClient.setLocOption(mOption);
//                mClient.registerLocationListener(mBDUpdateLocationListener);
        Notification notification;
        if (Build.VERSION.SDK_INT >= 26) {
            NotificationUtils mNotificationUtils = new NotificationUtils(mActivity);
            Notification.Builder builder2 = mNotificationUtils.getAndroidChannelNotification("YY Circle", "Locating in the background");
            builder2.setSmallIcon(R.drawable.ic_launcher_map);
            notification = builder2.build();
        } else {
            //获取一个Notification构造器
            Notification.Builder builder = new Notification.Builder(mActivity);
            builder.setContentTitle("YY Circle") // 设置下拉列表里的标题
                    .setSmallIcon(R.drawable.ic_launcher_map) // 设置状态栏内的小图标
                    .setContentText("Locating in the background") // 设置上下文内容
                    .setWhen(System.currentTimeMillis()); // 设置该通知发生的时间
            notification = builder.build(); // 获取构建好的Notification
        }
        notification.defaults = Notification.DEFAULT_SOUND; //设置为默认的声音
        //开启前台通知的后台定位
        mBDLocationClient.enableLocInForeground(1, notification);
        mBDLocationClient.start();
    }
    // =======================  转换 begin ↓ =========================
    private double pi = 3.1415926535897932384626;
    private double a = 6378245.0;
    private double ee = 0.00669342162296594323;
    /**
     * 国际 GPS84 坐标系
     * 转换成
     * [国测局坐标系] 火星坐标系 (GCJ-02)
     * <p>
     * World Geodetic System ==> Mars Geodetic System
     *
     * @param lon 经度
     * @param lat 纬度
     * @return GPS实体类
     */
    public Gps GPS84ToGCJ02(double lon, double lat) {
        if (outOfChina(lat, lon)) {
            YYLogUtils.e("GPS84ToGCJ02:国外的坐标不做处理");
        return new Gps(lon, lat);
        } else {
            YYLogUtils.e("GPS84ToGCJ02:处理国内的坐标");
            double dLat = transformLat(lon - 105.0, lat - 35.0);
            double dLon = transformLon(lon - 105.0, lat - 35.0);
            double radLat = lat / 180.0 * pi;
            double magic = Math.sin(radLat);
            magic = 1 - ee * magic * magic;
            double sqrtMagic = Math.sqrt(magic);
            dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
            dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
            double mgLat = lat + dLat;
            double mgLon = lon + dLon;
            return new Gps(mgLon, mgLat);
        }
    }
    /**
     * [国测局坐标系] 火星坐标系 (GCJ-02)
     * 转换成
     * 国际 GPS84 坐标系
     *
     * @param lon 火星经度
     * @param lat 火星纬度
     */
    public Gps GCJ02ToGPS84(double lon, double lat) {
        Gps gps = transform(lon, lat);
        double lontitude = lon * 2 - gps.getLongitude();
        double latitude = lat * 2 - gps.getLatitude();
        return new Gps(lontitude, latitude);
    }
    private Gps transform(double lon, double lat) {
        if (outOfChina(lon, lat)) {
            return new Gps(lon, lat);
        }
        double dLat = transformLat(lon - 105.0, lat - 35.0);
        double dLon = transformLon(lon - 105.0, lat - 35.0);
        double radLat = lat / 180.0 * pi;
        double magic = Math.sin(radLat);
        magic = 1 - ee * magic * magic;
        double sqrtMagic = Math.sqrt(magic);
        dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
        dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
        double mgLat = lat + dLat;
        double mgLon = lon + dLon;
        return new Gps(mgLon, mgLat);
    }
    /**
     * 不在中国范围内
     *
     * @param lon 经度
     * @param lat 纬度
     * @return boolean值
     */
    public static boolean outOfChina(double lat, double lon) {
        if (lon < 72.004 || lon > 137.8347)
            return true;
        if (lat < 0.8293 || lat > 55.8271)
            return true;
        return false;
    }
    /**
     * 纬度转化算法
     *
     * @param x
     * @param y
     * @return
     */
    private double transformLat(double x, double y) {
        double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y
                + 0.2 * Math.sqrt(Math.abs(x));
        ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
        ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;
        ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;
        return ret;
    }
    /**
     * 经度转化算法
     *
     * @param x
     * @param y
     * @return
     */
    private double transformLon(double x, double y) {
        double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1
                * Math.sqrt(Math.abs(x));
        ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
        ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;
        ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0
                * pi)) * 2.0 / 3.0;
        return ret;
    }
}

三. 坐标系转换与地图上的显示

网上一搜坐标系那可太多了,我们不整那么复杂,我们Android就知道2个 gcj02(中国国测局) 和 wgs84(通过坐标系) 。由于我们不是国内的应用,并且集成了非单一的定位软件,所以我们就不知道私有的坐标系如bd09之类的。

可以看到我们上面的工具类都是使用的gcj02坐标系定位的,在中国就需要gcj02定位,这样比较准确,如果要在对应的地图上展示,则需要对应的坐标系经纬度,在对应的坐标系地图上展示。

如我们的定位是gcj02的坐标系,在谷歌地图上展示则需要转换为wgs之后才对,不然会有大概800米的误差。百度地图则可以设置坐标系,设置为gcj02之后就可以在百度地图上展示。

坐标系的转换工具类在上面就有了。

以上就是开箱即用的Google与百度定位坐标系转换实例的详细内容,更多关于Google 百度定位坐标系转换的资料请关注我们其它相关文章!

(0)

相关推荐

  • android使用百度地图SDK获取定位信息示例

    本文使用Android Studio开发. 获取定位信息相对简单,我们只需要如下几步: 第一步,注册百度账号,在百度地图开放平台新建应用.生成API_KEY.这些就不细说了,请前往这里:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/key 第二步,下载sdk,地址:http://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-download

  • Android 百度地图定位实现仿钉钉签到打卡功能的完整代码

    导语 本章根据百度地图API,实现仿钉钉打卡功能.用到了基础地图.覆盖物.定位图层.陀螺仪方法.悬浮信息弹框. 百度地图API地址  :Android 地图SDK 请先注册注册百度账号和获取密钥,并实现地图显示出来.(注意:密钥.权限要设置) 另外,我得说明本章所下载官方Demo 和 导入的jar包和so文件.自定义下载即可,如下图: 接下来,一起看实现效果. 源码Git地址:BaiduMapApp 效果图 实现代码·三步骤 第一步:基础地图和方向传感器 类先实现方向传感器 implements

  • Android百度地图定位、显示用户当前位置

    本文实例为大家分享了Android百度地图定位.显示用户当前位置的工具类,供大家参考,具体内容如下 1.构建定位Option的工具类 import com.baidu.location.LocationClientOption; /** * 建造 LocationClientOption 项 * * @author peter 2018-12-21 10:58 */ public class LocationClientOptionBuilder { private LocationClient

  • iOS实现百度地图定位签到功能

    写在前面: 项目需求用到这个功能,主要目的是实现老师设置位置签到范围,学生在一定范围内进行签到的功能. 功能如下方截图: 屏幕快照 2019-01-28 上午10.29.26.png 简要介绍: 下面记录一下主要的实现流程,功能的实现主要是根据百度地图开发者官网提供的api文档,各项功能之间组合.百度地图的SDK现在分成了地图功能和定位功能两块不同的SDK,BaiduMapAPI这个是基础的地图功能,BMKLocationKit这个是定位功能.项目里实现定位签到功能用的的SDK包括上面说的这两个

  • 详解iOS集成GoogleMap(定位、搜索)

    简介: 最近花了些时间看了GoogleMap官方文件并集成到国际版app中,网上关于GoogleMap for iOS的讲解相对Android来说少一点,比较有帮助的几乎全是英文文档.下面是我开发过程中遇到的坑.以及采用的解决方法. 集成GoogleMap步骤: 1.Cocoapods导入pod 'GoogleMaps' 2.获取API密匙(前提是已经在GoogleMapSDK中创建好自己的应用) 3.配置plist文件搭建定位环境 4.调用代理方法实现需求 tips:pod 'GoogleMa

  • 开箱即用的Google与百度定位坐标系转换实例

    目录 集成谷歌定位与百度定位并在地图上显示 项目背景 一. 集成谷歌定位 定位Api使用流程: 二. 集成百度定位 Application中初始化SDK 三. 坐标系转换与地图上的显示 集成谷歌定位与百度定位并在地图上显示 项目背景 东南亚某小国的App,需要用到定位与地图显示,我们都知道海外人士都是喜欢谷歌地图与谷歌定位的,那么必然是要优先使用谷歌定位的,但是中国手机卖的很好,部分中国手机的海外版是没有谷歌服务的,那么我使用百度地图进行降级处理. 两者使用的定位坐标系不同,如果需要在谷歌地图上

  • Android百度定位导航之基于百度地图移动获取位置和自动定位

    一.问题描述 使用百度地图实现如图所示应用,首先自动定位当前我起始位置(小圆点位置),并跟随移动不断自动定位我的当前位置 百度Api不同版本使用会有些差异,本例中加入lib如下: 二.编写MyApplication类 public class MyApplication extends Application { static MyApplication myApplication; BMapManager mBMapManager = null; String mStrKey = "7ZfuR

  • JS实现仿google、百度搜索框输入信息智能提示的实现方法

    本文实例讲述了JS实现仿google.百度搜索框输入信息智能提示的实现方法.分享给大家供大家参考.具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml&qu

  • Google和百度、雅虎的站内搜索代码

    对于一个网站来说,使用搜索引擎来进行站内搜索往往比自己编写的站内搜索更高效,并且不占用网站服务器的资源,下面是我搜集到的几个主要搜索引擎(Google和百度.雅虎)的站内搜索代码,使用时只需要将代码里的"www.jb51.net"替换成你的网址即可. <!--Google站内搜索开始--> <form method=get action="http://www.google.com/search"> <input type=text n

  • 百度地图经纬度转换到腾讯地图/Google 对应的经纬度

    实现目的:将百度地图经纬度 转换到 腾讯地图/Google 对应的经纬度. 方法1:使用代码进行转换 存在的问题:转换之后误差大,基本不可用 public static void Convert_BD09_To_GCJ02(double lat, double lng) { double x_pi = Math. PI * 3000.0 / 180.0; double x = lng - 0.0065, y = lat - 0.006; double z = Math. sqrt(x * x +

  • 使用 Vue.js 仿百度搜索框的实例代码

    整理文档,搜刮出一个使用 Vue.js 仿百度搜索框的实例代码,稍微整理精简一下做下分享. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Vue demo</title> <style type="text/css"> .bg { background: #ccc; } </style> <s

  • Android Studio应用开发集成百度语音合成使用方法实例讲解

    首先,语音合成是指将文本信息转换成声音.意思就是将文本转化为声音,让你的应用开口说话.国内在业内比较有名的第三方语音合成平台有百度语音和科大讯飞. 本文集成的是百度语音合成,其主要特点是: 完全永久免费 业界首创完全永久免费新形式,为开发者提供最流畅最自然的语音合成服务.完全免费,永久使用,彻底摆脱限制. 离线在线融合模式 SDK可以根据当前网络状况,自动判断使用本地引擎还是云端引擎进行语音合成,再也不用担心流量消耗! 多语言多音色可选 中文普通话.中英文混读.男声.女声任你选,更支持语速.音调

  • Python爬虫实现爬取百度百科词条功能实例

    本文实例讲述了Python爬虫实现爬取百度百科词条功能.分享给大家供大家参考,具体如下: 爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件.爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列.然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页

  • Python爬虫爬取百度搜索内容代码实例

    这篇文章主要介绍了Python爬虫爬取百度搜索内容代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 搜索引擎用的很频繁,现在利用Python爬虫提取百度搜索内容,同时再进一步提取内容分析就可以简便搜索过程.详细案例如下: 代码如下 # coding=utf8 import urllib2 import string import urllib import re import random #设置多个user_agents,防止百度限制I

  • java调用百度定位api服务获取地理位置示例

    复制代码 代码如下: package test; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.Reader;import java.net.URL;import java.nio.charset.Charset; import org.json.JSONException;imp

随机推荐