前段时间在项目中需要将Shp文件中的多线段(Polyline)的坐标提取出来,存成坐标序列文件如XML,方便前端应用中展示。
于是直接将Polyline强转为IPointCollection接口,进而获取点坐标序列,写成XML文件。思路清晰,实现也很简单。
经过一段时间应用,发现一个问题,获取出的坐标序列重绘时会出现乱的连线。
原来ArcGIS中多段线(Polyline)有一部分是结构相当复杂的,也就是看似是一条直线,包括多个部分,如下图:
这条线段是一个feature,在属性表中只有一条记录,但是这条线段包括26段,见上图左边表,各段大小不一,有的只有几个点,有点有几千个点。更要命的是,各段线间不连续,这样,如果直接以PointCollection读取出的点坐标序列是无法区分哪一部分是断开的,使用此点序列重绘的图形也是不对的。此外,在多段线中各个part中,点坐标的序列的方向也不一样,可能以某一节点为连接点的两段线在点坐标序列中记录的方向完全是相反的,此时直接以PointCollection读取出的点坐标序列,将会出现前面提到的乱的连线,首尾相接地方出现混乱。
针对这种多段线数据的处理,首先要以IGeometryCollection获取要素的空间shape字段值,再遍历其中的各Geometry,一个Geometry就对应其中的一个part,获取到正确地分段坐标后,再根据应用需求对坐标组织方式进行处理,满足实际的应用需求。
在ArcGIS中有一个开发接口是Isegment,这个接口主要是针对只有两个点的线段和弧段,是不能处理上面这种多个多点的Part的复杂多线段的。