位置_位置预测 - CSDN
精华内容
参与话题
  • Android模拟位置实现

    万次阅读 热门讨论 2017-01-23 16:21:12
    Android上有很多位置欺骗软件,当你打开微信搜索附近的,可以通过这类软件把你位置定位到指定位置。 今天,我们就使用Android自带的模拟位置功能来实现。 准备工作: 1:设置-开发者选项-允许模拟位置 打钩   2:...

    手机定位方式目前有4种:基站定位,WIFI定位,GPS定位,AGPS定位。

    目前比较稳定的思路就是使用hook,用它对app_process进行注入,找到定位的方法,然后进行修改,但此方法需要root权限。参考:http://www.jianshu.com/p/91e312faa6c3

    我这里本方法是利用手机自带的"模拟位置"功能实现运行时修改LocationManager结果,原理:使用android自带的调试api,模拟gps provider的结果。

    LocationManager.setTestProviderLocation(Provider, Location);

    不稳定,特征明显,容易按特征嗅探到(有反作弊机制的游戏基本都能查出来),需要打开开发者的允许模拟位置选项。


    准备工作:

    1:设置-开发者选项-允许模拟位置 打钩

     

    2:我这里使用了百度地图,所以需要去申请一个地图的key。传送门申请key

    3:定位方式修改成 仅限GPS

      

    4:不是所有软件的GPS都能被欺骗,比如QQ就不行,可能是QQ的定位方式经过处理,旧版本微信测试成功。


    上代码

    1:界面

    Demo很简单,就一个界面,界面上一个百度地图,用来选择位置,一个确认按钮Button,一个显示位置文字的TextView

    布局文件activity_main.xml如下

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical" >
    
        <Button
            android:id="@+id/bt_Ok"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="确定" />
    
        <TextView
            android:id="@+id/tv_location"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
    
            <com.baidu.mapapi.map.MapView
                android:id="@+id/bmapView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:clickable="true" />
        </RelativeLayout>
    
    </LinearLayout>


    2:代码

    需要的接口:

    LocationListener 模拟GPS接口
    BDLocationListener 百度定位接口
    OnMapClickListener 地图点击接口
    OnMarkerDragListener 地图上拖动接口
    OnGetGeoCoderResultListener 反地理信息搜索接口


    变量定义:

        private String mMockProviderName = LocationManager.GPS_PROVIDER;;
        private Button bt_Ok;
        private LocationManager locationManager;
        private double latitude = 31.3029742, longitude = 120.6097126;// 默认常州
        private Thread thread;// 需要一个线程一直刷新
        private Boolean RUN = true;
        private TextView tv_location;
    
        boolean isFirstLoc = true;// 是否首次定位
        // 定位相关
        private LocationClient mLocClient;
        private LocationMode mCurrentMode;// 定位模式
        private BitmapDescriptor mCurrentMarker;// 定位图标
        private MapView mMapView;
        private BaiduMap mBaiduMap;
    
        // 初始化全局 bitmap 信息,不用时及时 recycle
        private BitmapDescriptor bd = BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);
        private Marker mMarker;
        private LatLng curLatlng;
        private GeoCoder mSearch;


    关键代码:

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            iniView();
            iniListner();
            iniData();
        }
    
        /**
         * iniView 界面初始化
         * 
         */
        private void iniView() {
            bt_Ok = (Button) findViewById(R.id.bt_Ok);
            tv_location = (TextView) findViewById(R.id.tv_location);
            // 地图初始化
            mMapView = (MapView) findViewById(R.id.bmapView);
            mBaiduMap = mMapView.getMap();
            // 开启定位图层
            mBaiduMap.setMyLocationEnabled(true);
            // 定位初始化
            mLocClient = new LocationClient(this);
        }
    
        /**
         * iniListner 接口初始化
         * 
         */
        private void iniListner() {
            bt_Ok.setOnClickListener(this);
            mLocClient.registerLocationListener(this);
            mBaiduMap.setOnMapClickListener(this);
            mBaiduMap.setOnMarkerDragListener(this);
    
            // 初始化搜索模块,注册事件监听
            mSearch = GeoCoder.newInstance();
            mSearch.setOnGetGeoCodeResultListener(this);
        }
    
        /**
         * iniData 数据初始化
         * 
         */
        private void iniData() {
            inilocation();
            iniMap();
        }
    
        /**
         * iniMap 初始化地图
         * 
         */
        private void iniMap() {
            LocationClientOption option = new LocationClientOption();
            option.setOpenGps(true);// 打开gps
            option.setCoorType("bd09ll"); // 设置坐标类型
            option.setScanSpan(1000);
            mCurrentMode = LocationMode.NORMAL;
            // 缩放
            MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(14.0f);
            mBaiduMap.setMapStatus(msu);
    
            mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true,
                    mCurrentMarker));
            mLocClient.setLocOption(option);
            mLocClient.start();
            initOverlay();
    
            // 开启线程,一直修改GPS坐标
            thread = new Thread(new Runnable() {
    
                @Override
                public void run() {
                    while (RUN) {
                        try {
                            Thread.sleep(500);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        setLocation(longitude, latitude);
                    }
                }
            });
            thread.start();
        }
    
        /**
         * initOverlay 设置覆盖物,这里就是地图上那个点
         * 
         */
        private void initOverlay() {
            LatLng ll = new LatLng(latitude, longitude);
            OverlayOptions oo = new MarkerOptions().position(ll).icon(bd).zIndex(9).draggable(true);
            mMarker = (Marker) (mBaiduMap.addOverlay(oo));
        }
    
        /**
         * inilocation 初始化 位置模拟
         * 
         */
        private void inilocation() {
            locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
            locationManager.addTestProvider(mMockProviderName, false, true, false, false, true, true,
                    true, 0, 5);
            locationManager.setTestProviderEnabled(mMockProviderName, true);
            locationManager.requestLocationUpdates(mMockProviderName, 0, 0, this);
        }
    
        /**
         * setLocation 设置GPS的位置
         * 
         */
        private void setLocation(double longitude, double latitude) {
            Location location = new Location(mMockProviderName);
            location.setTime(System.currentTimeMillis());
            location.setLatitude(latitude);
            location.setLongitude(longitude);
            location.setAltitude(2.0f);
            location.setAccuracy(3.0f);
            locationManager.setTestProviderLocation(mMockProviderName, location);
        }
    
        @Override
        public void onLocationChanged(Location location) {
            double lat = location.getLatitude();
            double lng = location.getLongitude();
            Log.i("gps", String.format("location: x=%s y=%s", lat, lng));
        }
    
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        protected void onPause() {
            mMapView.onPause();
            super.onPause();
        }
    
        @Override
        protected void onResume() {
            mMapView.onResume();
            super.onResume();
        }
    
        @Override
        public void onBackPressed() {
            thisFinish();
        }
    
        @Override
        protected void onDestroy() {
            RUN = false;
            thread = null;
    
            // 退出时销毁定位
            mLocClient.stop();
            // 关闭定位图层
            mBaiduMap.setMyLocationEnabled(false);
            mMapView.onDestroy();
            mMapView = null;
            bd.recycle();
            super.onDestroy();
        }
    
        private void thisFinish() {
            AlertDialog.Builder build = new AlertDialog.Builder(this);
            build.setTitle("提示");
            build.setMessage("退出后,将不再提供定位服务,继续退出吗?");
            build.setPositiveButton("确认", new DialogInterface.OnClickListener() {
    
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finish();
                }
            });
            build.setNeutralButton("最小化", new DialogInterface.OnClickListener() {
    
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    moveTaskToBack(true);
                }
            });
            build.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    
                @Override
                public void onClick(DialogInterface dialog, int which) {
    
                }
            });
            build.show();
        }
    
        @Override
        public void onClick(View v) {
            int id = v.getId();
            switch (id) {
            case R.id.bt_Ok:
                latitude = curLatlng.latitude;
                longitude = curLatlng.longitude;
                break;
            }
        }
    
        /**
         * 定位SDK监听函数
         */
        @Override
        public void onReceiveLocation(BDLocation location) {
            // map view 销毁后不在处理新接收的位置
            if (location == null || mMapView == null) {
                return;
            }
    
            if (isFirstLoc) {
                isFirstLoc = false;
                LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
                setCurrentMapLatLng(ll);
            }
        }
    
        @Override
        public void onMapClick(LatLng arg0) {
            setCurrentMapLatLng(arg0);
        }
    
        @Override
        public boolean onMapPoiClick(MapPoi arg0) {
            // TODO Auto-generated method stub
            return false;
        }
    
        /**
         * setCurrentMapLatLng 设置当前坐标
         */
        private void setCurrentMapLatLng(LatLng arg0) {
            curLatlng = arg0;
            mMarker.setPosition(arg0);
    
            // 设置地图中心点为这是位置
            LatLng ll = new LatLng(arg0.latitude, arg0.longitude);
            MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
            mBaiduMap.animateMapStatus(u);
    
            // 根据经纬度坐标 找到实地信息,会在接口onGetReverseGeoCodeResult中呈现结果
            mSearch.reverseGeoCode(new ReverseGeoCodeOption().location(arg0));
        }
    
        /**
         * onMarkerDrag 地图上标记拖动结束
         */
        @Override
        public void onMarkerDrag(Marker arg0) {
            // TODO Auto-generated method stub
    
        }
    
        /**
         * onMarkerDragEnd 地图上标记拖动结束
         */
        @Override
        public void onMarkerDragEnd(Marker marker) {
            setCurrentMapLatLng(marker.getPosition());
        }
    
        /**
         * onMarkerDragStart 地图上标记拖动开始
         */
        @Override
        public void onMarkerDragStart(Marker arg0) {
            // TODO Auto-generated method stub
    
        }
    
        /**
         * onGetGeoCodeResult 搜索(根据实地信息-->经纬坐标)
         */
        @Override
        public void onGetGeoCodeResult(GeoCodeResult arg0) {
            // TODO Auto-generated method stub
    
        }
    
        /**
         * onGetReverseGeoCodeResult 搜索(根据坐标-->实地信息)
         */
        @Override
        public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
            if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
                Toast.makeText(this, "抱歉,未能找到结果", Toast.LENGTH_LONG).show();
                return;
            }
    
            tv_location.setText(String.format("伪造位置:%s", result.getAddress()));
        }

    到底,就结束了,现在运行我们的程序,然后选择一个地点,然后点击确认

    接着,打开微信,打开附近的人,查看结果,如果没有修改定位,多尝试几次打开附近,如果还不行,那就参考 准备工作 是否做好



    程序github地址:https://github.com/Aslanchen/SimulateGps



    展开全文
  • npm安装依赖的位置设置

    万次阅读 2018-12-03 10:42:33
    npm 依赖安装 npm 全局安装依赖位置默认是c盘,c盘一般是系统安装盘,装太多东西容易造成系统运行缓慢,因此想将依赖包安在指定位置。 nodejs的安装 nodejs的安装可以直接到菜鸟教程查看: ...nodejs的安装包下载位置:...

    npm 依赖安装

    npm 全局安装依赖位置默认是c盘,c盘一般是系统安装盘,装太多东西容易造成系统运行缓慢,因此想将依赖包安在指定位置。

    nodejs的安装

    nodejs的安装可以直接到菜鸟教程查看:
    http://www.runoob.com/nodejs/nodejs-install-setup.html

    nodejs的安装包下载位置:
    https://nodejs.org/en/download/

    npm与nodejs是同时安装的,首先查看node是否安装成功,打开命令行输入:

    node --version 
    

    查看node安装成功

    查看默认依赖的全局安装位置

    因为项目中安装的依赖一般都是在当前项目的node_modules文件夹中,不需要特意设置,只要是通过npm install --save modulename方式安装都是在本地项目的文件夹中,所以这里的安装位置是指的全局安装。
    以下命令均可查看全局安装位置:

    • npm config ls 命令
    • npm get prefix命令

    在这里插入图片描述

    设置依赖的全局安装位置

    若是默认路径不是你想要使用的路径,并且想要使用nodejs的安装位置:
    首先创建node_cache与node_global文件夹,然后设置 全局安装位置

    npm set cache D:\ST\nodejs\node_cache
    npm set prefix D:\ST\nodejs\node_global
    

    在这里插入图片描述
    设置后在获取得到你想要的路径:
    设置后的全局安装路径

    重启命令终端后可以进行全局安装

    nodejs环境变量设置

    “我的电脑”-右键-“属性”-“高级系统设置”-“高级”-“环境变量”
    在这里插入图片描述
    系统变量设置NODE_PATH=D:\ST\nodejs\node_global\node_modules

    设置 用户变量 Path=D:\ST\nodejs\node_global
    设置用户变量时如果path已经有值,请在之前设置值得末尾添加";",英文字符的";",然后在添加D:\ST\nodejs\node_global

    展开全文
  • pip安装的库的默认位置

    万次阅读 2019-02-15 00:33:05
    1、在命令窗口运行python -m site 2、复制上面路径到文件浏览器打开,记得把双斜杠改成单斜杠 3、搜索你想要的库,以PyInstaller为例

    1、在命令窗口运行python -m site

    2、复制上面路径到文件浏览器打开,记得把双斜杠改成单斜杠

    3、搜索你想要的库,以PyInstaller为例

    展开全文
  • HTML中怎么设置图片的位置和大小

    万次阅读 2018-11-06 18:23:46
    HTML中怎么设置图片的位置和大小

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   

    其他的也不多废话了直接上代码:

    <html>
    <head>
    <style type="text/css">   <! 设置图片的属性>
    img{     
      position:absolute;   <! 绝对位移>
      left:300px;
      top:150px;
     <!  width="1000px"; 这里设置图片宽度,但是并没有成功>
     <! height="400px";这里设置图片高度,  但是并没有成功 建议使用下面的方法来调增宽度>

      }  <! 图像的属性,包括位置,x,y方向的坐标 >
    </style>
    </head>
    <body>
    <img src="./fan.jpg" width="800" height="800" />   <! 这里的图片路径我放在网页的当前目录>
    </body>


    如果想固定字体在网页中的位子可以用如下标签:

    <font color="#660000" size="6" style='position:absolute;left:300;top:200'>网络人VS灰鸽子</font>

    以上红色部分是注释!

               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    展开全文
  • 【IDEA篇】查找,定位文件的位置

    万次阅读 热门讨论 2019-11-25 21:18:18
    第一种:在项目目录中定位当前文件 话不多说,直接上图 第二种:在物理位置定位当前文件 如图:
  • Anaconda管理的(安装的)包的位置

    万次阅读 2019-05-05 14:46:48
    具体路径为F:\Anaconda\Lib\site-packages 标红的地方为你自己下载Anaconda的位置
  • 获取光标位置 //ctrl 是dom节点 function getCursortPosition (ctrl) { //获取光标位置函数 var CaretPos = 0; // IE Support if (document.selection) { ctrl.focus (); // 获取焦点 var Sel =...
  • java Sting 如何替换指定位置的字符

    万次阅读 多人点赞 2017-09-26 14:34:05
    1、java Sting 如何替换指定位置的字符 public static void main(String[] args) { String str = "****"; if(StringUtils.isNotBlank(str)){ StringBuilder sb = new StringBuilder("18698587234
  • 在matlab中调整legend的位置

    万次阅读 2014-09-25 22:26:10
  • python查找元素在列表中位置

    万次阅读 2019-04-02 20:13:00
    p=list.index(value) list为列表的名字 value为查找的值 p为value在list的位置
  • 如何查看PYTHON的安装位置以及安装第三方库的位置

    万次阅读 多人点赞 2017-11-08 00:28:39
    当我们需要查看PYTHON安装位置或者第三方包的位置时候,记不清楚原来安装到哪里可以使用以下命令来查看 进入PYTHON后 import sys sys.path 则会打印出你的当前版本安装包的位置 例如: import sys module = sys...
  • 验证位置时发生错误:“org.tigris.subversion.javahl.ClientException...... 验证位置时发生错误:“org.tigris.subversion.javahl.ClientException: RA layer request failed svn: Server sent unexpected return...
  • 用DiskGenius重新搜索一下分区,高级方式,“按扇区”搜索,不保留不正确的看不到正确文件的分区,只保留现有的分区,重点是不要保留它提示的“扩展分区”,等它逐个搜索到每个逻辑分区。...
  • js获取滚动条位置:绝对有效

    万次阅读 2009-08-08 09:36:00
    获取坐标: IE (event.x event.y) 获取滚动条位置: document.body.scrollTop (滚动条离页面最上方的距离) document.body.scrollLeft (滚动条离页面最左方的距离)当我用js获取当前垂直或者水平方向滚动条...
  • Latex固定表格图片位置

    万次阅读 2019-02-28 16:02:36
    有时候我们不需要latex的自动优化table和figure的位置,而是需要固定位置。 代码 使用package \usepackage{float} 在你的表格和图片选项中设置 [H] 即: \begin{table}[H] \centering \caption{结果分析表} \...
  • PID控制及位置式与增量式区别

    万次阅读 多人点赞 2017-05-21 21:52:21
    参考文献:《深入浅出过程控制-小锅带你学过控》
  • \subsubsection{\kai{metis的数据流图}} \begin{figure}[H]  \centering  \includegraphics[width=1.2\textwidth]{eps/metis_dataflow.eps}  \caption{metis dataflow}  \label{metis_dataflaw} ...
  • html 怎样设置按钮的位置

    万次阅读 2011-11-30 15:05:14
    有好几种方法 方法一:style="padding-right:距离px;" 放在td或 div等里面 方法二:style="margin-right:距离px;" 放在 input 按钮里面 方法三:是table做的话 多做个td 用俩个或者3个td 最后一个td给整个table的3/1...
  • 使用js或者jq设置滚动条滚动位置

    万次阅读 2018-01-28 22:45:31
    js原生设置x轴和y轴就一个方法,首先获取到dom对象,然后设置位置即可, dom.scrollTo(x,y); //x为水平方向的滚动条位置,y为垂直方向的滚动条位置 如果只想设置y轴的滚动条位置,首先需要获取到当前x轴的滚动条...
  • echarts图例和文字位置控制

    万次阅读 2018-06-21 18:33:49
    如果图例 x设置right的时候,会发现文字和图例的位置反了。可以给x设置一个值,这样图例文字就不会颠倒了
1 2 3 4 5 ... 20
收藏数 5,430,058
精华内容 2,172,023
关键字:

位置