LBS

LBS是基于位置的服务,典型的场景如外卖,附近的人等。

常用的架构,方案

  • MongoDB
  • Mysql+GeoHash
  • Redis+GeoHash
  • Postgresql+gis 本文的采用的是Postgresql+gis+geodjango

django实现

这里记录一下实现记录,demo github地址:https://github.com/itswcg/geodjango

安装postgres

# 这里以centos7为例
$ yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
$ yum install postgresql10
$ yum install postgresql10-server
$ /usr/pgsql-10/bin/postgresql-10-setup initdb
$ systemctl start postgresql-10
$ 修改密码,建数据库略

安装PostGis插件

$ yum install postgis24_10
$ 进入数据库
gisdb=# CREATE EXTENSION postgis;
gisdb=# CREATE EXTENSION postgis_topology;
gisdb=# \dx # 查看是否安装成功

安装geodjango

# 使用geodjango需要安装额外的地理库
# 安装GEOS, X,Y,Z 指版本号,自己选择
$ wget https://download.osgeo.org/geos/geos-X.Y.Z.tar.bz2
$ tar xjf geos-X.Y.Z.tar.bz2
$ cd geos-X.Y.Z
$ ./configure
$ make
$ sudo make install
$ cd ..
# 安装PROJ.4
$ wget https://download.osgeo.org/proj/proj-X.Y.Z.tar.gz
$ wget https://download.osgeo.org/proj/proj-datumgrid-X.Y.tar.gz
$ tar xzf proj-X.Y.Z.tar.gz
$ cd proj-X.Y.Z/nad
$ tar xzf ../../proj-datumgrid-X.Y.tar.gz
$ cd ..
$ ./configure
$ make
$ sudo make install
$ cd ..
# 安装GDAL
$ wget https://download.osgeo.org/gdal/X.Y.Z/gdal-X.Y.Z.tar.gz
$ tar xzf gdal-X.Y.Z.tar.gz
$ cd gdal-X.Y.Z
$ ./configure
$ make # 有点久,大约半小时
$ sudo make install
$ cd ..
# 安装完需要在django settings中设置GEOS_LIBRARY_PATH和GDAL_LIBRARY_PATH

参考

https://docs.djangoproject.com/en/2.1/ref/contrib/gis/
https://realpython.com/location-based-app-with-geodjango-tutorial/#the-tools-you-will-be-using
https://rk.edu.pl/en/shops-near-you-geographic-features-geodjango/
https://www.slideshare.net/meituan/12lbs