本发明属于地理信息科学领域,尤其涉及空间矢量数据生成方法及装置。
背景技术:
在地理信息科学(Geographic Information Science,GIS)中,空间矢量数据是GIS重要的数据源,是进行空间数据处理与分析的基础。而在二维GIS中,面状矢量数据又是最复杂的地理实体的表达形式,其自动生成的方式已从传统的几何构建方式向拓扑构建方式转换,以保证数据间拓扑关系的正确性。
面状矢量数据生成以后,有时需要对空间距离相近或具有相同属性的多边形进行合并,这是制图综合领域中的重要算子。目前的面状矢量数据的合并算法的完备性与合并的结果较为理想,但并未考虑到城市功能单元面状矢量数据生成的特殊性。城市功能单元面状矢量数据创建的数据基础是各类建筑物多边形,建筑物多边形基本不存在自交,叠置等状态。“基于Delaunay三角网的多边形合并算法”与“基于矢量游走的多边形合并算法”的合并过程相对复杂,合并效率偏低;其次,部分景观型建筑物含有岛,“凸包演化算法”对含有岛的多边形处理效果不佳,因此同样不适合于城市功能单元面状矢量数据的生成。因此,针对城市建筑物这一类型多边形的合并算法缺乏针对性的研究。
技术实现要素:
本发明实施例的目的在于提供空间矢量数据的生成方法及装置,旨在解决目前建筑物多边形的合并过程效率低的问题。
本发明实施例是这样实现的,一种空间矢量数据生成方法,包括:
将地址树中所有的节点分成已生成矢量数据节点和未生成矢量数据节点并生成各自的列表,所述已生成矢量数据节点包括建筑物节点,所述未生成矢量数据节点包括城市功能单元节点;
遍历所述未生成矢量数据节点列表,利用所述建筑物节点的矢量数据,生成所述城市功能单元节点的面状矢量数据;
将生成了所述面状矢量数据的城市功能单元节点从所述未生成矢量数据节点列表中移除,并添加到所述已生成矢量数据节点的列表中;
在所述未生成矢量数据节点列表结束一次遍历后,创建一个矢量图层来存储所述城市功能单元节点的面状矢量数据;
重复上述遍历过程,直到所述未生成矢量数据节点列表为空。
本发明实施例的另一目的在于提供一种空间矢量数据生成装置,包括:
分类单元,用于将地址树中所有的节点分成已生成矢量数据节点和未生成矢量数据节点并生成各自的列表,所述已生成矢量数据节点包括建筑物节点,所述未生成矢量数据节点包括城市功能单元节点;
生成单元,用于遍历所述未生成矢量数据节点列表,利用所述建筑物节点的矢量数据,生成所述城市功能单元节点的面状矢量数据;
更换单元,用于将生成了所述面状矢量数据的城市功能单元节点从所述未生成矢量数据节点列表中移除,并添加到所述已生成矢量数据节点的列表中;
存储单元,用于在所述未生成矢量数据节点列表结束一次遍历后,创建一个矢量图层来存储所述城市功能单元节点的面状矢量数据;
重复上述遍历过程,直到所述未生成矢量数据节点列表为空。
在本发明实施例中,利用已有的建筑物矢量数据和地址树结构来快速生成城市功能单元的面状矢量数据,该方法提高了城市功能单元面状矢量数据的生成效率,从而能够准确迅速地完善城市地理空间目标体系数据集。
附图说明
图1是本发明实施例提供的城市功能单元层次示意图;
图2是本发明实施例提供的空间矢量数据生成方法的流程图;
图3是本发明实施例提供的城市功能单元空间矢量数据与其它数据之间的拓扑关系示意图;
图4是本发明实施例提供的地址树结构图;
图5是本发明实施例提供的最小距离合并法的流程图;
图6是本发明实施例提供的最小距离合并法的算法流程图;
图7是本发明实施例提供的城市功能单元空间矢量数据自动生成的算法流程图;
图8本发明实施例提供的空间矢量数据生成装置的结构框图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用于解释本发明,并不用于限定本发明。
本发明实施例在于生成城市功能单元的空间矢量数据,建立完整的城市功能体系结构数据集,所述城市功能单元介于行政区划与建筑物之间。
具体地,如图1所示,行政区、街道、社区、管理网格(部分城市)为一个城市的行政区划单元,位于城市结构体系的上层。它们类似于容器自上而下包含着城市中的各个要素。底层的建筑物类似于元胞,是构成城市各类功能模块的基本单元。城市功能单元介于行政区划与建筑物之间,它将城市中距离相近且功能相似的若干建筑物组合起来,形成具有特定功能的建筑集群,如:学校、医院、居民小区、工厂等;城市功能单元之间亦可进行重复组合,形成功能更为丰富的建筑集群,如:商业区、居住区、高新园区等。同时,各类城市功能单元必须包含在上层的行政区划单元以内。从而,形成完整的城市功能体系结构。
图2是本发明实施例提供的空间矢量数据的生成方法的流程图,详述如下:
在S201中,将地址树中所有的节点分成已生成矢量数据节点和未生成矢量数据节点并生成各自的列表,所述已生成矢量数据节点包括建筑物节点,所述未生成矢量数据节点包括城市功能单元节点。
在所述将地址树中所有的节点分成已生成矢量数据节点和未生成矢量数据节点并生成各自的列表之前还包括:
利用文本地址构建地址树,所述文本地址是利用文本的形式表示的地址。
具体地,如图3所示,地址树是通过海量标准地址数据库中的文本地址数据,通过自动分词技术将文本地址切分成若干地理实体概念,并根据地理实体所表示的空间尺度大小形成地址树结构。在地址树中,空间尺度越大的地理实体位于地址树的上层节点(如:深圳市、福田区、南山区、宝安区等);空间尺度越小的地理实体(一般是各类建筑物)位于地址树的底层节点。
在S202中,遍历所述未生成矢量数据节点列表,利用所述建筑物节点的矢量数据,生成所述城市功能单元节点的面状矢量数据。
如图4所示,所有的建筑物节点位于叶子节点,由它们来生成各自父节点(城市功能单元节点)的空间矢量数据,即父节点约束子节点,S父>=S子1+S子2+…S子n;而地址树中上层的节点(行政区划节点)将对生成的矢量数据进行约束,即该行政区划节点下的所有城市功能单元节点应被包含其中。
具体地,79栋和82栋建筑物节点形成鹊山工业区城市功能单元节点,鹊山工业区城市功能单元节点约束79栋和82栋建筑物节点,同时鹊山工业区城市功能单元节点受到大浪街道行政区划节点的约束;172栋、173栋和174栋建筑物节点形成金盈新村城市功能单元节点,金盈新村城市功能单元节点约束172栋、173栋和174栋建筑物节点,同时金盈新村城市功能单元节点受到大浪街道行政区划节点的约束。
若所述建筑物节点所形成的城市功能单元节点隶属于单一的城市规划图斑或土地利用图斑,那么所述单一的城市规划图斑或土地利用图斑为生成的城市功能单元面状矢量数据。
所述图斑指的是:以1:10000地形图作为工作底图,将地貌、土地利用类型基本相同,水土流失类型基本一致的土地单元(地块)分为一类,以其为基础调查单元,然后将单元勾绘到地形图上成为图斑。图像分割或者矢量图套合,将整个影像划分成若干个小的区域,这样的区域一般叫做图斑或者像斑。或者单一地类地块,以及被行政界线、土地权属界线或线状地物分割的单一地类地块称为图斑。
若所述建筑物所形成的城市功能单元有明确的边界数据信息,所述边界数据为生成的城市功能单元面状矢量数据。
若所述建筑物所形成的城市功能单元既不隶属于单一的城市规划图斑或土地利用图斑,也没有明确的边界数据信息,那么采用最小距离合并法生成城市功能单元的面状矢量数据。
如图5所示,所述采用最小距离合并法生成城市功能单元的面状矢量数据包括:
S501:从建筑物图形中,任意选出一个作为起始拼接图形;
S502:计算所述起始拼接图形与其余建筑物图形的距离并定位出与所述起始拼接图形最邻近的另一个建筑物图形;
S503:拼接这两个最邻近的建筑物图形,生成一个过渡的面状矢量数据;
将所述过渡的面状矢量数据作为新的起始拼接图形,返回执行所述计算所述起始拼接图形与其余建筑物图形的距离并定位出与所述起始拼接图形最邻近的另一个建筑物图形的操作,直到属于同一个城市功能单元的建筑物全部拼接完成。
图6提供了本发明实施例最小距离合并法的算法流程图。
其中,UnMergeList<IPolygon>表示待拼接的若干建筑物矢量图形;
UnMergeList.Count>0表示待拼接的若干建筑物矢量图形数量大于0;
UnMergeList[i]表示从若干建筑物矢量图形中任选一个图形;
MergePolygon==null表示已拼接的建筑物矢量图形未形成,即所述过渡的面状矢量数据还未形成;
MergePolygon=UnMergeList[i]表示将未拼接的建筑物矢量图形拼接到已拼接的建筑物矢量图形上;
MergePolygon=Combine(UnMergeList[i],MergePolygon)表示拼接两个最近距离的建筑物矢量图形;
UnMergeList.Remove(UnMergeList[i])表示移除未拼接的建筑物矢量图形进行拼接后将其移除未拼接建筑物矢量图形。
在S203中,将生成了所述面状矢量数据的城市功能单元节点从所述未生成矢量数据节点列表中移除,并添加到所述已生成矢量数据节点的列表中。
在S204中,在所述未生成矢量数据节点列表结束一次遍历后,创建一个矢量图层来存储所述城市功能单元节点的面状矢量数据。
重复上述遍历过程,直到所述未生成矢量数据节点列表为空。
本发明实施例还包括:
建立城市功能单元面状矢量数据的空间拓扑关系,从而形成完整的城市功能体系结构数据集。
所述建立城市功能单元面状矢量数据的空间拓扑关系需满足条件:
1)同一层次的城市功能单元面状矢量数据不能重叠;
2)各层次城市功能单元面状矢量数据应包含于行政区划节点内部。
图7提供了本发明实施例城市功能单元空间矢量数据自动生成的算法流程图。
其中DoList<ITreeNode>表示已生成矢量数据节点;
UndoDoList<ITreeNode>表示未生成矢量数据节点;
i=0表示将i赋值0;
i<UndoDoList.Count表示i小于未生成数量数据节点数量;
DoList.Add(ITreeNode[i])UndoList.Remove(ITreeNode[i])表示生成城市功能单元后将未生成矢量数据节点从未生成矢量数据节点列表移除并添加到已生成矢量数据节点列表;
i++表示i+1;
UndoList.Count==0表示未生成矢量数据节点列表为空。
对应于该发明实施例提供的空间矢量数据生成方法,图8示出了本发明实施例提供的空间矢量数据生成装置的结构框图,为了便于说明,仅示出了与本实施例相关的部分。
参照图8,该装置包括:
分类单元81,用于将地址树中所有的节点分成已生成矢量数据节点和未生成矢量数据节点并生成各自的列表,所述已生成矢量数据节点包括建筑物节点,所述未生成矢量数据节点包括城市功能单元节点;
生成单元82,用于遍历所述未生成矢量数据节点列表,利用所述建筑物节点的矢量数据,生成所述城市功能单元节点的面状矢量数据;
更换单元83,用于将生成了所述面状矢量数据的城市功能单元节点从所述未生成矢量数据节点列表中移除,并添加到所述已生成矢量数据节点的列表中;
存储单元84,用于在所述未生成矢量数据节点列表结束一次遍历后,创建一个矢量图层来存储所述城市功能单元节点的面状矢量数据;
重复上述遍历过程,直到所述未生成矢量数据节点列表为空。
在所述分类单元81之前还包括:
构建单元,用于利用文本地址构建地址树,所述文本地址是利用文本的形式表示的地址。
所述生成单元82包括:
利用所述建筑物节点的矢量数据生成城市功能单元节点的面状矢量数据;
将所述城市功能单元所隶属的单一的城市规划图斑或土地利用图斑确定为所述城市功能单元节点的面状矢量数据。
所述生成单元82包括:
利用所述建筑物节点的矢量数据生成城市功能单元节点的面状矢量数据;
将所述建筑物节点生成的城市功能单元的边界数据信息确定为所述城市功能单元节点的面状矢量数据。
所述生成单元82包括采用最小距离合并法生成城市功能单元的面状矢量数据,所述采用最小距离合并法生成城市功能单元的面状矢量数据包括:
选择单元,用于从建筑物图形中,任意选出一个作为起始拼接图形;
计算单元,用于计算所述起始拼接图形与其余建筑物图形的距离并定位出与所述起始拼接图形最邻近的另一个建筑物图形;
拼接单元,用于拼接这两个最邻近的建筑物图形,生成一个过渡的面状矢量数据;
将所述过渡的面状矢量数据作为新的起始拼接图形,返回执行所述计算单元的操作,直到属于同一个城市功能单元的建筑物全部拼接完成。
在本发明实施例中,利用已有的建筑物矢量数据、行政区划矢量数据和地址树结构来快速生成城市功能单元的面状矢量数据,该方法使得建筑物多边形的合并过程效率提高,进而提高了城市功能单元面状矢量数据的生成效率,从而能够准确迅速地完善城市地理空间目标体系数据集。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。