使用分区概化大型数据集
根据上下文考虑数据多个主题的地理处理工具必须在处理开始前将所有输入数据加载到内存中。 这类工具的内存限制很容易被大型数据集或大量输入数据集所超越。 分区是将大量数据细分为更小、更易于管理的要素集的一种方法。
工具在分区数据上运行时,每个分区都会被依次处理。 对分区边界上或附近的要素进行严密管理,以避免差异。 该工具会加载每个分区之外的其他数据,并在处理过程中对这些数据加以考虑,但此时只会修改分区内的要素。 将得到无缝的最终输出。
通常,如果所有输入图层中的总要素数超过 100,000 个,或者要素复杂且折点数量众多,则考虑使用分区功能来运行工具。 可以为分区启用以下工具:
聚合面工具
对齐标记工具
折叠水文多边形工具
折叠道路详细信息工具
描绘构建区工具
检测图形冲突工具
交叉图层掩膜工具
合并分开的道路工具
解决建筑物冲突工具
解决道路冲突工具
相交处设置控制点工具
简化建筑物工具
简化线工具
简化面工具
简化共享边工具
平滑线工具
平滑面工具
平滑共享边工具
稀疏化道路网工具
如何启用分区
可通过在制图分区地理处理环境设置中指定分区要素类来为地理处理工具启用分区。 使用此设置会提示相关工具按顺序处理输入要素,而非一次性全部处理。
分区要素类应合理覆盖感兴趣区,并尽量均匀地划分输入要素。 分区过大仍会超出内存限制,但使用的分区过小则会削弱工具的上下文考量能力,进而影响结果的质量。
将什么用作分区
分区要素可来自不同的来源。 有些工作流可能已包含固有的逻辑分区,例如连续打印地图集上显示的数据范围。 以面的形式建模的地图图幅通常是理想的分区。 在这种情况下,可使用网格索引要素工具创建一个矩形面要素的格网。 只要输入数据在感兴趣区域内分布相对均匀,这些操作将得到合理的分区。
在 Web 制图中,缓存切片方案可能会生成一组合适的分区。 考虑使用地图服务器缓存切片方案转面工具,创建一个代表该方案的面格网。 与使用地图图幅范围类似,当输入要素分布相对均匀时,这也是一个有效的工作流。
在某些工作流中,数据集可能包含形成自然连续分区的要素类,如县或邮政编码。 假设这些要素充分覆盖和划分输入要素,则它们可用作分区。 对于密度不同的数据分布,这是一种很好的方法。 例如,在住宅密度较高的地区,邮政编码区域面可能较小,因此在解决建筑物冲突时,邮政编码可作为良好的分区依据。
如果没有合适的面,也可专门为分区创建一些面。 使用创建制图分区工具,创建一组连续的面,此面包围的输入要素或折点数量大致相等。
分区要求
每个分区的大小应确保其包含的输入数据量不会超过工具的处理能力。 此阈值通常由所有输入图层的要素数及这些要素的复杂度决定。 其也会因运行的工具和参数的定义方式而有所不同。 一般而言,建议考虑包含不超过约 50,000 个输入要素的分区。 如果将折点用于分区方法,请根据可用内存量选择一个值。 虽然其因工具而异,但一百万个折点大约会占用 0.5 GB 的内存。
分区要素应该表示输入要素的逻辑细分,这些输入要素由采用该设置的工具进行处理。 输入要素应该基本上均匀分布在分区要素中。 这些要素可以是一组空间上相关的要素,如县或者其他行政边界;也可以是表示单独地图图幅的面,如使用格网索引要素工具创建的面;或者是使用创建制图分区工具专门创建的面分区。
分区要素必须具有正确的拓扑。 相邻面的边应该匹配,且不能有重叠。 分区要素之间可以存在孔洞,但是分区要素不能是多部分面或带有孔洞的面。 面必须包含简单的、不重叠的几何。
每个分区面的面积必须大于零。 Null 或空的分区将不做处理,而且会引发警报。 这些分区将在处理过程中被忽略。
分区要素应该表示输入要素的逻辑细分,这些输入要素由采用该设置的工具进行处理。 输入要素应该基本上均匀分布在分区要素中。
输入要素的范围应由分区要素覆盖。
分区几何应该越简单越好。 启用分区时,复杂的几何会影响工具性能。
如何处理分区工作
启用分区(通过在制图分区地理处理环境设置中指定分区要素类)时,启用了分区的工具会按分区定义,分段处理输入数据。 分区按照每个分区的对象 ID 的顺序进行处理。 若要仅处理地图的特定区域,请使用地图中的图层作为环境变量,然后在处理前仅选择相关的分区要素。 如果分区要素类未完全覆盖输入,则只处理分区覆盖的区域。
即使对数据进行了分区,仍有可能出现单个分区划分的输入数据量超过处理工具内存限制的情况。 在这种情况下,该分区的处理将失败,处理过程将转移到下一个分区。 地理处理消息传递功能指示哪些分区未被处理。 在分区要素类后附加一个名为 STATUS 的字段,并填充以下描述其状态的语句之一:
0 - 未处理
1 - 正在处理
2 - 已成功处理
3 - 内存不足
4 - 错误
提示:
如果您需要保留 STATUS 字段中的处理状态,请在数据中添加一个新字段,并在运行下一个启用了分区的工具之前,将该字段的值计算为 STATUS 字段的值。