Mongodb $geoIntersects不准确问题

发布于:2024-12-18 ⋅ 阅读:(76) ⋅ 点赞:(0)

使用Mongodb的$geoIntersects判断两个经纬度组成的矩形是否相交,按照文档描述书写无法得到正确结果

复现方法:
插入一条数据

db.getCollection("1").insertOne({
	"box": {
        "type": "Polygon",
        "coordinates": [
            [
                [
                    109.052708152174,
                    32.5329883043478
                ],
                [
                    109.052708152174,
                    46.7784766086957
                ],
                [
                    130.576614304348,
                    46.7784766086957
                ],
                [
                    130.576614304348,
                    32.5329883043478
                ],
                [
                    109.052708152174,
                    32.5329883043478
                ]
            ]
        ]
    }
})

查询是否相交

db.getCollection("1").find(
	{
		"box":{
     $geoIntersects: {
        $geometry: {
           type: "Polygon" ,
           coordinates: [[[117.390449, 32.37105],
					 [117.390449, 32.598390499999994],
					 [117.486579, 32.598390499999994],
					 [117.486579, 32.37105],
					 [117.390449, 32.37105]]],
					 
        }
     }
  }
	}
)

得到的结果为空

网上搜索 得到的结果寥寥无几 看到stackoverflow上有人说可以加上一个CRS参数

db.getCollection("1").find(
	{
		"box":{
     $geoIntersects: {
        $geometry: {
           type: "Polygon" ,
           coordinates: [[[117.390449, 32.37105],
					 [117.390449, 32.598390499999994],
					 [117.486579, 32.598390499999994],
					 [117.486579, 32.37105],
					 [117.390449, 32.37105]]],
					 crs: {
              type: "name",
              properties: { name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" }
           }
        }
     }
  }
	}
)

竟然就可以了

搜了半天也不知道这个具体什么原理,只查到是按照某个指定的参考系来判断地理位置


网站公告

今日签到

点亮在社区的每一天
去签到