在FME 2013中,我们添加了一个名为maptextlabeller的新转换器,一个额外的成本插件自动高质量的地图标签。基础技术是由MapText股份有限公司。MapText已经开发了用于GIS和CAD产品(如ArcGIS)的插件,亚搏在线娱乐平台几何学和国际电报公司,现在,智能地图标签可供FME用户使用。贴标签是一项非常棘手的任务,特别是当我们处理复杂的地图,有许多层和不同几何类型的重叠特征时,大小,和方向。MaptextLabeller使用用户定义的样式和规则考虑所有这些因素。它解决冲突,并产生美观的输出。再加上FME的力量MaptextLabeller可以在几分钟内创建数千个标签。下面,我们展示了几个maptextlabeller如何工作的例子,以及如何比使用FME更智能、更快速地放置标签。
注意:MaptextLabeller插件需要特殊许可证。更多信息请联系sales@s亚搏在线afe.com或访问https://www.亚搏在线safe.com/solutions/specialty/maptextlabeller-transformer/download/下载/。
一旦将maptextlabeller转换器放入工作区,它甚至可能迷惑有经验的用户——它没有输入或输出端口。
可能只有一个变压器的行为类似:inlinequerier。
红色感叹号是一个提示,它邀请用户在参数内执行操作。
对话框中的第一个参数是“目标格式”:
在FME 2013中,我们有六种不同的目标格式:
目标的多样性是因为不同系统的字符表示不同。当角色放置在AutoCAD或ArcGIS中时,其开始和结束位置不同。maptextlabeller计算每个目标系统的准确字体度量,这就保证了标签的正确放置。对于用户来说,务必确保此参数设置正确。
即使您的系统没有在这里列出,MaptextLabeller仍有很好的机会生成正确的输出。例如,当目标系统设置为Arcgis时,将标签写入Adobe地理空间PDF非常有效。只要系统使用与六个现有目标之一相同的字体放置参数,MAPTEXT和FME将写出好看的标签。
下一个参数,“每个字体点的地面单位”,也需要澄清。FME总是用地面单位来“思考”——无论是角度,米,或脚。检查,例如,缓冲器或LabelPointReplacer变压器。MapText另一方面,使用以印刷点为单位测量的字体大小——我们每天在文字处理器中看到的单位,电子表格,等。这个参数告诉多少地面单位等于1号字体。
例如,如果我们将此参数设置为“5”,然后将字体大小设置为10,地图文本将创建50个地面单位高的标签。
对于大比例尺地图,这个值应该很低-在为温哥华市制作标签的测试中,我们使用了0.5到5之间的值。
对于小比例尺地图,比如罗宾逊投影中的世界地图,我们使用了更高的值- 15,000。
对于不列颠哥伦比亚省,1000人工作得很好。
Transformer的下一部分用于指定输入端口和属性。
“层名”列将创建输入端口。“属性”列允许用户通过名为“编辑属性”的附加对话框手动键入属性。另外,可以从工作区中存在的功能类型导入属性(“导入”按钮)。当属性数量低时,这是将所有必要属性放入转换器的简单方法。当特征类型包含很多属性,但标签只需要几个属性时,输入它们可能更容易。
当我们按下“配置”按钮时,这个转换器中最有趣的对话框就会出现。我们将在下一节中讨论这个问题。完成所有配置后,变压器及其参数如下:
一旦按下“配置”按钮,FME将继电器传递给MAPTEXT。FME帮助系统包含有关MapText标签管理器的详细文档;在这里,我们只提供标签管理器GUI的快速概述。
以前在Transformer中设置的所有图层都显示在“标签管理器”对话框中:
在我们继续之前,重要的是要提到maptext使用自己的术语,这与FME中使用的术语不同。例如,地图文本世界中的“特征类型”就是我们在FME中所称的“几何类型”。
在标签管理器中,我们必须采取的第一步之一是选择正确的“Feat(ure)”类型-它可以是一个点,一条线,一个地区,或一般的“障碍”,它不会被标记,但会在MapText尝试放置标签时被考虑。
一旦选择了“专长类型”,它不能改变。如果选择了错误的类型,我们必须重新创建条目。
在定义放置规则之前,我们应该采取的第二步是样式(“样式…”按钮)。打开以下对话框:
这里我们指定一个属性或一个标签表达式,字体名称和样式,字体大小,和颜色。如果我们将字体大小乘以“每个字体点的地面单位”参数中使用的值,我们将以地面单位获得标签的尺寸。
在上图中,我们使用9号字体,哪一个乘以在MaptextLabeller主对话框中设置的5(上图更高)。使标签高度等于45个地面单位(本例中为米)。
下一步是设置规则(“规则…”按钮)。MapText提供了一套丰富的规则,允许对标签位置进行微调。下面,您可以看到不同的“规则属性”对话框:
规则制定后,我们可以勾选“标签”栏中的复选框。变压器现在可以贴上标签了。每一层都有一组独特的规则,或者规则可以在多个层之间共享。
现在让我们看几个例子,尝试一些maptextlabeller功能,看看FME如何使贴标签过程更强大。大多数例子使用从温哥华市提供的开放数据网站下载的数据。(http://温哥华.ca/your-government/open-data-catalogue.aspx)
第一个例子是一个包含代表温哥华社区的区域的shapefile,每个字体点放置25个地面单位的标签,使用Times New Roman字体,10码(即250米高的字符):
MaptextLabeller仅为23个社区创建16个标签。
请注意,MaptextLabeller通过记录以下消息来报告标记过程的成功程度:
MapTextLabeller (LabelEZFactory):
***************************
*输入:邻里
*功能计数:24
*标签请求数:24
*放置标签数量:16
*成功率(%):66.6667
***************************
Strathcona邻域是由两个部分组成的聚合特征。它需要两个标签,这就是为什么我们看到“功能计数”和“标签请求数”等于24而不是23。
现在我们在“规则属性”对话框中更改一个规则,允许在两行或多行上放置标签:
MaptextLabeller将为所有区域创建23个标签(Strathcona用单个标签标记):
下载温哥华社区示例。
现在,让我们看看FME如何帮助解决一些不能在MapTextLabeller中直接处理的情况。这次我们将尝试给世界各国贴上标签。
如果我们发送一个聚合特性,例如,像菲律宾这样的群岛,给MaptextLabeller,变压器将首先将其分解,并标记满足变压器设置的所有零件。在许多情况下,这不能称为理想的结果。与汞齐混合器变压器,FME可以将这些群岛组合成单个特征,这将被贴上更好的标签:
不合并
合并
与FME基金我们可以预先计算标签的长度,并在字符之间添加空格以获得更好的可见性(请查看世界标签示例中的spaceadder自定义转换器):
无空格添加
增加空间:
同样地,FME可用于在单词之间插入多个换行符(不包括在本例中):
通过使用度量属性和非度量属性丰富特性,并相应地更改文本字符串,可以进行更多的操作。
MapTextLabeller不保证所有传入的功能都将被标记-这可能只是不可能与一些样式/规则设置:
MapTextLabeller (LabelEZFactory):
***************************
*输入:AVERAGE_COUNTRIES
*功能计数:89
*标签申请数目:89
*贴标签数:65
*成功率(%):73.0337
***************************
与FME基金我们可以很容易地找到没有标记的特性,并尝试再次运行标记过程——这次使用不同的设置或不同的属性。例如,如果国家名称不适合一些小国家,我们可以使用特征合并变压器找到它们(加入国家和标签,并从不完整的港口获取输出)。然后我们可以使用计数器转换器对它们进行编号,并在第二轮标记中使用具有唯一编号的属性。
为了避免现有标签和使用第二个maptextlabeller创建的标签之间的冲突,我们应该用边界框替换前者,并将这些边界框作为障碍物发送到变压器中:
下载世界各国示例。
并行处理允许将FME转换拆分为一系列较小的任务,并使用多核同时执行这些任务,多处理器系统。FME 2012中引入了并行处理。
使用并行处理制作标签比在单个进程中运行工作区显示出明显更好的性能,在某些情况下,甚至有必要避免内存问题。由于地图标签的性质,为并行性配置组可能具有挑战性-每个组必须在空间上独立于其他组,以确保在不同进程中创建的标签不会重叠。
并行处理的优点在大数据量上尤为明显。为了测试maptextlabeller如何在并行环境中工作,我们使用了Vancouver packages数据集。它包含超过10万个包裹和超过30万个包裹边界,在这个例子中,我们试图给它加上标签。包裹作为包裹唯一标识符的来源,必须以主导角度放置在每个包裹的中间,地块边界会使标签显示其长度。
在我们的测试中,在32位版本的FME上没有并行性的正常工作区无法完成作业,并报告内存不足问题:
可用内存不足—错误代码为2—请阅读“调整内存资源”一节中的“FME帮助”了解解决方法。
64位FME在大约一小时内完成了这个过程(当然,这里使用的所有数字将根据每台特定机器的处理能力而有所不同)。
当一个maptextlabeller和一个featuremerge和bufferer(用于查找和可视化没有任何标签的边界)被包装成一个定制的转换器时,我们的第一个示例中的温哥华邻里区代表的中等平行度工作区和24个组在大约20分钟内完成了32位和64位版本的FME:
请注意,为了使用并行处理选项,必须使用FME 2013 SP1。
下载温哥华包裹标签示例。
现在让我们看看下面的例子。我们有一个由三层组成的快速运输数据集:天空列车线,架空列车站,温哥华边界。站点是点特征,我们用圆圈代替它以提高可见度。然而,为了应用点放置规则,我们必须将点(而不是圆)发送到MaptextLabeller。因此,转换器可以创建重叠圆的标签,只是因为MaptextLabeller不知道它们的存在。MapTextStyler转换器“教育”MapTextLabeller关于传递给它的特性的大小。在maptextstyler参数中,我们可以指定一个点周围应该留有多少空间,沿着一条线,或者从多边形边界,确保标签不接触或重叠其他几何图形。
比较地图的这两个片段:
没有MapTextStyler
使用maptextstyle
这个例子包括两个工作区——一个不使用MapTextStyler,还有一个使用它的。
下载maptextstyler示例。
在前面的例子中,我们只需将输出路由到FME数据检查器,这是MaptextLabeller支持的6个不同目标系统中的一个。“fme generic”目标既适用于检查员,也适用于textstroker转换器,这使得标签适合用图像光栅化器进行光栅化。其他五个目标系统适用于为非FME环境制作标签。
下面的例子再次使用Vancouver Open Data网站。这次我们试图给温哥华街道贴上标签,公园,以及快速运输系统(Skytrain)。我们将输出发送到八种不同的格式,包括6个目标系统,Adobe地理空间PDF,还有一个光栅。
如上例所示,我们不仅创建标签,还要为输出准备它们的“父”特性,可能包括(但不一定)设置颜色,层或层,显示顺序,等。这使得示例变得更大、更复杂;然而,它还显示了完整的标签解决方案的外观。
由于CAD和GIS系统的不同性质和特征造型的不同,目标系统的工作空间彼此非常不同。涉及MaptextLabeller的部分,另一方面,在所有示例中保持不变-“目标格式”是我们必须更改的唯一参数,以便根据目标系统的要求调整标签。
下表包含此示例中使用的所有工作区的缩略图:
DGN(左)DWG(右):
ArcGIS(左)地图信息(右):
几何尺寸(左)PDF(右)
FME通用+光栅
每种特定格式的工作区包含在下面的适当格式部分中。所有示例还包括输出数据。
本例根据FME数据检查员的要求制作标签。工作区设置颜色,用圆圈替换代表天空火车站的点,并用缓冲多边形替换表示空中列车线路的折线。它包括一个文本选择器变压器,因为FME不能直接对字体进行栅格化,所以使用真类型字体创建多边形。工作区还创建一个订单属性,它定义了特征被光栅化的顺序——也就是说,哪个功能将在其他功能之上。
数据检查员:
PNG图像:
这里有一个有趣的细节——数据检查器识别maptextstyler指定的字体名。如果检查员收到一个文本功能,其中包含字体名称的“ez”字体名称属性,它将以正确的字体显示文本。在FME 2013中,除了默认字体,没有其他方法可以使用其他字体,所以这个技巧可以用于任何文本可视化。只需创建一个字体名称属性,并将其值设置为正确的字体名称。
下载温哥华街道标签示例,用于数据检查器和光栅化(模板包括PNG格式的输出光栅)。
dwg作为目标格式的工作原理与fme generic类似。AutoCAD按照写入文件的顺序显示功能,因此,在编写之前对特性进行排序是有意义的(为每个具有订单号和排序器的层使用一个attributeCreator)。DWGStyler转换器用于设置颜色和字体。
下载适用于Autodesk DWG的温哥华街道标签示例。
DGN可能是最棘手的目标格式。MicroStation支持不同类型的字体;然而,对于maptextlabeller,它必须使用真正的字体。在V7和V8中,字体处理也存在差异。
对微型工作站V7中,我们必须通过MicroStation中名为字体安装程序的特殊实用程序(菜单->实用程序->安装字体…)添加真正的字体。此实用程序允许用户控制将哪些字体导入字体资源文件(FONT.rsc,可以找到,例如,这里-c:\Program Files(x86)\Bentley\Workspace\System\Symb)。通过这个工具,我们还可以控制识别FME字体的编号。使用attributeCreator Transformer,我们应该创建一个格式属性igds_字体,并为maptextstyler中使用的每个字体名设置字体号。例如,如果在MicroStation V7中添加了“Arial Narrow Bold”,并将其编号设置为251,在MaptextLabeller中,我们使用“Arial Narrow Bold”定义了一种样式,然后还应将igds_字体设置为此数字。注意在V7中,字体数不能超过255。
DgnStyler变压器可用于设置颜色。在这种情况下,“颜色索引”比“RGB”更好,因为它允许使用种子文件中预先设置的颜色。
V8使用的字体与V7非常不同。V8使用种子文件存储字体及其编号。当我们建立一个项目时,我们应该通过放置种子文件的样本来添加所需的字体。这也将创建一个字体编号。Arial似乎总能得到1025号,其他字体从1024开始接收数字。然后我们可以使用FME数据检查器检查种子文件,以获取所有的数字,并在工作区中使用它们,方法是使用attributeCreator Transformer设置igds_字体。当然,在写入DGN V8文件之前,我们不应该忘记在工作台导航器中选择包含字体的种子文件。
再一次,建议使用带有“颜色索引”选项的dgnstyler转换器来选择种子文件中设置的颜色。
下载Bently MicroStation V8温哥华街标签示例(模板包括输出dgn)。
以mapinfo为目标的工作区不需要排序控制-这应该通过在“layer control”中排列层并将结果保存在mapinfo工作区(*.wor文件)中直接在mapinfo中完成。
MapInfoStyler允许设置颜色,符号,以及多边形图案,所以这个变压器在我们的例子中被积极地使用。
下载mapinfo的温哥华街标签示例(模板包括输出选项卡文件和mapinfo工作区文件vancouverstreets.wor)。
Arcgis在FME中需要最少的设置。标签应该输出为geodb_annotation几何图形。所有的样式和图层排序都应该在Arcgis中执行,并且可以保存为一个*.mxd文件。
下载Arcgis的温哥华街道标签示例(模板包括输出-arcgislabels.gdb和arcgisvancouverlabels.mxd文件)。
写入到Geomedia也是相当简单的—样式和顺序应该在Geomedia中完成。标签应写为fm0_文本几何图形。在geomedia的“显示属性”中,我们可能需要选择“名义地图比例”(本例为12500)。
下载geomedia的温哥华街道标签示例(模板包括输出geomedia mdb和workspace.gws文件)。
地理空间PDF可以使用Arcgis作为目标格式编写。
为了正确地书写字体,PDF编写器应该知道应该在哪里搜索它们。这由导航器中PDF编写器参数中的“TrueType字体目录”控制。通常情况下,路径指向c:\windows\fonts。
我们还应该在目标特性类型上公开pdf_text_font格式属性,我们要写的标签,并将其连接到输入编写器的功能上的“ez字体名称”属性。
PDF变压器也可用于着色,线条样式,字体。
下载Adobe地理空间pdf的温哥华街道标签示例(模板包括ouput pdf)。
你好,
我有FME 2018.1.0.2和。net Framework 4.5.1
仅当我检查带有符号的标签时引发异常
大家好,
我想移动一些重叠的点标签。源文件是一个DGN。
您可以在这张图片上看到重叠:
我的愿望是移动这些标签,使他们不相互交叉或与下面的网络。
我试着对变压器进行参数化,但没有成功。我联系了维莱姆斯和安全没有成功…亚搏在线
溴
尼古拉斯
当输出为dwg时,maptext labeler似乎在偏移小写文本字符g、j、p、q和y方面存在问题。
源数据是一个SHP文件
我使用maptext样式器在每行周围创建一个文本缓冲区。
在MapText Labeler中,我将线条规则属性设置为
以前有人经历过吗?当做
拉扎
博约尔
我第一次在我和我的问题可能会在我最喜欢的配置和其他的设置我到达不了一个解决方案。
我在街上送了一张桌子。
Lorsque J'Usage Maptextlebeller J'ai,苏斯·梅斯·蒂奎茨,波因图尔之家不到巴拉瑟。savez vous comment faire pour avoir uniquement les_tiquettes sans les points lors de mon export?
谢谢d 'avance !
编纂,
第一次使用MaptextLabeller,我看过视频。一切正常,直到我到达MapTextLabler,然后什么也没有输出。我已经通过了规则(允许所有的事情),排除了障碍,但仍然一无所获。
你好,
我正在评估FME 2016桌面上的MaptextLabeller,遇到了一个问题。背景是市政用地地块测绘。
到目前为止,我已经使用MaptextLabeller(目前为FME通用目标格式)标记了地块。现在我要标记块,是一组土地。我需要为地块生成的标签与为地块生成的标签竞争。换言之,应首先生成包裹标签,然后块标签应该放在它们周围。
我目前正在获取为包裹生成的标签,并将它们输入到第二个MaptextLabeller Transformer中,然后将包裹标签设置为障碍物。然而,块标签仍然经常与包裹标签重叠。
任何帮助都将非常感谢。
谢谢,
汤姆
在FME桌面上运行包含maptextlabeller的工作区时,或者在FME服务器上,转换失败后,日志文件中将显示以下内容:
错误(LabelezFactory):LabelezFactory初始化失败。无法加载LabelManager。确保安装正确。错误(LabelezFactory):LabelezFactory初始化失败。请确保所有工厂部件安装正确
此问题可能是由于缺少Microsoft.NET Framework 3.5造成的。在新安装的Windows Server 2012 R2上可能未安装或启用此软件框架,Windows 8,Windows 8.1,或Windows 10。
在Windows Server 2012 R2上使用“添加角色和功能向导”安装Microsoft.NET Framework 3.5,或安装“按需”或通过控制面板启用在Windows 8中,8.1,10。