mongodb中地理位置信息的存储和查询

命运对每个人都是一样的,不一样的是各自的努力和付出不同,付出的越多,努力的越多,得到的回报也越多,在你累的时候请看一下身边比你成功却还比你更努力的人,这样,你就会更有动力。

导读:本篇文章讲解 mongodb中地理位置信息的存储和查询,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

1、存储数据

        在百度地图拾取器(拾取坐标系统)中获取一些经纬度的值,提前写入代码集合中。然后利用逆地理位置api接口获取数据写入mongodb中。

注意:需要提前开发者认证,得到在应用管理中获取ak。

示例代码:

import requests
from pymongo import MongoClient

my_client = MongoClient('mongodb://root:88888888@192.168.124.49:27017')
my_db = my_client['test-mongo']
# print(my_db)

my_col = my_db['gps']
# print(my_col)
ak = 'duKnQ2pQCRIDADFDSTsS944SLfMvYrvw'

# gps '纬度,经度'  注意:直接从百度左边拾取器中获取的顺序为:'经度,纬度'
# 百度有自己的坐标加密方式:bd09ll
gps_set = {'40.060326,116.732761', '40.046187,116.767831', '40.008618,116.799451', '39.904198,116.675844', '40.023648,116.718388'}


def reverse_geocoding(gps, ak):
    """
    :param gps: str(lat)+','+str(lng)
    :param ak: ak
    :return:
    """
    url = 'http://api.map.baidu.com/reverse_geocoding/v3/?'
    params = {
        "location": gps,
        "output": 'json',
        "ak": ak,
        "coordtype": "bd09ll",  # 默认值
    }
    response = requests.get(url, params=params)
    return response.json()


def format_data(data):
    data_dict = {}
    # 简单数据结构的存储
    data_dict['location'] = {
        "type": "Point",
        "coordinates": [data['location']['lng'], data['location']['lat']]
    }
    data_dict['formatted_address'] = data['formatted_address']
    data_dict['others'] = data
    return data_dict


col_list = []
for i in gps_set:
    response = reverse_geocoding(i, ak)
    print(response)
    res = format_data(response['result'])
    print(res)
    col_list.append(res)
    if len(col_list) == 2:
        my_col.insert_many(col_list)
        col_list = []
if len(col_list) > 0:
    my_col.insert_many(col_list)

数据库中存储的数据如下:

mongodb中地理位置信息的存储和查询

注意:数据存储结构中必须包含如下类型,便于建立索引。其中type类型可以选择别的属性值。

mongodb中地理位置信息的存储和查询

2、创建索引

注意:要想通过地理位置进行查询,首先要建立索引,否则报错。

创建索引时,官方文档如下格式:

mongodb中地理位置信息的存储和查询

使用Studio 3T工具创建索引:

mongodb中地理位置信息的存储和查询

mongodb中地理位置信息的存储和查询

mongodb中地理位置信息的存储和查询

mongodb中地理位置信息的存储和查询

3、查询地理位置数据

注意:查询前必须创建索引,否则查询报错。

官方文档如下所示:

mongodb中地理位置信息的存储和查询

示例代码:

from pymongo import MongoClient

my_client = MongoClient('mongodb://root:88888888@192.168.124.49:27017')
my_db = my_client['test-mongo']
# print(my_db)

my_col = my_db['gps']
# print(my_col)

query = {'location': {'$near': {
    '$geometry': {'type': "Point", 'coordinates': [116.762761, 40.060326]},
    '$minDistance': 0,
    '$maxDistance': 5000
}}}

datas = my_col.find(query)
# print(datas)
for data in datas:
    print(data)

运行结果:

mongodb中地理位置信息的存储和查询

mongodb中地理位置信息的存储和查询

详见官方文档:Geospatial Queries — MongoDB Manual

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/142775.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!