欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MongoDB开发LBS应用

程序员文章站 2022-04-29 13:21:50
...

随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理。

关于LBS的详细介绍及通用的几个解决方案,可以参考:深入浅出Symfony2 - 结合MongoDB开发LBS应用

 

本文主要举例说明使用Perl语言 + MongoDB实现查找附近的人的实现方案。

涉及的官方API说明文档列表:

1、2dsphere Indexes

2、GeoJSON Objects

3、$geoNear (aggregation)

 

实现步骤如下:

1、建立数据库表geoperson,包含位置信息字段:loc (按照GeoJSON格式组织), 数据如下:

{

    "_id": "o15041420964119780063",

    "name": "stephen",

    "head_fid": "f15022500199301140308001",

    "loc": {

        "type": "Point",

        "coordinates": [

            119.29647,

            26.07421

        ]

    },

    "type": "geoperson",

    "province": "福建省"

}

 

2、建立2dsphere索引

my $mocl = mdb()->get_collection("geoperson")->ensure_index({loc=>"2dsphere"});

 

3、查找附近2.5公里的人

my $rad = 2500; # 查找范围 2.5公里

my $max_size = 20; # 最多返回20条匹配数据

my $longitude = 119.31647;  # 中心点坐标(经纬度)

my $latitude = 26.17421;

my $mocl = mdb()->get_collection("geoperson")->aggregate([

                    {

                        '$geoNear'=>{

                                'near'=> { type=>"Point", coordinates=>[$longitude, $latitude] }, # 也要采取GeoJSON格式

                                #'num'=> $max_size,#The default value is 100

                                'spherical'=>1, #Required if using a 2dsphere index.

                                # Specify the distance in meters if the specified point is GeoJSON

                                'maxDistance'=>$rad, # 单位是米

                                # The output field that contains the calculated distance.

                                'distanceField'=>"distance",

                       }

                   },

                   { '$match'=> { "name"=> "lily" } }  # 进一步过滤条件

                   { '$sort'=> { "ut"=> -1 } }  # 排序

         ]);

 

 

MongoDB原生支持地理位置索引,且高性能、支持复杂查询。

是不是很简单呀。

 

相关标签: mongodb perl lbs