GeoShp
概述
GeoShp 是一个轻量级的 JavaScript 库,允许您解析 Shapefile(.shp 和 .dbf)文件并将其转换为 GeoJSON 对象。它支持 Node.js 和浏览器环境,并且可以与 CommonJS 和 ES Modules 兼容。GeoShp 不依赖任何外部库,为您的 JavaScript 应用程序提供了一种简单而高效的方式来处理地理数据。
功能
- 纯 JavaScript:无需任何额外的库或依赖。
- 跨环境:适用于 Node.js 和现代浏览器环境。
- 模块支持:兼容 CommonJS 和 ES Modules。
- Shapefile 解析:解析 .shp 和 .dbf 文件以提取地理数据。
- GeoJSON 输出:将解析的数据转换为 GeoJSON 格式,便于与地图库集成。
安装
Node.js
要在 Node.js 项目中使用 GeoShp,请通过 npm 安装:
npm install geoshp
浏览器
对于浏览器使用,您可以将 GeoShp 作为模块包含在您的 JavaScript 包中。确保您的构建系统支持 ES Modules,或者使用 CDN 链接(如果可用)。
使用方法
CommonJS 示例
以下示例演示了如何在 Node.js 环境中使用 GeoShp 与 CommonJS:
const fs = require("fs");
const GeoShp = require('geoshp');
// 同步读取 .shp 和 .dbf 文件
const dbfBuffer = fs.readFileSync('./data/mian.dbf');
const shpBuffer = fs.readFileSync('./data/mian.shp');
// 将 Shapefile 数据转换为 GeoJSON
const json = GeoShp.toJSON(
shpBuffer.buffer, // SHP 文件缓冲区
shpBuffer.byteOffset, // SHP 文件缓冲区偏移量
dbfBuffer.buffer, // DBF 文件缓冲区
dbfBuffer.byteOffset // DBF 文件缓冲区偏移量
);
// 以字符串形式输出 GeoJSON 对象
console.log(JSON.stringify(json, null, 2));
ES Modules 示例
对于 ES Modules,使用方法类似,但使用 import
语句:
import * as GeoShp from 'geoshp';
import fs from 'fs';
// 同步读取 .shp 和 .dbf 文件
const dbfBuffer = fs.readFileSync('./data/mian.dbf');
const shpBuffer = fs.readFileSync('./data/mian.shp');
// 将 Shapefile 数据转换为 GeoJSON
const json = GeoShp.toJSON(
shpBuffer.buffer, // SHP 文件缓冲区
shpBuffer.byteOffset, // SHP 文件缓冲区偏移量
dbfBuffer.buffer, // DBF 文件缓冲区
dbfBuffer.byteOffset // DBF 文件缓冲区偏移量
);
// 以字符串形式输出 GeoJSON 对象
console.log(JSON.stringify(json, null, 2));
浏览器使用
在浏览器环境中,您通常会使用像 Webpack 或 Rollup 这样的模块打包工具,与其他依赖项一起加载 GeoShp 模块。包含后,使用方式与 Node.js 中相同,只是您会通过其他方式(例如从服务器获取)来获取 .shp 和 .dbf 文件的内容。
API
GeoShp.toJSON(shpBuffer, shpOffset, dbfBuffer, dbfOffset)
-
shpBuffer:
ArrayBuffer
- 包含 .shp 文件数据的缓冲区。 -
shpOffset:
number
- .shp 缓冲区中数据开始的字节偏移量。 -
dbfBuffer:
ArrayBuffer
- 包含 .dbf 文件数据的缓冲区。 -
dbfOffset:
number
- .dbf 缓冲区中数据开始的字节偏移量。
返回一个表示解析后的 Shapefile 数据的 GeoJSON
对象。
许可证
GeoShp 采用 MIT 许可证 进行许可。
贡献
欢迎通过提交问题、功能请求或拉取请求,为 GeoShp 做出贡献。请访问 GitHub 仓库 进行操作。
支持
如有支持或疑问,请使用 GitHub 问题 页面。