当前位置: 首页 > article >正文

.netcore + postgis 保存地图围栏数据

一、数据库字段

字段类型选择(Type)
在这里插入图片描述
设置对象类型为:geometry
在这里插入图片描述

二、前端传递的Json格式转换

前端传递围栏的各个坐标点数据如下:

{
    "AreaRange": [
        {
            "lat": 30.123456,
            "lng": 120.123456
        },
        {
            "lat": 30.123456,
            "lng": 120.654321
        },
        {
            "lat": 30.654321,
            "lng": 120.654321
        },
        {
            "lat": 30.654321,
            "lng": 120.123456
        }
    ]
}

后端使用Geometry类型,ORM本项目使用了SqlSugar

/// <summary>
/// 区域围栏
/// </summary>
[SugarColumn(ColumnName= "arearange")]
public Geometry? AreaRange { get; set; }
public class MapProperty
{
    /// <summary>
    /// Latitude的简写,表示纬度
    /// </summary>
    public double lat { get; set; }
    /// <summary>
    /// Longtitude的简写,表示经度
    /// </summary>
    public double lng { get; set; }
}

后端Json转Geometry ( Polygon)多边形或者线

public static Polygon ConvertToPolygon(List<MapProperty> data)
{
    if (data == null || data.Count < 3)
    {
        throw new ArgumentException("至少需要三个点才能创建多边形");
    }
    // 创建几何工厂
    GeometryFactory factory = new GeometryFactory(new PrecisionModel(), 4326);
    // 将 List<MapProperty> 转换为 List<Coordinate>
    List<Coordinate> coordinates = data.Select(mp => new Coordinate(mp.lng, mp.lat)).ToList();
    // 添加第一个点以闭合多边形
    coordinates.Add(coordinates[0]);
    // 创建线性环
    LinearRing linearRing = factory.CreateLinearRing(coordinates.ToArray());
    // 创建多边形
    Polygon polygon = factory.CreatePolygon(linearRing);
    return polygon;
}
public static LineString ConvertToLineString(List<MapProperty> data)
    {
        if (data == null || data.Count < 2)
        {
            throw new ArgumentException("至少需要两个点才能创建多段线");
        }

        // 创建几何工厂
        GeometryFactory factory = new GeometryFactory();

        // 将 List<MapProperty> 转换为 List<Coordinate>
        List<Coordinate> coordinates = data.Select(mp => new Coordinate(mp.lng, mp.lat)).ToList();

        // 创建多段线
        LineString lineString = factory.CreateLineString(coordinates.ToArray());

        return lineString;
    }

保存入库

var area = GeoJsonHelper.ConvertToPolygon(request.AreaRange);
CommunityExtEntity ext = new CommunityExtEntity()
{
    AreaRange = area,
};
await _app.Insertable(ext).ExecuteCommandAsync();

http://www.kler.cn/a/396608.html

相关文章:

  • MYSQL 精通索引【快速理解】
  • Python进程间通讯大揭秘:原理深度剖析与实战案例分享
  • Node.js GET/POST请求、WEB模块使用介绍 (基础介绍 八)
  • 飞凌嵌入式RK3576核心板已适配Android 14系统
  • 利用python 检测当前目录下的所有PDF 并转化为png 格式
  • LC12:双指针
  • [Go]-sync.map使用详解
  • AI助力智能运维!在Linux主机上实现和chatgpt对话
  • 九、HttpMessageConverter
  • css:权重计算
  • 在 Unix 和类 Unix 操作系统中,信号是一种异步的通知机制,用于通知进程发生了一些特定的事件。
  • 【C#】第6章:用户界面设计 课后习题
  • 【提高篇】3.4 GPIO(四,工作模式详解 下)
  • 企业知识中台:构建智慧企业的核心
  • 三、计算机视觉_01图像的基本操作
  • Android 国际化多语言标点符号的适配
  • 基于lighthouse搭建私有网盘Cloudreve【开源应用实践】
  • pySpark乱码
  • 【星闪EBM-H63开发板】AT固件的配置与测试
  • 【Java Web】JSON 以及 JSON 转换
  • JavaWeb笔记整理——Spring Task、WebSocket
  • 【摄像头识别动物行为通常涉及计算机视觉技术】
  • 基于Java+SpringBoot+Vue的智慧社区设计与实现
  • 用枚举算法解决LeetCode第3348题最小可整除数位乘积II
  • 代码随想录算法训练营第三十八天 | 322.零钱兑换 279.完全平方数 139.单词拆分 多重背包以及背包总结
  • 如何使用EasyExcel生成多列表组合填充的复杂Excel示例