迁移项目到.NET 5.0升级NetTopologySuite后找不到SimplePointInRing类去哪了?
NetTopologySuite
SimplePointInRing 类的版本变更说明 直接给结论:该类既没有被永久废弃删除,也没有迁移到独立的新NuGet包,是在2.x大版本重构时调整了对外的可见性与API定位。
- v1.14.0版本中对外公开的
NetTopologySuite.Algorithm.SimplePointInRing,在2.x版本重构时被降级为内部实现类,不再对外部程序集开放公开访问权限。 - 该类的底层实现代码仍然保留在
NetTopologySuite v2.2.0主包的NetTopologySuite.Algorithm命名空间下,只是因为被标记为internal,无法在外部项目中直接引用,也没有对应的独立补充NuGet包提供该类的公开访问入口。 - 官方不再将该类设为公开API的原因是,它属于早期从Java JTS移植时遗留的临时简化实现,性能、边界场景处理精度都低于重构后的统一算法逻辑,之前公开暴露该类属于历史遗留问题,重构时顺理成章将其收回到内部实现层面。
原有使用代码的替换方案
项目中原有调用SimplePointInRing实现点在环判断的逻辑,不需要自行复刻旧类的算法,直接替换为2.x版本的公开稳定API即可:
- 如果场景是判断点是否属于某多边形的范围,直接调用多边形几何对象自带的
Contains(IPoint point)方法即可,该方法底层的点在环判断逻辑已经完全替代了原SimplePointInRing,覆盖了边界重合、环方向反转等特殊场景的精度校验。 - 如果场景是需要对自定义的坐标环列表手动做点在环判断,直接使用
NetTopologySuite.Algorithm.PointLocation工具类的静态方法IsInRing(Coordinate point, IList<Coordinate> ring),该方法的功能、判断逻辑和原SimplePointInRing完全对齐,是2.x版本长期维护的公开API。
之前检索不到类的原因补充
- 你当前安装的
NetTopologySuite.Core v1.15.3属于版本过渡阶段的废弃包,从v2.0开始NetTopologySuite已经把所有核心算法实现合并到统一的主NetTopologySuite包中,旧的.Core包早已停止维护,没有同步2.x版本的类可见性调整。 NetTopologySuite.IO.GeoJson v2.0.4属于地理数据序列化扩展包,本身不包含任何核心算法逻辑,自然不存在对应类的实现。
内容的提问来源于stack exchange,提问作者Jeff Dege
相关产品推荐
相关产品推荐

