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

如何在C#中合并GeoJSON的Polygon对象?

合并GeoJSON Polygon集合的实现方案

在.NET环境下,推荐使用NetTopologySuite库处理空间几何的合并操作,这是目前处理GeoJSON和空间数据的主流工具。

步骤说明

  1. 安装必要的NuGet包

    • 安装NetTopologySuite(核心空间几何处理库)
    • 安装NetTopologySuite.IO.GeoJSON(GeoJSON序列化/反序列化支持)
  2. 提取并过滤有效Polygon对象
    从你的List<Feature>集合中,筛选出类型为Polygon的有效几何对象。

  3. 执行Union合并操作
    通过Aggregate方法依次对所有Polygon执行Union操作,完成合并。

  4. 可选:将合并结果转为GeoJSON输出

完整代码示例

using NetTopologySuite.Features;
using NetTopologySuite.Geometries;
using NetTopologySuite.IO;
using System.Collections.Generic;
using System.IO;
using System.Linq;

static void Main(string[] args)
{
    List<Feature> features = new List<Feature>();
    
    // 示例:从文件加载GeoJSON到features集合(可根据你的实际读取逻辑调整)
    var geoJsonReader = new GeoJsonReader();
    using var fileStream = File.OpenRead("your-geojson-file.geojson");
    var featureCollection = geoJsonReader.Read<FeatureCollection>(fileStream);
    features = featureCollection.Features.ToList();

    // 1. 筛选出所有有效的Polygon对象
    var validPolygons = features
        .Select(f => f.Geometry)
        .Where(g => g != null && g.GeometryType == "Polygon" && g.IsValid)
        .Cast<Polygon>()
        .ToList();

    if (!validPolygons.Any())
    {
        // 无有效Polygon可合并,直接退出
        return;
    }

    // 2. 初始化几何工厂,用于空间操作
    var geometryFactory = new GeometryFactory();

    // 3. 合并所有Polygon:若多边形无重叠,结果会是MultiPolygon;重叠则合并为单个Polygon
    var mergedGeometry = validPolygons.Aggregate((current, next) => (Polygon)current.Union(next));

    // 4. 将合并结果转为Feature并输出GeoJSON
    var mergedFeature = new Feature(mergedGeometry, new AttributesTable());
    var geoJsonWriter = new GeoJsonWriter();
    string mergedGeoJson = geoJsonWriter.Write(mergedFeature);
    
    Console.WriteLine("合并后的GeoJSON:");
    Console.WriteLine(mergedGeoJson);
}

注意事项

  • 几何有效性修复:如果存在自相交等无效Polygon,Union操作可能失败,可使用g.Buffer(0)修复无效几何:
    .Cast<Polygon>()
    .Select(p => (Polygon)p.Buffer(0))
    .ToList();
    
  • 空集合处理:必须先判断validPolygons是否为空,避免Aggregate方法抛出异常。
  • 非重叠场景:如果多个Polygon没有重叠区域,合并结果会是MultiPolygon类型,可根据需求转为单个Polygon或保留原类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 09:40:18