博客
关于我
mongodb-地理坐标存储查询
阅读量:801 次
发布时间:2023-02-09

本文共 4587 字,大约阅读时间需要 15 分钟。

mongodb可支持空间地理搜索: 

查询器

$geoWithin       Selects geometries within a bounding GeoJSON geometry. The 2dsphere and 2d indexes support $geoWithin. replaces $within which is deprecated.$geoIntersects     Selects geometries that intersect with a GeoJSON geometry. The 2dsphere index supports $geoIntersects.$near          Returns geospatial objects in proximity to a point. Requires a geospatial index. The 2dsphere and 2d indexes support $near.$nearSphere       Returns geospatial objects in proximity to a point on a sphere. Requires a geospatial index. The 2dsphere and 2d indexes support $nearSphere.

查询参数: 

Specifies a geometry in  format to geospatial query operators.
Specifies a minimum distance to limit the results of  and  queries. For use with 2dsphere index only.
Specifies a maximum distance to limit the results of  and  queries. The and  indexes support .
Specifies a circle using legacy coordinate pairs to  queries when using planar geometry. The  index supports .
Specifies a circle using either legacy coordinate pairs or  format for  queries when using spherical geometry. The  and  indexes support .
Specifies a rectangular box using legacy coordinate pairs for  queries. The  index supports .
Specifies a polygon to using legacy coordinate pairs for  queries. The  index supports.
Deprecated. Modifies a  and  queries to ensure that even if a document matches the query multiple times, the query returns the document once.

1, geoWithIn查询, 替代以前的wihin查询, 查询多边形范围内的点

db.places.find(   {     loc: {       $geoWithin: {          $geometry: {             type : "Polygon" ,             coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ]          }       }     }   })

对于大于单个半球的查询, 需要加入crs

db.places.find(   {     loc: {       $geoWithin: {          $geometry: {             type : "Polygon" ,             coordinates: [               [                 [ -100, 60 ], [ -100, 0 ], [ -100, -60 ], [ 100, -60 ], [ 100, 60 ], [ -100, 60 ]               ]             ],             crs: {                type: "name",                properties: { name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" }             }          }       }     }   })

2, geoIntersects, 图形查询, 交集

db.places.find(   {     loc: {       $geoIntersects: {          $geometry: {             type: "Polygon" ,             coordinates: [               [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ]             ]          }       }     }   })

查询大于半个半球的

db.places.find(   {     loc: {       $geoIntersects: {          $geometry: {             type : "Polygon",             coordinates: [               [                 [ -100, 60 ], [ -100, 0 ], [ -100, -60 ], [ 100, -60 ], [ 100, 60 ], [ -100, 60 ]               ]             ],             crs: {                type: "name",                properties: { name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" }             }          }       }     }   })

3, $near, 由近道原返回文档的点, 经纬度罗列方式为 [ lng, lat ]

需要创建空间索引

2dsphere index if specifying a GeoJSON point,2d index if specifying a point using legacy coordinates.
db.places.ensureIndex( { loc : "2d" } )     //应该是固定格式

 

db.places.find(   {     location:       { $near :          {            $geometry: { type: "Point",  coordinates: [ -73.9667, 40.78 ] },            $minDistance: 1000,            $maxDistance: 5000          }       }   })

使用传统坐标查询: 

db.legacy2d.find(   { location : { $near : [ -73.9667, 40.78 ], $maxDistance: 0.10 } })

4, $nearSphere, 空间距离查询

同样需要建立空间索引

2dsphere index for location data defined as GeoJSON points2d index for location data defined as legacy coordinate pairs. To use a 2d index on GeoJSON points, create the index on the coordinates field of the GeoJSON object.

 

db.places.find(   {     location: {        $nearSphere: {           $geometry: {              type : "Point",              coordinates : [ -73.9667, 40.78 ]           },           $minDistance: 1000,           $maxDistance: 5000        }     }   })

 

最大距离内查询: 

db.places.find( {   loc: { $near: [ -74 , 40 ],  $maxDistance: 10 }} )

5, $center查询, 圆形查询

db.places.find(   { loc: { $geoWithin: { $center: [ [-74, 40.74], 10 ] } } })

6, $centerSphere 查询, 球星查询

db.places.find( {  loc: { $geoWithin: { $centerSphere: [ [ -88, 30 ], 10/3963.2 ] } }} )

7, $box查询, 先精度后纬度, first lower then upper

db.places.find( {   loc: { $geoWithin: { $box:  [ [ 0, 0 ], [ 100, 100 ] ] } }} )

8, $polygon, 多边形查询

db.places.find(  {     loc: {       $geoWithin: { $polygon: [ [ 0 , 0 ], [ 3 , 6 ], [ 6 , 0 ] ] }     }  })

 

mongodb的空间位置查询

我是勤劳的搬运工: -> https://docs.mongodb.com/manual/reference/operator/query-geospatial/

转载于:https://www.cnblogs.com/wenbronk/p/7217148.html

你可能感兴趣的文章
netty——Handler和pipeline
查看>>
Vue输出HTML
查看>>
netty——黏包半包的解决方案、滑动窗口的概念
查看>>
Netty中Http客户端、服务端的编解码器
查看>>
Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息
查看>>
Netty中实现多客户端连接与通信-以实现聊天室群聊功能为例(附代码下载)
查看>>
Netty中的组件是怎么交互的?
查看>>
Netty中集成Protobuf实现Java对象数据传递
查看>>
netty之 定长数据流处理数据粘包问题
查看>>
Netty事件注册机制深入解析
查看>>
netty代理
查看>>
Netty入门使用
查看>>
netty入门,入门代码执行流程,netty主要组件的理解
查看>>
Netty原理分析及实战(一)-同步阻塞模型(BIO)
查看>>
Netty原理分析及实战(三)-高可用服务端搭建
查看>>
Netty原理分析及实战(二)-同步非阻塞模型(NIO)
查看>>
Netty原理分析及实战(四)-客户端与服务端双向通信
查看>>
Netty发送JSON格式字符串数据
查看>>
Netty和Tomcat的区别已经性能对比
查看>>
Netty在IDEA中搭建HelloWorld服务端并对Netty执行流程与重要组件进行介绍
查看>>