免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 1520|回复: 4
收起左侧

【FME-HOW-TO系列】11 从栅格转换为矢量

[复制链接]

665

主题

2万

铜板

34

好友

传奇会员

Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30

积分
20649

精华勋章爱心勋章地信专家组贡献勋章冰雪节勋章

发表于 2021-4-13 14:26 | 显示全部楼层 |阅读模式
概述

在本教程中,您将学习如何使用RasterToPolygonCoercer转换器将栅格数据转换为多边形。


下载

raster-to-vector.fmwt

vancouverparks.zip

注意:由于您正在处理面向公众的数据库,因此有时可能会覆盖和/或修改表。如果您的翻译产生意外结果,请参阅重置PostGIS培训数据库文章或者,您可以下载提供的文件,并使用适当格式的读模块替换PostGIS读模块

练习

在本场景中,您希望将1M的城市和公园区域栅格转换为将以KML格式存储的城市边界多边形。

说明

1.启动FME Workbench

  • 如果尚未打开,请启动FME Workbench。

2.创建一个新工作空间

  • 在“开始”页面的“创建工作空间部分中,选择“创建新工作空间选项。

3.添加PostGIS Raster读模块

  • 在画布上未选择任何内容的情况下开始键入“PostGIS Raster”,然后通过双击或使用箭头键从读模块列表中选择PostGIS格式,并按回车键将其添加到画布。
  • 接下来,从读模块连接列表中选择PostGIS Training Database。如果尚未设置数据库连接,请选择“添加数据库连接”并输入以下参数:
  • 接下来,打开读模块参数并从表列中选择VancouverParks表。

4.添加RasterToPolygonCoercer

RasterToPolygonCoercer根据输入栅格要素创建多边形。为输入栅格中具有相同值的每个连续像素区域输出一个多边形。

  • 选择VancouverParks 读模块要素类,然后开始输入“RasterToPolygonCoercer”以显示快速添加搜索中的FME转换器列表。然后通过双击或使用箭头键从转换器列表中选择RasterToPolygonCoercer,然后按回车键将其添加到画布中。这将自动将VancouverParks读模块连接到RasterToPolygonCoercer。

5.添加 Inspector

  • 接下来,在RasterToPolygonCoercer之后添加一个Inspector并运行工作空间。这将在转换运行后自动打开FME Data Inspector中的矢量数据集。

请注意,栅格已正确转换为按_label属性分类的多边形要素。所选区域标识了栅格背景(_label 0,0,0,0),将在以下步骤中使用Tester转换器将其删除。RasterToPolygonCoercer创建_label属性,该属性表示该多边形所涵盖的波段值(在本例中为R,G,B,A)。在原始数据集中,有三个分类的像元值:城市,公园和背景。虽然数据集似乎被裁剪土地边界,但是背景像元仍然具有值(0,0,0,0)但是已经变得透明。由于背景像元仍具有值,因此它们由RasterToPolygonCoercer制作为多边形。

  • 返回FME Workbench并删除连接到RasterToPolygonCoercer的Inspector,因为它不再需要。

6.删除栅格背景

  • 在RasterToPolygonCoercer之后添加一个Tester
  • 一旦添加Tester后,双击转换器参数或单击红色齿轮图标打开转换器参数。
  • 回想一下前面的步骤((如上面的屏幕截图所示),对于_label属性,栅格背景的值为0,0,0,0。
  • 首先添加一个Test子句。单击“左值”单元格中的空行,然后单击下拉箭头以从工作空间中选择属性。从“属性值”列表中选择_label属性。
  • 接下来,通过从下拉列表中选择!=运算符,将运算符设置为不相等。
  • 最后,单击空的右值”单元格以输入文本。通过在“值”中键入“0,0,0,0”来输入值,以删除值为0,0,0,0的任何_label属性(即不需要的栅格背景),然后单击“确定”接受更改并关闭Tester 参数。Tester 参数应与下面提供的屏幕截图相匹配。

要了解有关Tester 和测试子句的更多信息,请参阅FME Desktop Basic培训手册中的Tester和TestFilter Transformers部分。

7.平滑多边形边缘

在这种情况下,您只需设置泛化容差(Generalization Tolerance)。泛化容差越大,线越平滑。

  • 在Tester 后添加一个Generalizer并打开转换器参数。
  • 将Generalization Tolerance的值设置为10。

如果您在此阶段运行工作空间并检查FME Data Inspector中的输出,您会注意到多边形非常锯齿状,因为它遵循栅格像元的轮廓,类似于下面提供的屏幕截图:

要避免这种情况,您需要通过删除顶点以减少坐标密度来平滑线条。要了解有关使用泛化算法平滑线条的更多信息,请参阅Generalizer文档

注意:此值的单位由读入的要素的坐标系控制。

泛化容差1:

泛化容10

8.添加一个Inspector

  • 接下来,在Generalizer之后添加一个Inspector。这将在转换运行后自动打开FME Data Inspector中的栅格数据集。

9.添加Google KML 写模块

  • 与添加读模块类似,键入“KML”,然后从写模块列表中选择Google KML格式。
  • 通过单击“数据集”省略号,指定文件名并设置KML文件的目标文件夹。指定文件夹位置和文件名后,将“表定义”设置为“自动”,然后单击“确定”。

10.运行工作空间

  • 单击工具栏上的“运行”按钮,或使用菜单栏上的“运行”>“运行转换”运行工作空间

运行转换后,您将获得一个新的Google KML文件,其中有一个单独的多边形用于温哥华陆地边界。由于您将Inspector附加到画布上的最后一个转换器,因此输出将在FME Data Inspector中自动打开。

结果输入

输出

转换器
  • Generalizer - 根据指定的算法转换或测量几何要素。
  • Inspector - 要素发送到FME Data Inspector以供显示。
  • RasterToPolygonCoercer - 根据输入栅格要素创建多边形。
  • Tester - 评估要素上的一个或多个测试,并根据测试结果路由该要素


本文转载来自CSDN作者:fmechina  版权归作者所有

0

主题

3万

铜板

10

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
6105
发表于 2021-12-5 21:31 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

1万

铜板

3

好友

资深会员

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

积分
3286
发表于 2022-11-27 19:54 | 显示全部楼层
好资料,正在学习中....
回复 支持 反对

使用道具 举报

3

主题

2482

铜板

1

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
1015
发表于 2023-3-20 09:47 | 显示全部楼层
谢谢楼主!
回复

使用道具 举报

2

主题

4万

铜板

7

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
6445
发表于 2024-3-6 13:12 | 显示全部楼层
感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表