npm 包 graphql-osm 使用教程

阅读时长 6 分钟读完

GraphQL-OSM 是一个利用 GraphQL 技术实现的 OpenStreetMap 数据库查询工具。它提供了一些方便的 GraphQL 接口,可以帮助我们快速地查询 OSM 数据库中的信息。本文将介绍如何使用 npm 包 graphql-osm,包括安装、示例代码以及使用技巧。

安装

我们可以使用 npm 命令来安装 graphql-osm:

或者在 package.json 中添加依赖:

使用示例

接下来我们将演示如何使用 graphql-osm 获取 OSM 数据库中的信息。首先我们需要创建一个 GraphQL 客户端,然后使用 GraphQL 查询语句向服务器发送请求,最后得到返回的结果。

创建 GraphQL 客户端

我们可以使用 graphql-osm 包提供的 createClient 函数来创建一个 GraphQL 客户端,代码如下:

其中 url 指定 OpenStreetMap 数据库的 URL,headers 指定 HTTP 请求头部的内容,可选。

向服务器发送请求

我们可以使用 GraphQL 查询语句来向服务器发送请求。例如下面的查询语句可以获取一个区域内的所有餐厅:

此代码的查询区域是北京市海淀区,西南角为 (116.31, 39.96),东北角为 (116.51, 40.06)。查询条件是获取所有 amenity=restaurant 的节点。

我们可以使用 client.query 函数向服务器发送请求并解析结果,代码如下:

-- -------------------- ---- -------
----- ----- - -
  ----- -
    ---------- -------- ------ ------- ------- ----- --------- -------------- -
      --
      ----
    -
  -
--

--------------------------------- -- -
  --------------------
---
展开代码

解析结果

GraphQL 的查询结果是一个携带数据的 JSON 对象。我们可以使用 JavaScript 对象的方式来访问查询结果中的数据。例如下面的 JavaScript 代码可以输出所有餐厅的名称:

-- -------------------- ---- -------
----- ----- - -
  ----- -
    ---------- -------- ------ ------- ------- ----- --------- -------------- -
      --
      ---- -
        ----
      -
    -
  -
--

--------------------------------- -- -
  ----- ----- - -----------------
  --- ---- - - -- - - ------------- ---- -
    ----- ---- - --------------
    -- ----- -- ---------- -
      -----------------------
    -
  -
---
展开代码

使用技巧

指定区域

通过指定查询区域,我们可以限制查询的范围。可以使用 bbox 参数来指定查询区域的边界坐标,例如:

过滤条件

我们可以通过查询条件来筛选目标节点。例如下面的查询条件可以获取所有 amenity=restaurant 并且 name 包含 ‘KFC’ 的节点:

查询多种类型的节点

除了查询 node 节点之外,我们还可以查询 wayrelation 节点,例如:

-- -------------------- ---- -------
----- -
  ---------- -------- ------ ------- ------- ----- --------- -------------- -
    --
    ----
  -
  --------- -------- ------ ------- ------- ----- --------- ------------ -
    --
    ----
  -
  -------------- -------- ------ ------- ------- ----- ------ -------- ------ ----------- -
    --
    ----
  -
-
展开代码

查询节点属性

除了查询节点的 id 和 tags 之外,我们还可以查询节点的位置信息、版本信息等属性。例如下面的查询条件可以获取 amenity=restaurant 的节点的位置信息:

结论

通过本文的介绍,我们学习了如何使用 npm 包 graphql-osm 完成 OSM 数据库的查询和解析。GraphQL-OSM 提供了一些方便的接口,我们可以通过指定查询区域和查询条件来获取特定类型的节点信息。同时,我们也介绍了一些常见的查询技巧。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60065f8f238a385564ab6f49

纠错
反馈

纠错反馈