You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JSTS时缓冲区宽度不一致问题求助

问题说明

目标是为给定多边形生成宽度为N米的内带,原本方案是用JSTS的Buffer功能,通过原始多边形减去内部缓冲多边形得到内带,但实际生成的缓冲多边形和原多边形的宽度不一致——示意图显示部分区域缓冲宽度明显小于设定值,边缘宽度不均。

相关代码实现:

import GeoJSONWriter from "jsts/org/locationtech/jts/io/GeoJSONWriter";
import GeoJSONReader from "jsts/org/locationtech/jts/io/GeoJSONReader";
import { BufferOp } from "jsts/org/locationtech/jts/operation/buffer";

function getOffsetPolygonJSTS(
  poly: Feature<Polygon>,
  offsetSize: number
): Feature<Polygon> {
  const geoReader = new GeoJSONReader();
  const geoWriter = new GeoJSONWriter();
  const geometry = geoReader.read(poly.geometry);
  // 硬编码偏移量,未使用传入的offsetSize参数
  const res = BufferOp.bufferOp(geometry, -0.0001);
  const jstsBuffer = geoWriter.write(res);
  return polygon(jstsBuffer.coordinates);
}
问题原因及解决思路
  • 坐标单位不匹配:JSTS的Buffer操作默认采用几何本身的坐标单位,如果你的多边形是经纬度(WGS84,单位为度),直接传入米数作为偏移量会完全错误——1度约等于111公里,代码里的-0.0001度对应的实际距离远小于1米,自然会出现宽度不一致的问题。
  • 硬编码偏移量:代码里直接写死了-0.0001,没有使用传入的offsetSize参数,根本无法按指定的N米生成缓冲。
  • 修正方案:
    1. 先将经纬度坐标转换为平面坐标系(如Web墨卡托EPSG:3857,单位为米),确保缓冲操作的单位正确。
    2. 使用传入的offsetSize作为缓冲距离(内缓冲用负值)。
    3. 缓冲完成后再将坐标转换回原经纬度坐标系。

示例修正代码(结合Turf.js做坐标转换):

import GeoJSONWriter from "jsts/org/locationtech/jts/io/GeoJSONWriter";
import GeoJSONReader from "jsts/org/locationtech/jts/io/GeoJSONReader";
import { BufferOp } from "jsts/org/locationtech/jts/operation/buffer";
import { toWgs84, toMercator } from "@turf/projection";

function getOffsetPolygonJSTS(
  poly: Feature<Polygon>,
  offsetSize: number
): Feature<Polygon> {
  // 转换为Web墨卡托坐标系(单位:米)
  const mercatorPoly = toMercator(poly);
  const geoReader = new GeoJSONReader();
  const geoWriter = new GeoJSONWriter();
  const geometry = geoReader.read(mercatorPoly.geometry);
  // 使用传入的offsetSize执行内缓冲
  const res = BufferOp.bufferOp(geometry, -offsetSize);
  const jstsBuffer = geoWriter.write(res);
  // 转换回WGS84经纬度坐标系
  const wgs84Buffer = toWgs84(polygon(jstsBuffer.coordinates));
  return wgs84Buffer;
}

内容的提问来源于stack exchange,提问作者Sigma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 13:37:52