这两天在研究mongoDB,从零开始接触它,为什么要研究它呢,因为它支持2d地图索引,而且速度非常快,可以用它来做类似微信的(摇一摇功能),不过网上很难搜到.net操作的,而且就算搜索到了也不能用,也许是驱动版本的问题。总之到处都找不到可用的代码,只好自己慢慢研究调试,终于成功查询到了附近的数据了。

我用的驱动版本是最新的,CSharpDriver-1.7.0.4714版本,在项目中引用相应驱动

MongoDB.Driver

MongoDB.Bson

定义全局变量
Random rd = new Random();

string dbname = "test";
 string cstr = "mongodb://127.0.0.1:27017";

新建两个内部类a1是我们的数据对象,loc是我们的2d位置坐标

public class a1 
        {
            public MongoDB.Bson.ObjectId _id { get; set; }
            public string T1 { get; set; }
            public string T2 { get; set; }
            public loc lo { get; set; }
            
        }
        public class loc 
        {
            public float lat { get; set; }
            public float lon { get; set; }
            public loc(float la, float lo)
            {
                lat = la;
                lon = lo;
            }

首先,自动生成50个随机坐标的数据

for (int i = 0; i < 100; i++)
            {
                a1 a = new a1();
                a.T1 = "DDDD";
                a.T2 = "DTTT";
                a.lo = new loc((float)rd.Next(90) + 3, (float)rd.Next(90) + 3);
                MongoDB.Driver.MongoServer server = MongoDB.Driver.MongoServer.Create(cstr);

MongoDB.Driver.MongoDatabase db = server.GetDatabase(dbname);
                MongoDB.Driver.MongoCollection col = db.GetCollection("user");
                col.Insert<a1>(a);
            }
            public loc()
            {
                // TODO: Complete member initialization
            }
        }

转化对象为json字符串

/// <summary>
        /// 生成Json格式
        /// </summary>
        /// <typeparam name="T">传入的类型</typeparam>
        /// <param name="obj">传入的数据</param>
        /// <returns>生成的json字符串</returns>
        public static string GetJson<T>(T obj)
        {
            JavaScriptSerializer jss = new JavaScriptSerializer();
            return jss.Serialize(obj);
        }

查找距离指定位置最近的20条数据

MongoDB.Driver.MongoServer server = MongoDB.Driver.MongoServer.Create(cstr);

MongoDB.Driver.MongoDatabase db = server.GetDatabase(dbname);
            MongoDB.Driver.MongoCollection col = db.GetCollection("user");
            col.CreateIndex("lo","2d");//创建2d索引
            var query = new MongoDB.Driver.QueryDocument { {"T1","DDDD"} };
      
      
           var re4 = col.GeoNearAs<a1>(query, 10.0, 10.0, 20);
           var t = re4.Hits;
           List<object> list = new List<object>();
           for (int i = 0; i < t.Count; i++)
           {
               var b = t.ElementAt(i);
               list.Add(b.Document);
           }
           richTextBox4.Text = GetJson<List<object>>(list); ;

然后,我们发现附近的数据被我们查询到了!

MongoDB,使用C#实现2d地理位置检索的更多相关文章

  1. Bing Maps进阶系列二:使用GeocodeService进行地理位置检索

    Bing Maps进阶系列二:使用GeocodeService进行地理位置检索 在<Bing Maps进阶系列一:初识Bing Maps地图服务>里已经对GeocodeService的功能 ...

  2. MongoDB地理空间(2d)索引创建与查询

    LBS(Location Based Services)定位服务,即根据用户位置查询用户附近相关信息,这一功能在很多应用上都有所使用.基于用户位置进行查询时,需要提供用户位置的经纬度.为了提高查询速度 ...

  3. MongoDB地理空间数据存储及检索

    目录 1.存入地理数据 GeoJSON数据存入 1.Ponit 点数据 2.LineString 线数据(多段线) 3. Polygon 多边形数据 4.MultiPoint多点.MultiLineS ...

  4. asp.net的mongodb实例

    mongodb为2.6版本, .net是4.0, c#接口时1.7. 运行环境为windows8 with visual studio2010 注意事项:在mongodb中使用地理位置存储信息且动用到 ...

  5. 深入浅出Symfony2 - 结合MongoDB开发LBS应用

    简介 随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理.我所在的项目也正从事相关系统的开发,我们使用的是S ...

  6. 结合MongoDB开发LBS应用

    然后列举一下需求:1.实时性要高,有频繁的更新和读取2.可按距离排序支持分页3.支持多条件筛选(一个经纬度数据还包含其他属性,比如社交系统的性别.年龄) 方案简单介绍:1.sphinx geo索引支持 ...

  7. 利用mongodb开发lbs应用实践【转】

    近期作为突击队员,与同事一起突击构建了一个简单的lbs系统.当前比较主流的做法是使用mongodb,因为其已经封装了常用的lbs基本操作(如查找附近的人),功能非常强大,对于开发周期只有一周的项目,m ...

  8. MongoDB实用教程

    ---------------------------------------------------------------------------------------------------- ...

  9. 结合MongoDB开发LBS应用(转)

    原文链接:结合MongoDB开发LBS应用 简介 随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理.我所在 ...

随机推荐

  1. Mysql无法启动、闪退

    一.mysql下载完成后,运行bin目录下的mysql.exe,提示文件缺失   二.此报错为VC运行库不全或没有安装导致,百度搜索“微软常用运行库合集”进行下载安装即可解决   三.运行时闪退,无法 ...

  2. StarUML之七、StarUML的Class Diagram(类图)示例

    UML 类图中的概念 类图关系:泛化(继承).实现.聚合.组合.关联.依赖 类图的详解可在网上查询(推荐https://zhuanlan.zhihu.com/p/24576502) 它描述了在一个系统 ...

  3. CSS中的圣杯布局与双飞翼布局

    一,圣杯布局 1,什么是圣杯布局? 所谓圣杯布局就是用于实现一个两侧宽度固定,中间宽度自适应的三栏布局 2,构建圣杯布局的步骤: 2.1,添加一个容器,在这个容器中添加放三个盒子(左.中.右): 2. ...

  4. JavaScript中基本数据类型之间的转换

    在JavaScript中共有六种数据类型,其中有五种是基本数据类型,还有一种则是引用数据类型.五种基本数据类型分别是:Number 数值类型.String 字符串类型.Boolean 布尔类型, nu ...

  5. element-ui 组件 el-calendar 农历显示问题

    一.官方文档:https://element.eleme.cn/#/zh-CN/component/calendar 发现官方并无农历显示的介绍 二.1. 自己写阳历转阴历的方法或引入别人写好的 JS ...

  6. 编译Qualcomm的Hexagon exampls错误

    在下载了Qualcomm的Hexagon SDK 351版本之后,想跑里面的examples,然后参照文档的说,比如在examples/common/sobel3x3_v60目录下面,先执行了SDK根 ...

  7. PHP-CMS代码审计(4)

    这次找了个发卡平台,url:  https://files.cnblogs.com/files/b1gstar/kamiphp.zip 从52破解上下载的 : 先把网站搭建起来. 网站没有采用mvc框 ...

  8. LeetCode 面试题52. 两个链表的第一个公共节点

    题目链接:https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/ 输入两个链表 ...

  9. spring cloud微服务快速教程之(八) Spring Cloud Alibaba--nacos(二)、配置中心

    0-前言 上一篇我们介绍了nacos作为服务注册发现组件的功能,nacos还具有配置中心的功能,而且支持热加载: 在此之前,配置中心有Spring Cloud Config,实际上,用这个有很多风险和 ...

  10. HTML5文档类型如何定义,有哪些标签,以及如何使用,从整体认识HTML5

    html5新增结构标签 header 头部 nav 导航 section 区域 article 文章 aside 侧边栏 figure 一组多媒体内容 figcaption 多媒体内容的标题 foot ...