npm 包 bookshelf-geojson 使用教程

阅读时长 5 分钟读完

在 Web 开发中,地理位置信息是广泛使用的一种数据类型。由于其特殊性,我们需要一种数据格式来表示地理位置信息。而 GeoJSON 就是这样一种格式。

什么是 GeoJSON ?

GeoJSON 是一种基于 JSON 的地理位置数据格式。它支持点,线,面等几何类型,并且可以在地图上进行可视化展示。

例如,下面是一个 GeoJSON 格式表示的多边形:

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

什么是 bookshelf-geojson?

bookshelf-geojson 是一个可以将 GeoJSON 数据存储到关系型数据库中的 npm 包。它是基于 ORM 模式的 bookshelf.js 的扩展,支持点、线、面等多种类型地理位置数据的存储与查询。

安装 bookshelf-geojson

要使用 bookshelf-geojson,我们需要先安装 bookshelf.js。如果您还没有安装,可以在命令行中输入以下命令进行安装:

接下来,我们需要安装 bookshelf-geojson。同样在命令行中输入以下命令进行安装:

在代码中使用 bookshelf-geojson

在代码中使用 bookshelf-geojson 非常简单。我们只需要将 bookshelf 的实例传递给 bookshelf-geojson 的构造函数即可。

其中,knex 是一个用于访问数据库的库(必须传入),pluginOptions 则是插件的选项。

插件选项中使用了多个参数,包括:

  1. geomColumn: 用于存储 Geometry 数据的字段名,默认为 geometry
  2. geomType: 存储 Geometry 数据的类型,包括 Point、LineString、Polygon、MultiPoint、MultiLineString 和 MultiPolygon,默认为 point
  3. srid: 存储 Geometry 数据采用的坐标系编号,默认为 4326

添加与查询地理位置数据

在使用 bookshelf-geojson 存储地理位置数据时,我们需要将 GeoJSON 数据转换为 PostgreSQL 模式下支持的坐标格式 Point(x,y)LineString((x1,y1),(x2,y2),...,(xn,yn))Polygon((x1,y1),(x2,y2),...,(xn,yn))

在示例中,我们定义了一个表 places,用于存储地点信息,包括经纬度、名称等。

接着我们可以通过以下代码来创建一个包含地方名称、经度、纬度信息的地方:

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

同样,我们也可以用下面的代码来查询所有的地方信息:

以上代码将返回 places 表中所有地方的信息,其中包括经纬度等信息。

总结

本文介绍了 GeoJSON 和 bookshelf-geojson 的相关内容,主要包括安装、配置、添加与查询地理位置数据等内容。这些功能对于使用地理位置数据的后端 Web 开发人员是非常有用的,可以帮助他们快速、准确地存储并查询地理位置数据,并且可以使用 GeoJSON 格式在地图上进行可视化展示。

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

纠错
反馈