using LY.App.Common; using NetTopologySuite.Algorithm; using NetTopologySuite.Geometries; using Newtonsoft.Json; using Pipelines.Sockets.Unofficial.Arenas; using SqlSugar; namespace LY.App.Model { /// /// 多边形实体 /// public class MultPolygonEntity : BaseEntity { /// /// 空间位置点数据 /// [SugarColumn(QuerySql = "st_astext(location)", ColumnDataType = "point", ColumnName = "location", UpdateSql = "ST_GeomFromText(@location)", InsertSql = "ST_GeomFromText(@location)", IsNullable = true, ColumnDescription = "空间位置点数据")] [JsonIgnore] public string? Location { get; set; } // Geometry /// /// 空间面数据 /// [SugarColumn(QuerySql = "st_astext(region)", ColumnDataType = "multipolygon", ColumnName = "region", UpdateSql = "ST_GeomFromText(@region)", InsertSql = "ST_GeomFromText(@region)", IsNullable = true, ColumnDescription = "空间面数据")] [JsonIgnore] public string? Region { get; set; } //MultiPolygon Geometry [SugarColumn(IsIgnore = true)] public string RegionJson { get; set; } /// /// 空间位置点经度 /// public double Lon { get; set; } /// /// 空间位置点纬度 /// public double Lat { get; set; } /// /// 空间位置点Json数据 /// public void SetRegionJson() { RegionJson = ""; if (!string.IsNullOrWhiteSpace(Region)) { var geo = GeoJsonHelper.FromWKT(Region); if (geo != null) { RegionJson = GeoJsonHelper.GetGeoJson(geo); } } } /// /// 设置空间位置点 /// /// public void SetRegion(MultiPolygon region) { if (region != null) { Region = region.AsText(); } } /// /// 设置空间位置点 /// /// /// public void SetLocation(double lon, double lat) { Lon = lon; Lat = lat; SetLocation(); } /// /// 设置空间位置点 /// /// public void SetRegionJson(string region) { RegionJson = ""; if (!string.IsNullOrWhiteSpace(region)) { var geo = GeoJsonHelper.FromWKT(region); if (geo != null) { RegionJson = GeoJsonHelper.GetGeoJson(geo); } } } /// /// 设置空间位置点 /// public void SetLocation() { Location = $"POINT({Lon} {Lat})"; } } }