使用Python MongoDB 进行地理空间查询
先决条件: MongoDB 和Python
GeoJSON是一种包含简单地理特征的开源格式,基于 JavaScript Object Notation。它用于在坐标空间中格式化形状,MongoDB 支持多种类型以允许存储地理空间数据。本文将介绍在 MongoDB 中使用地理空间的各种方式,并解释 GeoJSON 多边形和点类型。
GeoJSON 格式
- 一个名为 type 的字段,指定 GeoJSON 对象类型和
- 一个名为坐标的字段,用于指定对象的坐标。
注意:如果指定经纬度坐标,请先列出经度,再列出纬度。
需要的模块:
- Pymomgo:该模块用于与 MongoDB 交互。要安装它,请在终端中键入以下命令。
pip install pymongo OR condo install pymongo
- Matplotlib:该库用于绘制图形
- 底图:此模块用于使用Python绘制地图。要安装此模块,请在终端中键入以下命令。
conda install basemap
使用 MongoDB Atlas 的步骤:
- 从这里打开 MongoDB Atlas Cloud。
- 通过选择适合您的软件包创建帐户(您也可以选择免费版本,足以满足本文和学习目的)。
- 单击位于左侧菜单栏的集群视图。
- 单击Ellipses 按钮
(...)
并选择Load Sample Dataset 。 - 添加示例数据集后,单击连接按钮。
- 然后将 IP 地址列入白名单(选择您当前的 IP 地址或键入 0.0.0.0/0 IP 以允许它从任何地方访问。单击下图所示的按钮。
- 然后单击连接到应用程序按钮。
- 复制 cluster_uri 并将其粘贴到“course_cluster_uri”。
下面是实现。
import pymongo
import pprint
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
course_cluster_uri = 'your_connection_string'
course_client = pymongo.MongoClient(course_cluster_uri)
# sample Database
db = course_client['sample_geospatial']
# sample Collection
shipwrecks = db['shipwrecks']
l = list(shipwrecks.find({}))
lngs = [x['londec'] for x in l]
lats = [x['latdec'] for x in l]
# Clear the figure (this is nice if you
# execute the cell multiple times)
plt.clf()
# Set the size of our figure
plt.figure(figsize =(14, 8))
# Set the center of our map with our
# first pair of coordinates and set
# the projection
m = Basemap(lat_0 = lats[0],
lon_0 = lngs[0],
projection ='cyl')
# Draw the coastlines and the states
m.drawcoastlines()
m.drawstates()
# Convert our coordinates to the system
# that the projection uses
x, y = m(lngs, lats)
# Plot our converted coordinates
plt.scatter(x, y)
# Display our beautiful map
plt.show()
输出: