GraphQL-OSM 是一个利用 GraphQL 技术实现的 OpenStreetMap 数据库查询工具。它提供了一些方便的 GraphQL 接口,可以帮助我们快速地查询 OSM 数据库中的信息。本文将介绍如何使用 npm 包 graphql-osm,包括安装、示例代码以及使用技巧。
安装
我们可以使用 npm 命令来安装 graphql-osm:
npm install graphql-osm
或者在 package.json 中添加依赖:
{ "dependencies": { "graphql-osm": "^1.1.3" } }
使用示例
接下来我们将演示如何使用 graphql-osm 获取 OSM 数据库中的信息。首先我们需要创建一个 GraphQL 客户端,然后使用 GraphQL 查询语句向服务器发送请求,最后得到返回的结果。
创建 GraphQL 客户端
我们可以使用 graphql-osm
包提供的 createClient
函数来创建一个 GraphQL 客户端,代码如下:
const { createClient } = require('graphql-osm'); const client = createClient({ url: 'https://overpass-api.de/api/interpreter', headers: {}, });
其中 url
指定 OpenStreetMap 数据库的 URL,headers
指定 HTTP 请求头部的内容,可选。
向服务器发送请求
我们可以使用 GraphQL 查询语句来向服务器发送请求。例如下面的查询语句可以获取一个区域内的所有餐厅:
query { node(bbox: [116.31, 39.96, 116.51, 40.06], tags: {amenity: "restaurant"}) { id tags } }
此代码的查询区域是北京市海淀区,西南角为 (116.31, 39.96),东北角为 (116.51, 40.06)。查询条件是获取所有 amenity=restaurant 的节点。
我们可以使用 client.query
函数向服务器发送请求并解析结果,代码如下:
-- -------------------- ---- ------- ----- ----- - - ----- - ---------- -------- ------ ------- ------- ----- --------- -------------- - -- ---- - - -- --------------------------------- -- - -------------------- ---展开代码
解析结果
GraphQL 的查询结果是一个携带数据的 JSON 对象。我们可以使用 JavaScript 对象的方式来访问查询结果中的数据。例如下面的 JavaScript 代码可以输出所有餐厅的名称:
-- -------------------- ---- ------- ----- ----- - - ----- - ---------- -------- ------ ------- ------- ----- --------- -------------- - -- ---- - ---- - - - -- --------------------------------- -- - ----- ----- - ----------------- --- ---- - - -- - - ------------- ---- - ----- ---- - -------------- -- ----- -- ---------- - ----------------------- - - ---展开代码
使用技巧
指定区域
通过指定查询区域,我们可以限制查询的范围。可以使用 bbox
参数来指定查询区域的边界坐标,例如:
query { node(bbox: [116.31, 39.96, 116.51, 40.06], tags: {amenity: "restaurant"}) { id tags } }
过滤条件
我们可以通过查询条件来筛选目标节点。例如下面的查询条件可以获取所有 amenity=restaurant 并且 name 包含 ‘KFC’ 的节点:
query { node(bbox: [116.31, 39.96, 116.51, 40.06], tags: {amenity: "restaurant", name: "KFC"}) { id tags } }
查询多种类型的节点
除了查询 node
节点之外,我们还可以查询 way
和 relation
节点,例如:
-- -------------------- ---- ------- ----- - ---------- -------- ------ ------- ------- ----- --------- -------------- - -- ---- - --------- -------- ------ ------- ------- ----- --------- ------------ - -- ---- - -------------- -------- ------ ------- ------- ----- ------ -------- ------ ----------- - -- ---- - -展开代码
查询节点属性
除了查询节点的 id 和 tags 之外,我们还可以查询节点的位置信息、版本信息等属性。例如下面的查询条件可以获取 amenity=restaurant 的节点的位置信息:
query { node(bbox: [116.31, 39.96, 116.51, 40.06], tags: {amenity: "restaurant"}) { id lat lon version } }
结论
通过本文的介绍,我们学习了如何使用 npm 包 graphql-osm 完成 OSM 数据库的查询和解析。GraphQL-OSM 提供了一些方便的接口,我们可以通过指定查询区域和查询条件来获取特定类型的节点信息。同时,我们也介绍了一些常见的查询技巧。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60065f8f238a385564ab6f49