精华内容
下载资源
问答
  • 写前:mongodb开发环境配置好,我使用的技术spingboot+mongodb+rpc+doubbo我要做什么:以一个经纬度为圆心,然后通过mongodb内置技术实现以某半径的所有点,并计算点的距离,切还要分页,排序(排序根据多个条件)...

    简介:公司需要,所以自己就在网上找了资料进行学习,希望为以后的你提供帮助。

    写前:mongodb开发环境配置好,我使用的技术spingboot+mongodb+rpc+doubbo

    我要做什么:以一个经纬度为圆心,然后通过mongodb内置技术实现以某半径内的所有点,并计算点的距离,切还要分页,排序(排序根据多个条件)

    1:以某点为圆心,查询半径内的所有点

    Within(在地理位置范围内的):

    findByLocationWithin(Circle circle) 

    {"location" : {"$within" : {"$center" : [ [x, y], distance]}}}


    使用这个需要添加索引:



    其中distinct 的单位为:度 需要进行转换,

    如:以点(117.202, 31.97)20km范围内的点;

    {"loc" : {"$within" : {"$center" : [ [117.202, 31.97], 0.1796624]}}}


    2:求以某点范围内的点切与之间的距离

    Point location = new Point(requestDoto.getLongitude(), requestDoto.getLatitude());
    NearQuery query = NearQuery.near(location).num(1000).query(new Query()).maxDistance(new Distance(20, Metrics.KILOMETERS));
    
    GeoResults<AuctionPo> geoResults = mongoTemplate.geoNear(query, AuctionPo.class);
    即可获的,





    展开全文
  • poi搜索,百度地图中貌似默认是必须加上搜索关键词的。现在的需求是,我不要关键词,而是获得周边一定范围内所有的数据,百度现在有这个接口能用吗
  • java线程范围内的共享数据

    万次阅读 2019-04-10 14:57:37
    线程范围内共享数据的作用和目的: 线程范围内的共享变量就是在一个相同的线程内部,不同的模块可以对相同的数据进行操作,但是另一个线程对同一个数据进行操作并不影响本线程。 其实就是实现两(多)个线程内部对...

    线程范围内共享数据的作用和目的:

    线程范围内的共享变量就是在一个相同的线程内部,不同的模块可以对相同的数据进行操作,但是另一个线程对同一个数据进行操作并不影响本线程。

    其实就是实现两(多)个线程内部对数据实现共享,线程之间(线程外部)相互独立。

    全局变量会被所有的线程都共享,现在需要实现同一个线程内不同模块间变量的共享,关于线程范围内的变量共享的举例,直接用程序代码进行时说明,创建两个线程,它们都访问了两个模块,两个模块都取值,同一个线程设置的值,只能被相同的线程获取。

    以下代码会产生问题:

    import java.util.HashMap;
    import java.util.Map;
    import java.util.Random;
     
    public class ThreadScopeShareData {
    	   private static  int data=0;
    		public static void main(String[] args) {
    		//使用循环创建两个线程
    		for(int i=0;i<2;i++){
    			new Thread(new Runnable(){
    				public void run() {
    				    data = new Random().nextInt();//线程产生一个数据
    					System.out.println(Thread.currentThread().getName()+" has put data: "+data);			
    					new A().get();//A模块取出数据
    					new B().get();//B模块取出数据
    				}
    			}).start();
    		}
    	}
     
    	//模块A
    	static class A{
    		public void get(){
    		System.out.println("A from "+Thread.currentThread().getName()+" has put data: "+data);
    		}
    	}
     
    	//模块B
    	static class B{
    		public void get(){
    		
    			System.out.println("B from "+Thread.currentThread().getName()+" has put data: "+data);
    		}
    	
     
    }
    }

    两个线程之间会共享数据data,输出的时候会互相影响。

    但当我们通过Map将每一个线程中的data分别存储在不同的键值对中时,就可以实现各个线程之间的独立。代码如下:

    package cn.itcast.heima;
     
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Random;
     
    public class ThreadScopeShareData {
    	private static Map<Thread,Integer> threadData = new HashMap<Thread,Integer>();//定义一个Map,为每一个线程存放独立数据
    	public static void main(String[] args) {
    		//使用循环创建两个线程
    		for(int i=0;i<2;i++){
    			new Thread(new Runnable(){
    				public void run() {
    					int data = new Random().nextInt();//线程产生一个数据
    					System.out.println(Thread.currentThread().getName()+" has put data: "+data);
    					threadData.put(Thread.currentThread(),data);
    					new A().get();//A模块取出数据
    					new B().get();//B模块取出数据
    				}
    			}).start();
    		}
    	}
     
    	//模块A
    	static class A{
    		public void get(){
    			int data = threadData.get(Thread.currentThread());//取出当前线程中变量的值
    			System.out.println("A from "+Thread.currentThread().getName()+" has put data: "+data);
    		}
    	}
     
    	//模块B
    	static class B{
    		public void get(){
    			int data = threadData.get(Thread.currentThread());
    			System.out.println("B from "+Thread.currentThread().getName()+" has put data: "+data);
    		}
    	}
     
    }

        总结:多线程情况下,类变量会导致的安全问题。

    展开全文
  • 如何获取可视范围数据呢?首先我们要捕获到地图对角线的经纬度。我们可以用uniapp自带uni.createMapContext(mapId,this)来获取 regionchange(){ letmap=uni.createMapContext('map'); map.getRegion({ success:...

     

    如何获取可视范围的数据呢?首先我们要捕获到地图对角线的经纬度。我们可以用uniapp自带uni.createMapContext(mapId,this)来获取

    regionchange() {
        let map = uni.createMapContext('map');
        map.getRegion({
             success: res => {
                 let obj = {
                      latitude: JSON.stringify([{
                          min: res.southwest.latitude.toString(),
                          max: res.northeast.latitude.toString()
                      }]),
                      longitude: JSON.stringify([{
                          min: res.southwest.longitude.toString(),
                          max: res.northeast.longitude.toString()
                      }])
                 }
                 this.getMarks(obj);//捕获到对角线经纬度后,调用方法传参给后端
             },
             fail: (data, code) => {
                   console.log('fail' + JSON.stringify(data));
             }
        })
    }

     

    展开全文
  • 笔记摘要所谓线程范围内共享数据,即对于相同的程序代码,多个模块在同一个线程中运行时要共享一份数据,而在另外线程中运行时又共享另外一份数据,API中为我们提供了一个操作线程范围内共享数据的类ThreadLocal,...

    笔记摘要

    所谓线程范围内共享数据,即对于相同的程序代码,多个模块在同一个线程中运行时要共享一份数据,而在另外线程中运行时又共享另外一份数据,API中为我们提供了一个操作线程范围内共享数据的类ThreadLocal,对于线程范围内共享数据的应用,在ThreadLocal的应用场景中进行了介绍,然后主要对它的使用进行讲解,演示了由单一数据的共享到将多个数据封装到一个对象中,然后进行共享。在开始先用一个Map集合简单实现线程范围内数据的共享

    1. 使用Map实现线程范围内数据的共享

    原理:将线程对象作为map的键存入,这样就保证了map对象的唯一,也就保证了线程内数据的唯一

    关键: 明确一点,把当前线程对象作为map集合的键存进去

    import java.util.HashMap;  
    import java.util.Map;  
    import java.util.Random;  
    
    public class ThreadScopeShareData {  
    
        private static int data = 0;    //定义一个全局的成员变量  
        private static Map<Thread, Integer> threadData = new HashMap<Thread, Integer>();  
        public static void main(String[] args) {  
            //启动两个线程  
            for(int i=0;i<2;i++){  
                new Thread(new Runnable(){  
                    @Override  
                    public void run() {  
                        int data = new Random().nextInt();  //准备一个数据  
                        System.out.println(Thread.currentThread().getName()   
                                + " has put data :" + data);  
                        //把当前线程对象作为键,就可以保证map对象的唯一,即保证线程内的数据唯一  
                        threadData.put(Thread.currentThread(), data);  
                        new A().get();  
                        new B().get();  
                    }  
                }).start();  
            }  
        }  
        //定义一个类模拟获取数据  
        static class A{  
            public void get(){  
                int data = threadData.get(Thread.currentThread());  
                System.out.println("A from " + Thread.currentThread().getName()   
                        + " get data :" + data);  
            }  
        }  
    
        static class B{  
            public void get(){  
                int data = threadData.get(Thread.currentThread());            
                System.out.println("B from " + Thread.currentThread().getName()   
                        + " get data :" + data);  
            }         
        }  
    }

    打印结果

    Thread-0 has put data:-49248136
    Thread-1 has put data:311124475
    A from Thread-0 get data:-49248136
    A from Thread-1 get data:311124475
    B from Thread-0 get data:-49248136
    B from Thread-1 get data:311124475

    2. ThreadLocal类

    ThreadLocal的作用和目的:

    用于实现线程内的数据共享,即对于相同的程序代码,多个模块在同一个线程中运行时要共享一份数据,而在另外线程中运行时又共享另外一份数据。

    每个线程调用全局ThreadLocal对象的set方法,就相当于往其内部的map中增加一条记录,key分别是各自的线程,value是各自的set方法传进去的值。在线程结束时可以调用ThreadLocal.clear()方法,这样会更快释放内存,不调用也可以,因为线程结束后也可以自动释放相关的ThreadLocal变量。

    3. ThreadLocal的应用场景

    1、订单处理包含一系列操作:减少库存量、增加一条流水台账、修改总账,这几个操作要在同一个事务中完成,通常也即同一个线程中进行处理,如果累加公司应收款的操作失败了,则应该把前面的操作回滚,否则,提交所有操作,这要求这些操作使用相同的数据库连接对象,而这些操作的代码分别位于不同的模块类中。

    2、 银行转账包含一系列操作:把转出帐户的余额减少,把转入帐户的余额增加,这两个操作要在同一个事务中完成,它们必须使用相同的数据库连接对象,转入和转出操作的代码分别是两个不同的帐户对象的方法。

    3、例如Strut2的ActionContext,同一段代码被不同的线程调用运行时,该代码操作的数据是每个线程各自的状态和数据,对于不同的线程来说,getContext方法拿到的对象都不相同,对同一个线程来说,不管调用getContext方法多少次和在哪个模块中getContext方法,拿到的都是同一个。

    线程范围内共享数据示意图

    这里写图片描述

    实现对ThreadLocal变量的封装, 让外界不要直接操作ThreadLocal变量由于对基本类型的数据的封装,这种应用相对很少见。而对对象类型的数据的封装,比较常见,即让某个类针对不同线程分别创建一个独立的实例对象。所以我们要对数据进行封装。

    实现方式一

    示例说明:

    1、 该示例包含了对基本类型数据的共享和对象类型数据的共享

    2、定义一个全局共享的ThreadLocal变量,然后启动多个线程向该ThreadLocal变量中存储一个随机值,接着各个线程调用另外其他多个类的方法,这多个类的方法中读取这个ThreadLocal变量的值,就可以看到多个类在同一个线程中共享同一份数据。

    3、但这里每次存储数据时,都是使用同一个ThreadLocal对象,只是重新赋值而已

    import java.util.HashMap;  
    import java.util.Map;  
    import java.util.Random;  
    
    public class ThreadLocalTest {  
    
        private static ThreadLocal<Integer> x = new ThreadLocal<Integer>();  
        //创建一个存储封装类对象的ThreadLocal  
        private static ThreadLocal<MyThreadScopeData> myThreadScopeData = new  ThreadLocal<MyThreadScopeData>();  
        private static int data = 0;  
    
        public static void main(String[] args){  
    
            //产生两个线程  
            for(int i=0;i<2;i++){  
            new Thread(new Runnable(){  
    
            @Override  
            public void run() {  
                //共享单一的数据  
                int data = new Random().nextInt();  
                System.out.println(Thread.currentThread().getName()+"has put data : "+data);  
                x.set(data);      
    
                //共享多个数据  
                //将数据封装在myData对象中,并将myData作为myThreadScopeData的键  
                MyThreadScopeData myData = new MyThreadScopeData();  
                myData.setName("name "+data);  
                myData.setAge(data);  
                myThreadScopeData.set(myData);  
    
                new A().get();  
                new B().get();  
                }  
             }).start();  
          }  
       }  
    
        static class A{  
            public void get(){  
                int data = x.get();  
                System.out.println("A from "+Thread.currentThread().getName()+" get data :"+data);  
    
                //从myData中取出数据,并获取当前线程名,数据  
                MyThreadScopeData myData = myThreadScopeData.get();  
                System.out.println("A from "+Thread.currentThread().getName()+" getMyData: " +   
                        myData.getName() + "," +myData.getAge());  
            }  
        }  
    
        static class B{  
            public void get(){  
                int data = x.get();  
                System.out.println("B from "+Thread.currentThread().getName()+" get data :"+data);  
                MyThreadScopeData myData = myThreadScopeData.get();  
                System.out.println("B from "+Thread.currentThread().getName()+" getMyData: " +   
                        myData.getName() + "," +myData.getAge());  
            }  
        }  
    }  
    
    //封装数据的类  
    class MyThreadScopeData{  
    
        private String name;  
        private int age;  
        public String getName() {  
            return name;  
        }  
        public void setName(String name) {  
            this.name = name;  
        }  
        public int getAge() {  
            return age;  
        }  
        public void setAge(int age) {  
            this.age = age;  
        }  
    }  

    输出结果

    Thread-0has put data : 1317043235
    Thread-1has put data : -969579752
    A from Thread-0 get data :1317043235
    A from Thread-1 get data :-969579752
    A from Thread-0 getMyData: name 1317043235,1317043235
    A from Thread-1 getMyData: name -969579752,-969579752
    B from Thread-0 get data :1317043235
    B from Thread-1 get data :-969579752
    B from Thread-0 getMyData: name 1317043235,1317043235
    B from Thread-1 getMyData: name -969579752,-969579752

    实现方式二

    示例说明:

    这里模拟原始的单例模式,它们的区别是:单例模式中只有唯一的一个实例,而这里是每个线程拥有自己唯一的实例,只要是已经创建,就直接返回,保证每个线程拥有自己的唯一一份实例

    优点:

    这里可以返回每个线程自己唯一的实例对象,所以不必在外面定义,当在代码中的任意地方想获取到一个可以存储自己数据的线程实例的时候直接去调用getThreadInstance方法即可,直接定义在数据对象的内部,和数据关系更紧密,而方式一,则每次想存入数据的时候都需要在外面创建一个ThreadLocal对象用于存储数据。所以方式二更具封装性。

    package cn.itcast.heima2;  
    
    import java.util.HashMap;  
    import java.util.Map;  
    import java.util.Random;  
    
    public class ThreadLocalTest {  
    
        //创建一个ThreadLocal对象  
        private static ThreadLocal<Integer> x = new ThreadLocal<Integer>();  
    
        public static void main(String[] args) {  
            for(int i=0;i<2;i++){  
                new Thread(new Runnable(){  
                    @Override  
                    public void run() {  
                        int data = new Random().nextInt();  
                        System.out.println(Thread.currentThread().getName()   
                                + " has put data :" + data);  
                        x.set(data);    //往当前线程存入一条数据  
    
                        //获取与当前线程绑定的实例并设置值  
                        MyThreadScopeData.getThreadInstance().setName("name:" + data);  
                        MyThreadScopeData.getThreadInstance().setAge(data);  
                        new A().get();  
                        new B().get();  
                    }  
                }).start();  
            }  
        }  
    
        static class A{  
            public void get(){  
                int data = x.get();     //获取当前线程中的数据  
                System.out.println("A from " + Thread.currentThread().getName()   
                        + " get data :" + data);  
    
                //获取与当前线程绑定的实例  
                MyThreadScopeData myData = MyThreadScopeData.getThreadInstance();  
                System.out.println("A from " + Thread.currentThread().getName()   
                        + " getMyData: " + myData.getName() + "," +  
                        myData.getAge());  
            }  
        }  
    
        static class B{  
            public void get(){  
                int data = x.get();           
                System.out.println("B from " + Thread.currentThread().getName()   
                        + " get data :" + data);  
                MyThreadScopeData myData = MyThreadScopeData.getThreadInstance();  
                System.out.println("B from " + Thread.currentThread().getName()   
                        + " getMyData: " + myData.getName() + ",age: " +  
                        myData.getAge());             
            }         
        }  
    }  
    
    //一个绑定当前线程的类  
    class MyThreadScopeData{  
    
        private MyThreadScopeData(){}   //构造方法私有化  
        private static ThreadLocal<MyThreadScopeData> map = new ThreadLocal<MyThreadScopeData>();  
    
        //定义一个静态方法,返回各线程自己的实例   
        //这里不必用同步,因为每个线程都要创建自己的实例,所以没有线程安全问题。  
        public static /*synchronized*/ MyThreadScopeData getThreadInstance(){  
            MyThreadScopeData instance = map.get();     //获取当前线程绑定的实例  
            if(instance == null){         
                instance = new MyThreadScopeData();  
                map.set(instance);  //创建完之后,将实例对象存进去  
            }  
            return instance;  
        }  
    
        private String name;  
        private int age;  
        public String getName() {  
            return name;  
        }  
        public void setName(String name) {  
            this.name = name;  
        }  
        public int getAge() {  
            return age;  
        }  
        public void setAge(int age) {  
            this.age = age;  
        }  
    }  

    输出结果

    Thread-0 has put data :2105117242
    Thread-1 has put data :-368218341
    A from Thread-1 get data :-368218341
    A from Thread-1 getMyData: name:-368218341,-368218341
    A from Thread-0 get data :2105117242
    A from Thread-0 getMyData: name2105117242,2105117242
    B from Thread-0 get data :2105117242
    B from Thread-1 get data :-368218341
    B from Thread-0 getMyData: name2105117242,age: 2105117242
    B from Thread-1 getMyData: name:-368218341,age: -368218341

    4. 总结

    一个ThreadLocal代表一个变量,故其中只能放一个数据,有两个变量都要线程范围内共享,则要定义两个ThreadLocal对象,如果数据更多就很麻烦,可以先定义一个对象封装变量,然后在ThreadLocal中存储这一个对象,而这些操作都在提供线程数据类中完成

    展开全文
  • sql获取指定时间范围数据

    千次阅读 2012-02-10 17:31:51
    以下分别为获取本天、本周、本月数据需要的where条件,其中publishDate为数据库里面存储的日期字段 此代码是在查询oracle数据库的.net 代码 DateTime today = DateTime.Now; whereDay = string.Format("to_...
  • java 获取一定时间范围内的所有月份

    千次阅读 2018-11-23 14:47:46
    需求:获取2018年初到现在为止的所有月份统计数据 获取到所有月份 遍历月份获取数据得到list在前台显示 代码: main方法 使用simpledateFormat需要用try catch 包围 public static void main(String[] args) {...
  • 在项目当中,有很多时候需要根据当前时间来获取指定的时间范围,用于查询某个时间段的数据库数据,比如根据当前时间获取今天、昨天、一周、本周、一个月等 的时间范围
  • 查询选定日期范围内相关数据

    千次阅读 热门讨论 2017-04-22 17:17:08
     今天用到一个功能,利用两个DateTimePicker控件来选定一个日期范围作为查询条件,从数据库中取出这段时间添加的信息。之前也记得用过,不过没有做笔记,不得不又花了些时间才找到,所以现在记录下来,以备...
  • __in 存在于一个list范围内 __startswith 以…开头 __istartswith 以…开头 忽略大小写 __endswith 以…结尾 __iendswith 以…结尾,忽略大小写 __range 在…范围内 __year 日期字段的年份 __...
  • ## request功能 ...1.获取请求消息数据         1.获取请求行数据:            ※GET /day14/demo1?nam...
  • 获取百度地图可视区域范围数据

    千次阅读 2018-07-13 17:09:56
    思路:得到百度地图可视区域-可视区域的中心点可视区域的四个角的其中两个(东北角+西南角)搜索百度地图API接口:http://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference.html#a1b2getBounds()结果:...
  • java获取某个范围内的一个随机数

    万次阅读 2018-06-11 10:02:36
    一、取模操作 ...原理:要得到的随机数的范围是[2,100],假设返回的伪随机数的范围是[0,N),也即[0,N-1];对得到的这个数模99,于是计算得到的数的范围是[0,98];再把结果加2,范围就是[2,100]了。 */  
  • 注意:上面例子中,广西的行政区范围并非连续区域,而是由多个分散的范围组成,小O地图照样可以无遗漏的抓取全域数据。绝大多数爬虫软件都做不到的哦! [1] 新建爬虫任务 输入任务名称,设置任务保存路径,选择...
  • Django ORM查询指定日期范围内数据

    千次阅读 2020-06-15 21:42:28
    Django ORM查找指定日期范围内的方法 dt_s= datetime.now().date() # 2018-7-15 dt_e = (dt_s- timedelta(7)) # 2018-7-08 objs = Record.objects.filter(end_time__range=[dt_s, dt_e]) objs = Record.objects...
  • 获取距离某坐标附近一定范围内的点的两种方式 场景:数据库中有一些点坐标,需要查找出距离当前位置2千米范围内的坐标 方式1:根据两个经纬度计算距离,Oracle/MySql计算地表两点之间的距离: Oracle: 创建获取...
  • POI数据获取

    万次阅读 2017-03-03 15:18:50
    poi数据获取
  • import datetime from dateutil import rrule class TimeHelper(): def getMonthRangList(self, start_month, end_month): ... 从开始日期到结束日期查询存在的月份列表,除去本月的数据 :param start_month: ...
  • 获取遥感数据的网站

    千次阅读 2018-11-05 11:26:58
    获取遥感数据的网站 一、地理空间数据云 http://www.gscloud.cn/ 1.打开百度,搜索:地理空间数据云 2.打开第三个网站:地理空间数据云 ...6.点击“数据集”,选择所需的...7.输入想要获取数据范围 8.下...
  • 相关代码如下: private static Date getStartTime() { Calendar todayStart = Calendar.getInstance(); todayStart.set(Calendar.HOUR_OF_DAY,0); todayStart.set(Calendar.MINUTE,0); todayStart.set...
  • Android 获取GNSS原始数据

    千次阅读 热门讨论 2020-04-05 12:03:17
    获取安卓设备的GNSS测量数据方法 2016 年 5 月,Google 在 I/O 开发者会议上宣布,将为 Android Nougat 操作系统中的应用程序提供原始 GNSS 观测数据。 API参考(Google中文官网)DEMO参考(GNSSLogger) 1. 用到的...
  • SELECT * FROM SP_SO_ESLCS_STATION_HOUSE WHERE SQRT( (((114.0628672 - LNG) * ACOS(-1) * 12656 * COS(((114.0628672 + LNG) /...范围:0.5km  LNG为数据表经度字段  LAT为数据表纬度字段    
  • 在C#的List集合中有时候需要获取指定索引位置范围的元素对象来组成一个新的List集合,此时就可使用到List集合的扩展方法GetRange方法,GetRange方法专门用于获取List集合指定范围内的所有值,GetRange方法签名为List...
  • 用 Python 获取股市交易数据

    千次阅读 2020-04-13 11:09:47
    而我们的大盘最近也不消停,不过这也给大家抄底制造了机会,但机会都是给有准备的人,想要抓住机会就得懂得分析数据,想要分析数据还得先拿到交易数据,今天就来说说用 Python 如何获取股市交易数据。 TuShare 工具 ...
  • package day04; import java.util.ArrayList; import java.util.List; ... * 获取当前集合中指定范围内的子集,同样含头不含尾。 * @author kaixu * */ public class ListDemo3 { public...
  • 次函数可通过传入一个规则范围position="left,top,rigth,bottom",返回这个范围内的最大高程及其坐标和最小高程及其坐标 public string GetMultifyElevation(string positions) { positions = "116.0,40.166667,...
  • 2006年4月,OpenStreetMap基金会成立,鼓励自由地理数据的增长,发展和分布,并向所有人提供地理数据以供使用及分享。 OSM官方介绍网页: http://wiki.openstreetmap.org/wiki/Zh-ant:Map_Features#.E9.81.9...
  • GIS地理空间数据免费获取

    千次阅读 2019-01-27 13:36:45
    GIS地理空间数据免费获取 国内: 一、测绘地理信息局会提供权威的数据。 需要进入全国地理信息资源目录服务系统网站(http://www.webmap.cn/main.do?method=index),该网站提供:30米全球地表覆盖数据,GlobeLand30...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 661,745
精华内容 264,698
关键字:

获取范围内数据