定义一个资源模型,包含Shape、LEN_PIPE等属性。需要我们在保存资源至GIS数据图层时,如已指定Shape,则LEN_PIPE自动计算(Shape是一条多段线,长度向下取整为LEN_PIPE的值),而当我们从GIS图层中读取数据时,如LEN_PIPE已有值,则取已有值,否则自动按Shape长度赋值。为此,模型内对LEN_PIPE的属性设置及其get、set访问器实现如下:
/// <summary>光缆段模型
///
/// </summary>
public class Cable : IGeographicalEntity
{
/// <summary>资源数据类型
///
/// </summary>
public ResourceDataTypeEnum RESOURCETYPE => ResourceDataTypeEnum.CableLine;
private int _shapeLength = 0;
/// <summary>皮长
///
/// </summary>
public int LEN_PIPE
{
get
{
if (null != Shape && 0 >= _shapeLength)
{
_shapeLength = GeometryFactory.CalculateLength(Shape);
}
return _shapeLength;
}
set => _shapeLength = value;
}
/// <summary>图形
///
/// </summary>
public GeoJSON.Net.Geometry.MultiLineString Shape { get; set; }
}
其中,计算长度的方法如下:
public static int CalculateLength(IGeometryObject pGeometryObject)
{
var nLength = 0;
try
{
nLength = (int)((IPolyline)CreateEsriGeometryFromGeoJson(pGeometryObject)).Length;
}
catch
{
// ignored
}
return nLength;
}