实时定位_uniapp实时定位 - CSDN
  • GPS实时定位、获取基站信息

    千次阅读 2017-09-21 23:15:25
    好久没有来更新我的博客了 , 最近刚做了一个GPS实时定位和获取基站信息的一个小的Demo ,这个辛酸泪啊~ 来给大家们来分享一下 ! 做这个项目我用的是用的原始的手机GPS定位, 因为这个有可能需要在国外会用到,...

    好久没有来更新我的博客了 , 最近刚做了一个GPS实时定位和获取基站信息的一个小的Demo ,这个辛酸泪啊~ 来给大家们来分享一下 !

    做这个项目我用的是用的原始的手机GPS定位, 因为这个有可能需要在国外会用到,如果用国内第三方SDK的是用不了的,国外的第三方SDK的也需要翻墙什么的......不过用原始的还不错精确度还可以。


    (网上的资料质量太水了)

    下面给大家一些官方资料 :

    基站相关资料

    GPS资料


    好啦不多说来看一下代码 :



    package com.waywings.basestation.wy_terminal_basestation;
    
    import android.annotation.TargetApi;
    import android.content.Context;
    import android.location.Address;
    import android.location.Geocoder;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Build;
    import android.support.annotation.RequiresApi;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.telephony.CellIdentityCdma;
    import android.telephony.CellIdentityGsm;
    import android.telephony.CellIdentityLte;
    import android.telephony.CellIdentityWcdma;
    import android.telephony.CellInfo;
    import android.telephony.CellInfoCdma;
    import android.telephony.CellInfoGsm;
    import android.telephony.CellInfoLte;
    import android.telephony.CellInfoWcdma;
    import android.telephony.CellLocation;
    import android.telephony.CellSignalStrengthCdma;
    import android.telephony.CellSignalStrengthGsm;
    import android.telephony.CellSignalStrengthLte;
    import android.telephony.CellSignalStrengthWcdma;
    import android.telephony.TelephonyManager;
    import android.util.Log;
    import android.view.View;
    import android.widget.TextView;
    
    import com.waywings.basestation.wy_terminal_basestation.bean.CellInfoCdmaBean;
    import com.waywings.basestation.wy_terminal_basestation.bean.CellInfoGsmBean;
    import com.waywings.basestation.wy_terminal_basestation.bean.CellInfoLteBean;
    import com.waywings.basestation.wy_terminal_basestation.bean.CellInfoWcdmaBean;
    
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.Locale;
    
    public class BaseStationActivity extends AppCompatActivity {
    
        private TextView tipInfo, basestation_info;
        private LocationManager locationManager;
        private static final String TAG = "BaseStationActivity";
        private final static int INTERVAL_REFRESH = 1000;
        private ArrayList<String> PROVIDER_ARRAY;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_base_station);
            initView();
            initLocationManager();
        }
    
        private void initLocationManager() {
            PROVIDER_ARRAY = new ArrayList<>();
            PROVIDER_ARRAY.add(LocationManager.GPS_PROVIDER);
            PROVIDER_ARRAY.add(LocationManager.NETWORK_PROVIDER);
            PROVIDER_ARRAY.add(LocationManager.PASSIVE_PROVIDER);
            locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    
            List<String> allProviders = locationManager.getAllProviders();
            Log.i("AlexLocation", "AllProviders  -> " + allProviders);
            if (allProviders != null) {
                for (String provider : allProviders) {
                    Log.i("AlexLocation", "AllProviders  ->  provider => " + provider);
                    if ((provider != null) && (PROVIDER_ARRAY.contains(provider))) {
                        if (LocationManager.GPS_PROVIDER.equals(provider)) {
                            //通过GPS获取位置
                            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, INTERVAL_REFRESH, 10, locationListener);
                        } else if (LocationManager.NETWORK_PROVIDER.equals(provider)) {
                            //通过网络获取位置
                            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, INTERVAL_REFRESH, 10, locationListener);
                        } else if (LocationManager.PASSIVE_PROVIDER.equals(provider)) {
                            //被动获取位置
                            locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, INTERVAL_REFRESH, 10, locationListener);
                        }
                    }
                }
            }
        }
    
        private void initView() {
            tipInfo = (TextView) findViewById(R.id.tipInfo);
            basestation_info = (TextView) findViewById(R.id.basestation_info);
        }
    
        private LocationListener locationListener = new LocationListener() {
            //位置更改时调用
            @Override
            public void onLocationChanged(Location location) {
                if (location == null) return;
                showLocationInfo(location);
            }
            //当提供者状态更改时调用
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
    
            }
            //当提供程序由用户启用时调用
            @Override
            public void onProviderEnabled(String provider) {
    
            }
            //当用户禁用提供程序时调用
            @Override
            public void onProviderDisabled(String provider) {
    
            }
        };
    
        /**
         * 显示当前设备的位置信息
         *
         * @param location
         */
        private void showLocationInfo(Location location) {
            // TODO Auto-generated method stub
            float accuracy = location.getAccuracy();//获取该位置的估计精度,以米为单位
            double altitude = location.getAltitude();//如果海拔高度在海拔高度,就可获得高度
            double longitude = location.getLongitude();//得到经度
            double latitude = location.getLatitude();//得到纬度
            float speed = location.getSpeed();//如果有可用的速度,以米/秒在地面上
            boolean b = location.hasAccuracy();//如果该位置具有精度,则为true
    
            String changeInfo = "\n时间:" + sdf.format(new Date())
                    + "\n精度 : " + accuracy
                    + "\n高度 : " + altitude
                    + "\n经度 : " + longitude
                    + "\n纬度 : " + latitude
                    + "\n速度 : " + speed
                    + "\n是否具有精度 : " + b;
            tipInfo.setText(changeInfo);
    
    
            Geocoder geocoder = new Geocoder(this, Locale.getDefault());
            List<Address> addressList = null;
            try {
                addressList = geocoder.getFromLocation(location.getAltitude(), location.getLongitude(), 1);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (addressList.size() <= 0 | addressList == null) return;
            Address address = addressList.get(0);
            //Log.i(TAG, "address =" + address);
            String countryName = address.getCountryName();//得到国家名称,比如:中国
            String locality = address.getLocality();//得到城市名称,比如:北京市
            Log.i(TAG, "\ncountryName = " + countryName + "\nlocality = " + locality);
            for (int i = 0; address.getAddressLine(i) != null; i++) {
                String addressLine = address.getAddressLine(i);//得到周边信息,包括街道等,i=0,得到街道名称
                Log.i(TAG, "addressLine = " + addressLine);
            }
    
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            if (locationManager != null) {
                // 关闭程序时将监听器移除
                locationManager.removeUpdates(locationListener);
            }
        }
    
        @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
        public void baseStation(View view) {
    
            TelephonyManager mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
            //返回设备的当前位置
            CellLocation cellLocation = mTelephonyManager.getCellLocation();
            List<CellInfo> CellInfo = mTelephonyManager.getAllCellInfo();
            StringBuffer stringBuffer = new StringBuffer("总数 : " + CellInfo.size() + "\n");
    
            CellInfoGsmBean gsmBean = new CellInfoGsmBean();
            CellInfoCdmaBean cdmaBean = new CellInfoCdmaBean();
            CellInfoLteBean lteBean = new CellInfoLteBean();
            CellInfoWcdmaBean wcdmaBean = new CellInfoWcdmaBean();
            basestation_info.setText("");
            if (cellLocation != null) {
                basestation_info.append(cellLocation.toString() + "\n");
            }
    
            for (CellInfo cellInfo : CellInfo) {
                stringBuffer.append(cellInfo.toString());
                //GSM手机信息
                if (cellInfo instanceof CellInfoGsm) {
    
                    CellSignalStrengthGsm cellSignalStrength = ((CellInfoGsm) cellInfo).getCellSignalStrength();
                    gsmBean.asuLevel = cellSignalStrength.getAsuLevel();
                    gsmBean.dbm = cellSignalStrength.getDbm();
                    gsmBean.level = cellSignalStrength.getLevel();
    
    
                    CellInfoGsm cgsm = (CellInfoGsm) cellInfo;
                    CellIdentityGsm cellIdentity = cgsm.getCellIdentity();
                    gsmBean.cid = cellIdentity.getCid();
                    gsmBean.lac = cellIdentity.getLac();
                    gsmBean.mcc = cellIdentity.getMcc();
                    gsmBean.mnc = cellIdentity.getMnc();
    
                    basestation_info.append(gsmBean.toString() + "\n");
                    Log.d(TAG, gsmBean.toString());
                    //Log.d(TAG,"\nCID = " + cid + "\nLAC = " + lac + "\nMCC = " + mcc + "\nMNC = " + mnc);
                }
                //小区LTE
                if (cellInfo instanceof CellInfoLte) {
                    CellSignalStrengthLte cellSignalStrength = ((CellInfoLte) cellInfo).getCellSignalStrength();
                    lteBean.dbm = cellSignalStrength.getDbm();
                    lteBean.asuLevel = cellSignalStrength.getAsuLevel();
                    lteBean.timingAdvance = cellSignalStrength.getTimingAdvance();
                    lteBean.level = cellSignalStrength.getLevel();
    
                    CellIdentityLte cellIdentity = ((CellInfoLte) cellInfo).getCellIdentity();
                    lteBean.mcc = cellIdentity.getMcc();
                    lteBean.mnc = cellIdentity.getMnc();
                    lteBean.ci = cellIdentity.getCi();
                    lteBean.pci = cellIdentity.getPci();
                    lteBean.tac = cellIdentity.getTac();
    
                    basestation_info.append(lteBean.toString() + "\n");
                    Log.d(TAG, lteBean.toString());
                    Log.d(TAG, "\nmcc = " + lteBean.mcc + "\nmnc = " + lteBean.mnc + "\nci = " + lteBean.ci + "\npci = " + lteBean.pci);
                }
                //CDMA手机信息
                if (cellInfo instanceof CellInfoCdma) {
                    CellSignalStrengthCdma cellSignalStrength = ((CellInfoCdma) cellInfo).getCellSignalStrength();
                    cdmaBean.asuLevel = cellSignalStrength.getAsuLevel();
                    cdmaBean.cdmaDbm = cellSignalStrength.getCdmaDbm();
                    cdmaBean.cdmaEcio = cellSignalStrength.getCdmaEcio();
                    cdmaBean.cdmaLevel = cellSignalStrength.getCdmaLevel();
                    cdmaBean.dbm = cellSignalStrength.getDbm();
                    cdmaBean.evdoDbm = cellSignalStrength.getEvdoDbm();
                    cdmaBean.evdoEcio = cellSignalStrength.getEvdoEcio();
                    cdmaBean.evdoLevel = cellSignalStrength.getEvdoLevel();
                    cdmaBean.evdoSnr = cellSignalStrength.getEvdoSnr();
                    cdmaBean.level = cellSignalStrength.getLevel();
                    CellIdentityCdma cellIdentity = ((CellInfoCdma) cellInfo).getCellIdentity();
                    cdmaBean.basestationId = cellIdentity.getBasestationId();
                    cdmaBean.latitude = cellIdentity.getLatitude();
                    cdmaBean.longitude = cellIdentity.getLongitude();
                    cdmaBean.networkId = cellIdentity.getNetworkId();
                    cdmaBean.systemId = cellIdentity.getSystemId();
    
                    basestation_info.append(cdmaBean.toString() + "\n");
                    Log.d(TAG, cdmaBean.toString());
                }
                //WCDMA手机信息
                if (cellInfo instanceof CellInfoWcdma) {
                    CellSignalStrengthWcdma cellSignalStrength = ((CellInfoWcdma) cellInfo).getCellSignalStrength();
                    wcdmaBean.asuLevel = cellSignalStrength.getAsuLevel();
                    wcdmaBean.dbm = cellSignalStrength.getDbm();
                    wcdmaBean.level = cellSignalStrength.getLevel();
                    CellIdentityWcdma cellIdentity = ((CellInfoWcdma) cellInfo).getCellIdentity();
                    wcdmaBean.cid = cellIdentity.getCid();
                    wcdmaBean.lac = cellIdentity.getLac();
                    wcdmaBean.mcc = cellIdentity.getMcc();
                    wcdmaBean.psc = cellIdentity.getPsc();
                    basestation_info.append(wcdmaBean.toString() + "\n");
                    Log.d(TAG, wcdmaBean.toString());
                }
            }
            //Log.d(TAG,stringBuffer.toString());
        }
    }
    


    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <LinearLayout
            android:background="#ccc"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="3">
    
            <TextView
                android:id="@+id/tipInfo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="正在获取..."
                />
        </LinearLayout>
    
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">
            <Button
                android:onClick="baseStation"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="获取基站信息"/>
            <ScrollView
                android:layout_width="match_parent"
                android:layout_height="match_parent">
            <TextView
                android:id="@+id/basestation_info"
                android:layout_weight="1"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
            </ScrollView>
        </LinearLayout>
    
    </LinearLayout>
    

    最后给 AndroidManifest 添加权限


    <!-- 连接互联网Internet权限 -->
        <uses-permission android:name="android.permission.INTERNET" />
        <!-- GPS定位权限 -->
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>


    最后来看一下最终的效果图 :




    如果是定位没有成功有可能是,手机GPS没有打开、在室内会很慢几乎获取不到(强烈建议室外获取)!


    展开全文
  • 自己做的实时定位系统

    千次阅读 2011-04-07 12:38:00
    <br />实时定位系统是一套集移动手机、GPS、网络技术于一体的系统。本系统采用B/S结构模式开发,结合Android、Asp、Flex等开发手段。 <br /> 然后登入网页中利用相应的账号和密码进入系统,如下图:...

    实时定位系统是一套集移动手机、GPS、网络技术于一体的系统。本系统采用B/S结构模式开发,结合AndroidAspFlex等开发手段。

    然后登入网页中利用相应的账号和密码进入系统,如下图:

    展开全文
  • 展示实时定位

    2019-12-24 09:05:00
    展示实时定位 <style> .map { width: 100%; height:400px; } </style>
    
    
        
        
        
        
        展示实时定位
    
    <style>
        .map {
            width: 100%;
            height:400px;
        }
    </style>
    
    展开全文
  • 微信小程序获取实时定位(记录)

    千次阅读 2019-12-09 15:27:37
    首先在app.json里配置: "requiredBackgroundModes": [ ...在需要定位的页面js里: getUserLocation() { wx.getSetting({ success(res) { console.log(res) if (res.authSetting['scope.us...

    首先在app.json里配置:

     "requiredBackgroundModes": [
    	 "location"
     ]	
    

    在需要定位的页面js里:

    getUserLocation() {
        wx.getSetting({
          success(res) {
            console.log(res)
            if (res.authSetting['scope.userLocationBackground']) {
              wx.startLocationUpdateBackground({
                success: (res) => {
                  console.log('startLocationUpdate-res', res)
                },
                fail: (err) => {
                  console.log('startLocationUpdate-err', err)
                }
              })
            } else {
              if (res.authSetting['scope.userLocation'] == false) {
                console.log('打开设置页面去授权')
              } else {
                wx.startLocationUpdateBackground({
                  success: (res) => {
                    console.log('startLocationUpdate-res', res)
                  },
                  fail: (err) => {
                    console.log('startLocationUpdate-err', err)
                  }
                })
              }
            }
          }
        })
      },
    	
    
      onShow: function() {
      
        this.getUserLocation();
        const _locationChangeFn = res => {
          console.log('location change', res.latitude, res.longitude)
        }
        wx.onLocationChange(_locationChangeFn);
      }
    

    注意:这个API只能在手机上运行,工具上会报错,真机调试就好啦。
    在这里插入图片描述

    展开全文
  • 、简单实现百度地图实时定位功能

    千次阅读 2017-06-21 11:19:20
    首先是在百度地图官网注册账户,然后进行申请api,其他就不啰嗦了,获取sha1码方法 参考如下文章 ... 上代码 public class MainActivity extends AppCompatActivity { MapView mapView;
  • 使用百度地图api模拟实时定位页面 完整示例

    万次阅读 热门讨论 2018-08-06 10:09:34
    使用百度地图api模拟实时定位页面 完整示例 效果:使用百度地图api在页面上显示车辆的实时位置,并有自动刷新和手动刷新两种方式可以选择。每次刷新后,都会在地图上显示车辆的最新位置。 示例运行效果截图...
  • 捕风者是全球超高精度 IP 实时定位系统,系统界面如下图所示。IP 定位功能返回 IP 的定位结果信息,并进行地图可视化展示;逆 IP 定位功能,通过关键字搜索和在地图上指定区域的方式,显示指定地理范围内的 IP 分布...
  • 最近公司做的一个app项目需要用到百度地图实时定位功能,app项目是用ionic做的,所以用的也是百度地图web版。具体需要实现的功能类似于导航的时候有个小车在地图上随着实时位置移动,本功能不需要导航,只需要小车在...
  • Android基于高德地图实时定位服务

    千次阅读 2017-03-27 14:07:54
    Service功能有:实时定位(后台进行) Service不会,去百度谷歌 功能有 实时定位(30秒间隔) 判断是否在规定的时间段内 判断距离是否大于规定的距离 判断服务是否在开启的状态服务代码:LocationService...
  • android GPS实时定位

    千次阅读 2014-08-19 10:06:40
    在Android中实现GPS实时定位的方法与步骤: 第一步:到Android百度地图的官网 http://developer.baidu.com/map/sdk-android.htm 下载定位SDK(新版本的定位与百度地图不再捆绑在一起)。
  • Service+WebSocket实现实时定位

    千次阅读 2017-09-12 11:13:04
    背景最近遇到了这样一个需求:实现一个实时定位功能,并将定位到的信息上传至服务器。思路首先实现一个长生命周期的Service服务; 其次通过BroadcastReceiver监听系统广播,当Service被杀死的时候重新启动服务; ...
  • 滴滴打车用户和司机的定位是如何实现实时定位的,我想用微信小程序实现类似的功能,能够实现吗
  • 使用高德定位SDK实时定位

    千次阅读 2016-03-07 15:54:55
    使用高德地图定位SDK实现实时定位并显示在UI界面上 二、SDK下载并获取Key 下载地址http://lbs.amap.com/api/android-location-sdk/download/ 获取Key Android Studio 查看安全SHA1:打开终端View---Tool...
  • 近期在项目中遇到实时定位车辆位置时,给车添加图标,问题就是每一次定位车辆位置时图标重合,并没有被想象的前面那个位置图标消失,重写创建一个图标。解决办法: 将地图的marker变量设置为全局变量。 private ...
  • 小马看Gis--通过Openlayers实现实时定位

    万次阅读 热门讨论 2011-01-19 13:42:00
    通过Openlayers实现实时定位
  • 无人驾驶–实时定位与地图构建(SLAM)仿真与实战(附源码) 一个SLAM的技术小结,供自己回顾也为后人学习提供参考。 另外建了一个无人驾驶方面的微信交流群,有兴趣的同行或者专家学者可以加我微信:wxl609278502 ...
  • 微信小程序实时定位(腾讯地图)

    千次阅读 2019-08-31 14:33:12
    微信小程序实时获取地理位置-腾讯地图 微信小程序-获取当前城市位置: 一. 我用的腾讯定位服务 https://lbs.qq.com/ 打开之后点击控制台 2.我们创建自己的密匙key 3.下载微信小程序JavaScript SDK 下在地址:...
  • 最近写项目的时候遇到一个问题,需要用到实时定位,H5页面怎么实时定位。然后就是各种百度和文档,试用了很多方法,都不太理想,终于找到一个比较中肯的方法。 我用的是腾讯地图,使用的话去腾讯地图注册账号申请一...
  • UWB高精度实时定位系统

    千次阅读 2009-03-20 09:23:00
    Ubisense 高精度实时定位系统系统构成: iLocateTM UWB定位系统采用无线超宽带UWB技术,构建了革命性的高精度实时定位系统RTLS,该系统在传统的应用环境中稳定达到15cm的3D定位精度,系统包含三个组成部分:传感器...
  • 安卓高德地图实时定位方法的封装

    千次阅读 2018-02-08 16:54:17
    安卓地图的开发对于一个没有地图开发经验的人来说还是有点摸不着头脑的,我刚开始的时候就走了很多...1、拷贝 jar 文件至 libs 文件夹下将下载的定位 SDK jar 文件复制到工程(此处截图以官方示例Demo为例子)的 ...
1 2 3 4 5 ... 20
收藏数 160,327
精华内容 64,130
关键字:

实时定位