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})";
}
}
}