MongoDB,使用C#实现2d地理位置检索
这两天在研究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地理位置检索的更多相关文章
- Bing Maps进阶系列二:使用GeocodeService进行地理位置检索
Bing Maps进阶系列二:使用GeocodeService进行地理位置检索 在<Bing Maps进阶系列一:初识Bing Maps地图服务>里已经对GeocodeService的功能 ...
- MongoDB地理空间(2d)索引创建与查询
LBS(Location Based Services)定位服务,即根据用户位置查询用户附近相关信息,这一功能在很多应用上都有所使用.基于用户位置进行查询时,需要提供用户位置的经纬度.为了提高查询速度 ...
- MongoDB地理空间数据存储及检索
目录 1.存入地理数据 GeoJSON数据存入 1.Ponit 点数据 2.LineString 线数据(多段线) 3. Polygon 多边形数据 4.MultiPoint多点.MultiLineS ...
- asp.net的mongodb实例
mongodb为2.6版本, .net是4.0, c#接口时1.7. 运行环境为windows8 with visual studio2010 注意事项:在mongodb中使用地理位置存储信息且动用到 ...
- 深入浅出Symfony2 - 结合MongoDB开发LBS应用
简介 随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理.我所在的项目也正从事相关系统的开发,我们使用的是S ...
- 结合MongoDB开发LBS应用
然后列举一下需求:1.实时性要高,有频繁的更新和读取2.可按距离排序支持分页3.支持多条件筛选(一个经纬度数据还包含其他属性,比如社交系统的性别.年龄) 方案简单介绍:1.sphinx geo索引支持 ...
- 利用mongodb开发lbs应用实践【转】
近期作为突击队员,与同事一起突击构建了一个简单的lbs系统.当前比较主流的做法是使用mongodb,因为其已经封装了常用的lbs基本操作(如查找附近的人),功能非常强大,对于开发周期只有一周的项目,m ...
- MongoDB实用教程
---------------------------------------------------------------------------------------------------- ...
- 结合MongoDB开发LBS应用(转)
原文链接:结合MongoDB开发LBS应用 简介 随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理.我所在 ...
随机推荐
- 基于Travis CI实现 Gitbook在 Github 和 Coding 的同步部署
前言 最近发现自己的博客在使用vpn的情况下打开很慢,百度站点也抓取失败,于是将自己的博客借助hexo-deploy 插件很容易同步部署到了coding上.只需要在你的hexo配置文件_config. ...
- AndroidStudio中使用XML和Java代码混合控制UI界面实现QQ相册照片列表页面
场景 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建Androi ...
- AndroidStudio更新时报错:Connection Error,Temp directory inside installation
场景 在将Android Studio的 .AndroidStudio目录修改为别的目录后,打开AS,提示更新,点击更新后提示: Connection Error,Temp directory ins ...
- python——面向对象(3),搬家具
"""date: 2020.2.9搬家具:将小于房子剩余面积的家具搬进房子1.定义家具类,房屋类""" class Furniture(): ...
- List集合去重各种方式汇总
package com.sb.test; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java. ...
- JS笔记之第二天
一元运算符:++ -- 分为前++和后++ and 前--和后-- 如果++在后面,如:num++ +10参与运算,先参与运算,自身再加1 如果++在前面,如:++num+10参与运算,先自身加1, ...
- 剑指offer-面试题61-扑克牌中的顺子-数组
/* 题目: 从扑克牌中随机抽取n个数字,判断他们是否连续,扑克牌从A~K,大小王可代替任意数字. */ #include<iostream> #include<cstdlib> ...
- opencv —— HoughCircles 霍夫圆变换原理及圆检测
霍夫圆变换原理 霍夫圆变换的基本原理与霍夫线变换(https://www.cnblogs.com/bjxqmy/p/12331656.html)大体类似. 对直线来说,一条直线能由极径极角(r,θ)表 ...
- 【spring boot】SpringBoot初学(9.1)– 简单配置corsFilter对跨域请求支持
前言 只是简单的配置实现了cors,并没有讲任何东西.(有兴趣的可看: CORS 跨域 实现思路及相关解决方案) github: https://github.com/vergilyn/SpringB ...
- 剑指offer-面试题32-从上到下打印二叉树-二叉树遍历
/* 题目: 按层自上向下打印二叉树. */ /* 思路: 使用队列,将节点压入队列中,再弹出来,压入其左右子节点,循环,直到栈为空. */ #include<iostream> #inc ...