POI服务开放消费街道图日期

openpoiservice的Python项目详细描述


OpenPoiseService

构建状态

openpoiservice(ops)是一个flask应用程序,它承载一个高度可定制的兴趣点数据库,该数据库来自 openstreetmap.org的数据,因此利用了标签的概念…

< Buff行情>

openstreetmap由键和值组成的标记描述 映射元素(节点、方式或关系)或变更集。这两个项都是自由格式的文本字段,但通常表示数字 或其他结构化项目。

此服务通过将osm标记分组到预定义的类别中来使用节点、方式和关系上的osm标记。 如果它获取一个OSM对象,该对象使用categories.yml中定义的OSM键之一进行标记,它将导入 特定附加标签的兴趣点,可在ops_settings.yml中定义。任何附加标签, 例如,轮椅吸烟可用于在导入后通过API查询服务。

例如,如果要请求轮椅在几何图形中访问的所有poi,可以添加然后添加 轮椅:['yes','dedicated]在http post请求的主体中过滤。

您可以在请求中向数据库传递3种不同类型的几何体。当前"point"和"linestring"与 支持相应的和缓冲区以及多边形。兴趣点将在给定的几何图形中返回。

您可以在本服务的设置文件中控制几何图形的最大大小和进一步的限制。

导入过程

将要导入的OSM文件进行多次分析,以从关系(OSM U类型3)中提取感兴趣的点, 方式(OSM_类型2)和节点(OSM_类型1)按顺序排列。具体兴趣点来源于哪种类型 在响应中返回-这将帮助您直接在openstreetmap.org上找到对象。

安装

您可以在虚拟环境中的主机上运行OpenPoiseService,也可以简单地使用Docker。文档文件 提供安装一个wsgi服务器(gunicorn),该服务器在端口5000上启动烧瓶服务。

存储和导入OSM文件的技术规范

python版本

因为此服务使用了python集合库,特别是deque的概念及其函数 它只支持Python3.5及更高版本。

数据库

此应用程序使用psql/postgis设置来存储感兴趣的点。我们强烈建议使用此功能 码头集装箱。

进口商

请考虑以下解析和导入OSM文件的技术要求。

<表><广告>区域内存< /广告><正文>德国8 GB欧洲32 GB行星128 GB

注意:OpenPoiseService将导入OSM文件夹或子目录中的任何OSM PBF文件。 这样,您可以将planet文件分割成更小的区域(例如,从geofrabrik下载,用于下载的scraper脚本 在osm文件夹中找到链接),并使用一个较小的实例导入全局数据集(只要 OSM文件的磁盘空间不超过5 GB,16 GB的内存足以导入整个星球。

作为Docker C运行容器(烧瓶+玻璃瓶)

对文件ops\u settings\u docker.yml中的设置进行必要的更改。此文件将被复制到Docker容器中。 如果您计划导入其他OSM文件,请将其下载到OSM文件夹中(将扫描其中的任何文件夹 对于OSM文件),因为这将是一个共享卷。

之后运行:

$ docker-compose up -d -f /path/to/docker-compose.yml

一旦建立了容器,就可以创建空数据库:

$ docker exec -it container_name /ops_venv/bin/python manage.py create_db

删除数据库:

$ docker exec -it container_name /ops_venv/bin/python manage.py drop_db

或导入OSM数据:

$ docker exec -it container_name /ops_venv/bin/python manage.py import_data

在虚拟环境中运行

  1. 创建并激活virtualenv
  2. 此存储库使用imposm.parser来解析 打开街道地图数据。为此,请确保在您的系统上安装了Google的Protobuf < > >
    1. 然后,您可以通过pipWithpip install-r requirements.txt安装必要的需求 < > >

      准备设置.yml

      使用必要的设置更新openpoiservice/server/ops_settings.yml,然后运行下列操作之一 命令。

      [P/P>

      $ exportAPP_SETTINGS="openpoiservice.server.config.ProductionConfig|DevelopmentConfig"

      创建POI数据库

      $ python manage.py create_db
      

      放下POI数据库

      $ python manage.py drop_db
      

      分析和导入OSM数据

      $ python manage.py import_data
      

      使用烧瓶werkzeug运行应用程序

      $ python manage.py run
      

      默认情况下,您可以在以下地址访问应用程序:http://localhost:5000/" rel="nofollow">http://localhost:5000/

      < Buff行情>

      要指定其他端口吗?

      < Buff行情>
      $ docker-compose up -d -f /path/to/docker-compose.yml
      
      0

      测试

      $ docker-compose up -d -f /path/to/docker-compose.yml
      
      1

      类别ID及其配置

      openpoiservice/server/categories/categories.yml是一个列表(注意:不是全部!)具有任意类别ID的OpenStreetMap标记。 如果您保持以下结构,则可以根据需要操作此列表。

      $ docker-compose up -d -f /path/to/docker-compose.yml
      
      2

      openpoiservice在从openstreetmap数据导入poi并分配自定义类别id时使用此映射 相应地。

      openpoiservice/server/ops_settings.yml中的列映射控制将在数据库中考虑哪些osm信息,以及 用户可以通过api查询这些信息,例如

      $ docker-compose up -d -f /path/to/docker-compose.yml
      
      3

      例如,意味着openstreetmap标签将考虑轮椅。 在导入和保存到数据库期间。然后,用户可以在filters对象中添加一个公共值列表轮椅:['yes','dedicated',…] 对应于标签本身的osm公共值,例如。 https://wiki.openstreetmap.org/wiki/key:轮椅

      API文档

      此烧瓶服务的文档通过flasger提供,可以是 通过http://localhost:5000/apidocs/访问

      通常有三种不同的请求类型poistats列表

      在post主体中使用request=poi将返回一个geojson特性集合 在指定的边界框或几何体中。

      使用request=stats也会这样做,但最终会按类别分组 返回json obje一组泊松绝对数的ct。

      最后,request=list将返回从 openpoiservice/server/categories/categories.yml

      示例

      缓冲点周围的泊松值
      $ docker-compose up -d -f /path/to/docker-compose.yml
      
      4
      给定类别的poi
      $ docker-compose up -d -f /path/to/docker-compose.yml
      
      5
      给定类别组的poi
      $ docker-compose up -d -f /path/to/docker-compose.yml
      
      6
      POI统计
      $ docker-compose up -d -f /path/to/docker-compose.yml
      
      7
      POI类别列表
      $ docker-compose up -d -f /path/to/docker-compose.yml
      
      8

      欢迎加入QQ群-->: 979659372 Python中文网_新手群

      推荐PyPI第三方库


热门话题
java为什么我们不能将ArrayList<Integer>传递给具有(Integer…)的方法参数   java Spring RestTemplate映射JSON对映射的响应引发不匹配的PutException   在系统中找到java Selenium元素,但在Jenkins中未找到   java在Android中使用JavaMail API发送电子邮件,而不使用默认/内置应用程序   数组如何在Java数据结构中同时存储数字和相应的单词?   为什么“+”运算符未定义?JAVA   java如何在游戏中添加高分系统?   java在球门碰撞中区分球和球员   java如何使用SpringSecurity4.0.1使用Auth令牌实现Rest完整Web服务。释放   java如何解决这个错误:Android资源链接失败?   java多线程文件处理和数据库批插入   导致Tomcat失败的java无用块线程   java主线程做了太多的工作,尽管我使用了异步线程(laggy UI)   在Java FX 2.0中滚动锚定节点时,锚定始终可见?   java使用EJB3中的客户机jar和设计模式