搜尋
首頁後端開發php教程mongodb 地理位置搜尋

LBS,儲存每個地點的經緯度座標,搜尋附近的地點,建立地理位置索引可提高查詢效率。

mongodb地理位置索引,2d2dsphere,對應平面和球面。

1.建立lbs集合存放地點座標

use lbs;

db.lbs.insert(
    {
        loc:{
            type: "Point",
            coordinates: [113.332264, 23.156206]
        },
        name: "广州东站"
    }
)

db.lbs.insert(
    {
        loc:{
            type: "Point",
            coordinates: [113.330611, 23.147234]
        },
        name: "林和西"
    }
)

db.lbs.insert(
    {
        loc:{
            type: "Point",
            coordinates: [113.328095, 23.165376]
        },
        name: "天平架"
    }
)

2.建立地理位置索引
db.lbs.ensureIndex(
    {
        loc: "2dsphere"
    }
)

3.查詢附近的地理位置索引
db.lbs.find(
    {
        loc: {
            $near:{
                $geometry:{
                    type: "Point",
                    coordinates: [113.323568, 23.146436]
                },
                $maxDistance: 1000
            }
        }
    }
)

3.查詢附近的地理位置索引

{ "_id" : ObjectId("556a651996f1ac2add8928fa"), "loc" : { "type" : "Point", "coordinates" : [ 113.330611, 23.147234 ] }, "name" : "林和西" }

3.查詢附近的地理位置索引

<?php // 连接mongodb
function conn($dbhost, $dbname, $dbuser, $dbpasswd){
    $server = &#39;mongodb://&#39;.$dbuser.&#39;:&#39;.$dbpasswd.&#39;@&#39;.$dbhost.&#39;/&#39;.$dbname;
    try{
        $conn = new MongoClient($server);
        $db = $conn->selectDB($dbname);
    } catch (MongoException $e){
        throw new ErrorException('Unable to connect to db server. Error:' . $e->getMessage(), 31);
    }
    return $db;
}

// 插入坐标到mongodb
function add($dbconn, $tablename, $longitude, $latitude, $name){
    $index = array('loc'=>'2dsphere');
    $data = array(
            'loc' => array(
                    'type' => 'Point',
                    'coordinates' => array(doubleval($longitude), doubleval($latitude))
            ),
            'name' => $name
    );
    $coll = $dbconn->selectCollection($tablename);
    $coll->ensureIndex($index);
    $result = $coll->insert($data, array('w' => true));
    return (isset($result['ok']) && !empty($result['ok'])) ? true : false;
}

// 搜寻附近的坐标
function query($dbconn, $tablename, $longitude, $latitude, $maxdistance, $limit=10){
    $param = array(
        'loc' => array(
            '$nearSphere' => array(
                '$geometry' => array(
                    'type' => 'Point',
                    'coordinates' => array(doubleval($longitude), doubleval($latitude)), 
                ),
                '$maxDistance' => $maxdistance*1000
            )
        )
    );

    $coll = $dbconn->selectCollection($tablename);
    $cursor = $coll->find($param);
    $cursor = $cursor->limit($limit);
    
    $result = array();
    foreach($cursor as $v){
        $result[] = $v;
    }  

    return $result;
}

$db = conn('localhost','lbs','root','123456');

// 随机插入100条坐标纪录
for($i=0; $i

3.查詢附近的地理位置索引

use lbs;
db.createUser(
    {
        "user":"root",
        "pwd":"123456",
        "roles":[]
    }
)

db.auth(
    {
        "user":"root",
        "pwd":"123456"
    }
)

3.查詢附近的地理位置索引
rrreee

5
座標:113.323568, 23.146436

搜尋附近一公里內的點,由近到遠一點 rrreee


示範php程式碼,首先需要在

mongodb的lbs中建立使用者和執行auth

。方法如下:

rrreee🎜 🎜 以上就介紹了mongodb 地理位置搜尋,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。 🎜 🎜 🎜
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
使用C#中的Array.Sort函数对数组进行排序使用C#中的Array.Sort函数对数组进行排序Nov 18, 2023 am 10:37 AM

标题:C#中使用Array.Sort函数对数组进行排序的示例正文:在C#中,数组是一种常用的数据结构,经常需要对数组进行排序操作。C#提供了Array类,其中有Sort方法可以方便地对数组进行排序。本文将演示如何使用C#中的Array.Sort函数对数组进行排序,并提供具体的代码示例。首先,我们需要了解一下Array.Sort函数的基本用法。Array.So

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code<form name="myform"

简单明了的PHP array_merge_recursive()函数使用方法简单明了的PHP array_merge_recursive()函数使用方法Jun 27, 2023 pm 01:48 PM

在进行PHP编程时,我们常常需要对数组进行合并。PHP提供了array_merge()函数来完成数组合并的工作,不过当数组中存在相同的键时,该函数会覆盖原有的值。为了解决这个问题,PHP在语言中还提供了一个array_merge_recursive()函数,该函数可以合并数组并保留相同键的值,使得程序的设计变得更加灵活。array_merge

如何使用PHP中的array_combine函数将两个数组拼成关联数组如何使用PHP中的array_combine函数将两个数组拼成关联数组Jun 26, 2023 pm 01:41 PM

在PHP中,有许多强大的数组函数可以使数组的操作更加方便和快捷。当我们需要将两个数组拼成一个关联数组时,可以使用PHP的array_combine函数来实现这一操作。这个函数实际上是用来将一个数组的键作为另一个数组的值,合并成一个新的关联数组。接下来,我们将会讲解如何使用PHP中的array_combine函数将两个数组拼成关联数组。了解array_comb

PHP array_fill()函数用法详解PHP array_fill()函数用法详解Jun 27, 2023 am 08:42 AM

在PHP编程中,数组是一种非常重要的数据结构,能够轻松地处理大量数据。PHP中提供了许多数组相关的函数,array_fill()就是其中之一。本篇文章将详细介绍array_fill()函数的用法,以及在实际应用中的一些技巧。一、array_fill()函数概述array_fill()函数的作用是创建一个指定长度的、由相同的值组成的数组。具体来说,该函数的语法

Python中的Array模块怎么使用Python中的Array模块怎么使用May 01, 2023 am 09:13 AM

Python中的array模块是一个预定义的数组,因此其在内存中占用的空间比标准列表小得多,同时也可以执行快速的元素级别操作,例如添加、删除、索引和切片等操作。此外,数组中的所有元素都是同一种类型,因此可以使用数组提供的高效数值运算函数,例如计算平均值、最大值和最小值等。另外,array模块还支持将数组对象直接写入和读取到二进制文件中,这使得在处理大量数值数据时更加高效。因此,如果您需要处理大量同质数据,可以考虑使用Python的array模块来优化代码的执行效率。要使用array模块,首先需要

Java中的ArrayStoreException异常的常见原因是什么?Java中的ArrayStoreException异常的常见原因是什么?Jun 25, 2023 am 09:48 AM

在Java编程中,数组是一种重要的数据结构。数组可以在一个变量中存储多个值,更重要的是可以使用索引访问每个值。但是在使用数组时,可能会出现一些异常,其中之一是ArrayStoreException。本文将讨论ArrayStoreException异常的常见原因。1.类型不匹配数组在创建时必须指定元素类型。当我们试图将不兼容的数据类型存储到一个数组中时,就会抛

PHP array_change_key_case()函数使用方法介绍PHP array_change_key_case()函数使用方法介绍Jun 27, 2023 am 10:43 AM

在PHP编程中,数组是一个经常用到的数据类型。而关于数组的操作函数也是相当多的,其中包括了array_change_key_case()函数。该函数可以将数组中键名的大小写进行转换,从而方便我们进行数据的处理。本文就来介绍一下PHP中array_change_key_case()函数的使用方法。一、函数语法及参数array_change_ke

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具