zoukankan      html  css  js  c++  java
  • MongoDB学习笔记~地图坐标的支持与附近点的查找

    回到目录

    Mongodb这个数据库很不错,它的方法也不错,为了实现坐标功能,它甚至为我们提供了geo里的一些算法,帮助我们通过某个点去位置和查找N个附近的点。

    表面

    在您存储地理数据和编写查询条件前,首先,您必须选择表面类型,这将被用在计算中。您所选择的类型将会影响您的数据如何被存储,建立的索引的类型,以及您的查询的语法形式。

    MongoDB提供了两种表面类型:

    球面

    如果需要计算地理数据就像在一个类似于地球的球形表面上,您可以选择球形表面来存储数据,这样就可以使用 2dsphere 索引。

    您可以按照坐标轴:经度,纬度 的方式把位置数据存储为GeoJSON对象。GeoJSON的坐标参考系使用的是 WGS84 数据。

    平面

    如果需要计算距离,就像在一个欧几里德平面上,您可以按照正常坐标对的形式存储位置数据并使用 2d索引。

    测试类

        public class Zoo : NoSqlEntity
        {
            public string title { get; set; }
            public double[] loc { get; set; }
    
        }

    测试数据

            [TestMethod]
            public void Addloc()
            {
                for (int i = -180; i < 180; i += 5)
                    MongoDbClient.MongoManager<Zoo>.Instance.InsertOne(new Zoo { title = "北京" + i, loc = new double[] { i, i } });
            }

    数据添加后的列表

    查找你需要的附近的点

           [TestMethod]
            public void Findloc()
            {
                var filter = Builders<Zoo>.Filter.Near(i => i.loc, 50, 50, maxDistance: 50);
                var result = MongoDbClient.MongoManager<Zoo>.Instance.Find(filter);
                foreach (var item in result.ToList())
                {
                    Console.WriteLine(item.title);
                }
            }

    回到目录

    为数据集合的坐标字段添加索引

  • 相关阅读:
    Python(93)_网络编程基础
    Web前端(13)_路径
    Web前端(12)_注释
    Web前端(11)_base标签
    Python(91)_python复习
    Web前端(10)_css文本样式
    Web前端(9)_div+span等标签
    虚拟化(6)_CPU虚拟化
    虚拟化(5)_打开tcp监听
    虚拟化(4)_离线克隆与在线克隆
  • 原文地址:https://www.cnblogs.com/lori/p/6952208.html
Copyright © 2011-2022 走看看