You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
6.1 KiB
C#
193 lines
6.1 KiB
C#
using System.Text.Json;
|
|
using System.Text.Json.Nodes;
|
|
using OMS.NET.DbClass;
|
|
|
|
namespace OMS.NET.Common
|
|
{
|
|
public class LayerData
|
|
{
|
|
public string? TemplateId { get; set; }
|
|
public long LayerId { get; set; }
|
|
public bool HasChange { get; set; } = false;
|
|
public string Type { get; set; }
|
|
public JsonNode? Members { get; set; }
|
|
public JsonNode? Structure { get; set; }
|
|
public int Phase { get; set; } = 1;
|
|
public string? Name
|
|
{
|
|
get
|
|
{
|
|
return Structure?.AsArray().ElementAt(0)?.GetValue<string>();
|
|
}
|
|
}
|
|
|
|
public LayerData(long layerId, string type)
|
|
{
|
|
LayerId = layerId;
|
|
Type = type;
|
|
}
|
|
|
|
public LayerData(string? templateId, MapLayer layer)
|
|
{
|
|
TemplateId = templateId;
|
|
LayerId = layer.Id;
|
|
Type = layer.Type;
|
|
Members = (layer.Type == "order") ? JsonNode.Parse(layer.Members) : JsonNode.Parse(Util.Base64ToJson(layer.Members));
|
|
Structure = string.IsNullOrEmpty(layer.Structure) ? null : JsonNode.Parse(Util.Base64ToJson(layer.Structure));
|
|
Phase = layer.Phase;
|
|
}
|
|
|
|
public void AppendElement(long elementId, string elementType)
|
|
{
|
|
if (Type == "order")
|
|
{
|
|
GlobalArea.Log.Error($"order图层不能添加{elementType}元素");
|
|
return;
|
|
}
|
|
if (Members![elementId.ToString()] == null)
|
|
{
|
|
Members![elementId.ToString()] = elementType switch {
|
|
"point" => 1,
|
|
"line" => 2,
|
|
"area" => 3,
|
|
"curve" => 4,
|
|
_ => throw new Exception("图层添加:不支持的元素类型"),
|
|
};
|
|
Structure!.AsArray().Add(elementId);
|
|
HasChange = true;
|
|
UpdateToDb();
|
|
}
|
|
}
|
|
|
|
public void DeleteElement(long elementId)
|
|
{
|
|
if (Type == "order")
|
|
{
|
|
GlobalArea.Log.Error($"order图层不能移除Element元素");
|
|
return;
|
|
}
|
|
Members!.AsObject().Remove(elementId.ToString());
|
|
//移除structure中的值
|
|
int index = Structure!.AsArray().FindElementIndex(elementId);
|
|
if (index != -1)
|
|
{
|
|
Structure!.AsArray().RemoveAt(index);
|
|
}
|
|
UpdateToDb();
|
|
}
|
|
|
|
public void UpdateToDb()
|
|
{
|
|
//上传图层到数据库
|
|
MapLayer mapLayer = ConvertToMapLayer();
|
|
MapLayer.Update(mapLayer);
|
|
}
|
|
|
|
public void AdjustABOrder(long a, long b, string method)
|
|
{
|
|
JsonArray arr = Structure!.AsArray();
|
|
int indexA = arr.FindElementIndex(a);
|
|
int indexB = arr.FindElementIndex(b);
|
|
switch (method)
|
|
{
|
|
case "up":
|
|
{
|
|
if (indexA > indexB)
|
|
{
|
|
arr.RemoveAt(indexA);
|
|
arr.Insert(indexB, a);
|
|
HasChange = true;
|
|
UpdateToDb();
|
|
}
|
|
break;
|
|
}
|
|
case "down":
|
|
{
|
|
if (indexA < indexB)
|
|
{
|
|
arr.RemoveAt(indexA);
|
|
indexB = arr.FindElementIndex(b);
|
|
arr.Insert(indexB + 1, a);
|
|
HasChange = true;
|
|
UpdateToDb();
|
|
}
|
|
break;
|
|
}
|
|
case "join"://donothing
|
|
break;
|
|
default:
|
|
throw new Exception($"LayerData.AdjustABOrder不支持的method类型:{method}");
|
|
}
|
|
}
|
|
|
|
public void AdjustOrderLayer(long layerAId, long layerBId, string type)
|
|
{
|
|
if (Type == "order")
|
|
{
|
|
JsonArray array = Members!.AsArray();
|
|
int indexA = array.FindElementIndex(layerAId);
|
|
int indexB = array.FindElementIndex(layerBId);
|
|
|
|
if (type == "up")
|
|
{
|
|
array.RemoveAt(indexA);
|
|
array.Insert(indexB, layerAId);
|
|
}
|
|
|
|
if (type == "down")
|
|
{
|
|
array.RemoveAt(indexA);
|
|
indexB = array.FindElementIndex(layerBId);
|
|
array.Insert(indexB + 1, layerAId);
|
|
}
|
|
UpdateToDb();
|
|
}
|
|
}
|
|
|
|
public void OrderAddGroupLayer(long layerId)
|
|
{
|
|
if (Type == "order")
|
|
{
|
|
Members?.AsArray().Add(layerId);
|
|
UpdateToDb();
|
|
}
|
|
}
|
|
|
|
public void OrderDeleteGroupLayer(long layerId)
|
|
{
|
|
if (Type == "order")
|
|
{
|
|
int index = Members!.AsArray().FindElementIndex(layerId);
|
|
Members!.AsArray().RemoveAt(index);
|
|
UpdateToDb();
|
|
}
|
|
}
|
|
|
|
public void Reset()
|
|
{
|
|
if (Type == "group")
|
|
{
|
|
Members = new JsonObject();
|
|
Members.AsObject()["0"] = 0;
|
|
int Count = Structure!.AsArray().Count;
|
|
for (int i = Count - 1; i <= 1; i--)
|
|
{
|
|
Structure!.AsArray().RemoveAt(i);
|
|
}
|
|
UpdateToDb();
|
|
}
|
|
}
|
|
|
|
public MapLayer ConvertToMapLayer()
|
|
{
|
|
return new MapLayer()
|
|
{
|
|
Id = LayerId,
|
|
Type = Type,
|
|
Members = (Type == "order") ? Members!.ToString() : Util.JsonToBase64(Members!.ToString()),
|
|
Structure = (Structure == null) ? "" : Util.JsonToBase64(Structure!.ToString()),
|
|
Phase = Phase
|
|
};
|
|
}
|
|
}
|
|
} |