c# MongoDB 经纬度应用示例

class Program


{
static string mongodb = "mongodb://127.0.0.1:27017";
static string database = "dbCardInfo";
static string tblName = "fcd1";
static MongoCollection<BsonDocument> table;
static void Main(string[] args)
{
MongoClient client;
MongoServer server;
MongoDatabase db;
MongoClientSettings setting = new MongoClientSettings();
setting.MaxConnectionPoolSize = 1000;
setting.MinConnectionPoolSize = 500;
client = new MongoClient(mongodb);
server = client.GetServer();
db = server.GetDatabase(database);
table = db.GetCollection(tblName);
#region 索引
//IndexKeysDocument doc = new IndexKeysDocument();//新建索引
//2d 平面坐标索引,适用于基于平面的坐标计算。也支持球面距离计算,不过官方推荐使用2dsphere索引
//BsonValue value = BsonValue.Create("2d");//创建2d索引
//2dsphere 几何球体索引,适用于球面几何运算
//不过,只要坐标跨度不太大(比如几百几千公里),这两个索引计算出的距离相差几乎可以忽略不计
//BsonValue value = BsonValue.Create("2dsphere");//创建2d索引
//doc.Add("loc", value);//loc为数据库中2d索引的对象名称
//table.CreateIndex(doc);//创建索引
#endregion
double y = 26.0623344427;
double x = 119.2916107177;
double maxDistance = 0.2;//单位公里(千米)
//6378137:地球半径,单位:米
IMongoQuery query = Query.WithinCircle("loc", x, y, maxDistance / (6378137 / 1000.0), true);
IMongoQuery query1 = Query.Near("loc", x, y, maxDistance / (6378137 / 1000.0), true);
//var finds = table.Find(query);
var finds = table.Find(query1);
int count = 0;
Parallel.ForEach(finds, (item) =>
{
Interlocked.Increment(ref count);
Debug.WriteLine(item["loc"]["lat"]+","+ item["loc"]["lng"]);
});
Console.WriteLine("over");
Console.ReadLine();
}
static void Search(IMongoQuery query)
{
List<LbsItem> cards = new List<LbsItem>();
try
{
MongoCursor<BsonDocument> res = table.Find(query).SetLimit(100000).SetSkip(1500000);
int count = 0;
var start = DateTime.Now;
Parallel.ForEach(res, (item) =>
{
Interlocked.Increment(ref count);
});
double etime = (DateTime.Now - start).TotalSeconds;
Console.WriteLine(count + ":" + etime + ";" + count / etime);
}
catch (Exception ex)
{
LogHelper.Error(ex);
}
}
}
public class LbsItem
{
/// <summary>
/// 终端标识
/// </summary>
public string tid
{
get; set;
}
/// <summary>
///
/// </summary>
public GeoJsonPoint<GeoJson2DGeographicCoordinates> loc { get; set; }
//或:public Location loc
{
get;set;
}
/// <summary>
/// 定位时间
/// </summary>
public DateTime time
{
get; set;
}
}
public class Location
{
/// <summary>
/// 经度
/// </summary>
public double lng
{
get; set;
}
/// <summary>
/// 纬度
/// </summary>
public double lat
{
get; set;
}
}



本文转自94cool博客园博客,原文链接:http://www.cnblogs.com/94cool/p/6209843.html,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值