作为一个 GISer,在日常 WebGIS 开发中,会常用到的 turf.js,这是一个地理空间分析的 JavaScript 库,经常搭配各种 WebGIS JsAPI 使用,如 Leaflet、MapboxGL、OpenLayers 等;在后台 Java 开发中,也有个比较强大的GIS库,GeoTools,里面包含构建一个完整的地理信息系统所需要的全部工具类;数据库端常用是 postgis 扩展,需要在 PostgreSQL 数据库中引入使用。
然而在开发某一些业务系统的时候,有些需求只需要调用某一个 GIS 算法,简单的几行代码即可完成,没有必要去引用一个 GIS 类库。
而且有些算法在这些常用的GIS类库中没有对应接口,就比如在下文记录的这几种常用算法中,求垂足、判断线和面的关系,在 turf.js 就没有对应接口。
下面文章中是我总结的一些常用 GIS 算法,这里统一用JavaScript 语言实现,因为 JS 代码相对比较简洁,方便理解其中算法逻辑,也方便在浏览器下预览效果。
在具体应用时可以根据具体需求,翻译成 Rust、C/C++、Java、C#.NET、Python 等语言来使用。
文中代码大部分为之前遇到需求时在网上搜索得到,然后自己根据具体需要做了优化修改,通过这篇文章做个总结收集,也方便后续使用时查找。
算法介绍与示例代码
以下方法中传参的点、线、面都是对应 GeoJSON 格式中 coordinates,方便统一调用。
GeoJSON 标准参考:https://geojson.org/
简单的类型约定
/**
* @typedef {[number, number]} LonLat