一、主要目的
通过NTS-NetTopologySuite组件实现判断一个点图层的要素是否在线图层的要素上,返回所有不在线上的点要素。
二、主要步骤
- 分别读取点要素和线要素
- 遍历点要素
- 遍历线要素
- 使用
Distance函数判断是否满足容差 - 如果满足容差,则认为点在线上,否则认为点不在线上
三:核心代码
/// <summary>
/// 检查点是否有不在线上的情况
/// </summary>
/// <param name="pLyrPath">点shp路径</param>
/// <param name="lineLyrPath">线shp路径</param>
/// <param name="filterField">匹配的字段</param>
/// <param name="filterVal">匹配的字段值</param>
/// <returns>返回所有不在线上的点</returns>
public List<IFeature> PointInLine(string pLyrPath, string lineLyrPath, string filterField, string filterVal,double tol = 0.0001)
{
var fs = new List<IFeature>();
var fsPoints = ShpUtils.FS(pLyrPath);
var fsLines = ShpUtils.FS(lineLyrPath);
foreach (var fp in fsPoints)
{
var val = DbaseFileHeaderEx.Attr(pLyrPath,filterField,fp.Attributes);
if (filterField != null && val != filterVal)
{
continue;
}
IFeature theLine = null;
foreach (var fl in fsLines)
{
var geomP = fp.Geometry;
var geoL = fl.Geometry;
if (geoL.Distance(geomP) < tol)
{
theLine = fl;
break;
}
}
if (null == theLine)
{
fs.Add(fp);
}
}
return fs;
}
四、其他函数说明
ShpUtils.FS(pLyrPath);是获取shp文件中的所有要素。
DbaseFileHeaderEx.Attr获取要素指定的属性值

该代码段实现了一个功能,用于检查给定点是否位于指定线路上,主要应用于GIS领域的几何操作。通过比较点与线之间的距离,判断点是否在线的附近,返回所有不在线上的点。
1万+

被折叠的 条评论
为什么被折叠?



