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

.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.lryc.cn/news/486157.html

相关文章:

  • 【AI图像生成网站Golang】项目介绍
  • 对称加密算法DES的实现
  • Spring Boot 启动时修改上下文
  • 传奇996_19——常用函数
  • 计算机毕业设计Python+Neo4j知识图谱医疗问答系统 大模型 机器学习 深度学习 人工智能 大数据毕业设计 Python爬虫 Python毕业设计
  • 【Python】如何设置VSCode中的Pylint,消除各种没有必要的警告
  • 游戏引擎学习第14天
  • 关于mysql中的锁
  • 机器学习-4:机器学习的建模流程
  • Android 6年经验面试总结 2024.11.15
  • R语言数据分析可视化——summarytools包的使用
  • 转型一年半,虎牙直播的第二增长曲线喜忧参半
  • makefile笔记
  • Rewar Model的输出(不包含训练)
  • Python调用API翻译Excel中的英语句子并回填数据
  • SQL面试题——抖音SQL面试题 最大在线用户数
  • 前端知识点---Window对象(javascript)了解
  • llama factory lora 微调 qwen2.5 7B Instruct模型
  • 类和对象——拷贝构造函数,赋值运算符重载(C++)
  • Android 关于使用videocompressor库压缩没有声音和异常的问题
  • LeetCode-215.数组中的第K个最大元素
  • 『OpenCV-Python』视频的读取和保存
  • 什么是Spring Boot Actuator
  • 计算机网络:运输层 —— 运输层端口号
  • linux下编译安装memcached
  • 最短路径生成树的数量-黑暗城堡
  • 将已有的MySQL8.0单机架构变成主从复制架构
  • JSON.stringify的应用说明
  • pyflink datastream数据流ds经过一系列转换后转为table,t_env.from_data_stream(ds)
  • vxe-grid table 校验指定行单元格的字段,只校验某个列的字段