GeoProcessing扩展教程

BalazsBaranyBalazsBarany 管理员,版主,员工,RapidMiner认证分析师,RapidMiner认证专家职位:930独角兽
2020年2月编辑 知识库
有一个新的分机叫地理处理在RapidMiner市场。为了让你知道你可以用这个扩展做什么,这里有一个使用一些操作符的教程。
我们虚构的场景是:我们正在与奥地利的维也纳市合作,庆祝维也纳和多瑙河的悠久历史。在庆祝活动中,我们想为孩子们组织一场划船比赛和跑步比赛。我们正在处理来自维也纳开放数据服务器的地理数据。
20世纪70年代,维也纳在多瑙河内建造了一座人工岛,名为Donauinsel(多瑙河岛)。从那以后,就有了多瑙河(照片上的左臂)和新多瑙河(右边)。这里有一张地图给你一个概念:

我们只对流经维也纳的多瑙河和新多瑙河的部分地区感兴趣。这些在下一张地图中突出显示:

赛艇比赛应该在多瑙河(或新多瑙河)穿过维也纳的最长的一段进行,所以我们要确定河流部分的长度。
对于儿童跑步项目,我们希望选择两座桥之间距离最短的桥。维也纳的所有桥梁当然也可以在开放数据服务器上使用:

我们显然只对多瑙河上的桥梁感兴趣,而不是维也纳的每一座桥。因此,我们将相应地过滤数据:

然后我们将计算每个桥之间的距离,并选择最短的一个(忽略多部分桥的非常短的距离)。
为了使RapidMiner能够做到这一切,从市场中安装GeoProcessing扩展。确保在Operators面板的Extensions中看到Geoprocessing文件夹。

一些背景知识

地球是一个不规则的椭球体,但我们喜欢看二维的地图,因为它们更适合在电脑屏幕或纸上显示。这种向二维的转换也允许应用几何计算,如距离、长度、面积等。
我们用纬度和经度来表示全球坐标(从赤道和格林威治的国际子午线0开始计算)。这些是角度,所以坐标之间的距离取决于地理位置。我们不能用这些坐标来计算我们最喜欢的测量系统(米、码、英里等)中的绝对尺寸。
将坐标转换为新的坐标系(CRS,坐标参考系)的过程称为投影或重投影。你可以把它想象成从飞机或卫星上拍一张照片,把三维的地球表面变成二维的图片。投影坐标可以用米或其他单位来测量,几何函数会给我们期望的测量值。
坐标系统由EPSG代码指代。你可以检查一下epsg.io为你正在研究的领域找到一个合适的坐标系。
并不总是需要重新投影坐标。如果我们只想知道一个几何图形是否包含或触及另一个几何图形,我们可以在原始坐标系中计算(如果我们忽略跨越经度-180°和180°之间的线的问题)。

获取数据

维也纳开放数据服务器包含多种格式的地理数据。我们可以很容易地在RapidMiner中使用CSV版本。该示例进程直接从web加载数据,如果您更经常需要它们,当然可以将它们保存在本地。

此进程仅包含标准的RapidMiner操作符,扩展尚未使用。Read CSV操作符设置时使用逗号作为分隔符,使用UTF-8编码,否则使用默认设置。属性名来自第一行,数据格式是自动确定的。
我们只保留一些属性(几何形状和对象名称),并重新命名它们以供以后使用。例如,河流几何被重命名为riverGeom
以文本形式表示几何形状的标准称为WKT,即众所周知的文本。开放数据服务器以这种格式交付几何图形,这也是GeoProcessing操作符使用的格式。如果数据库中有GIS数据,可以使用ST_AsText在SQL中以这种格式获取它们。

教程过程


读取数据后,我们首先提取维也纳边界内的多瑙河部分。我们使用了计算几何关系(计算过程中维也纳内部的多瑙河)。它有一个输入,所以我们需要在一个示例集中同时使用维也纳和多瑙河坐标。实现这一点的最简单方法是笛卡尔连接(它将第一个示例集的每一行与第二个示例集的每一行结合起来)。我们使用十字路口计算几何关系函数,以获得结果。它返回两个几何图形(一个多边形和一条线)的公共部分作为另一个几何图形,在我们的例子中是一条较短的线(维也纳多边形内的多瑙河部分)。
然后,我们为桥梁过滤掉新多瑙河,但保留这两个部分用于河流部分长度的计算。
我们想要得到长度的单位是米,而不是椭球度。所以我们把原始坐标重新投影成奥地利常用的投影,ETRS89/奥地利(EPSG代码:3416)。这个投影在这里是合适的。如果你在一个不同的地理区域工作,一定要选择一个合适的投影。(选择错误的预测将导致计算出的指标出现严重扭曲。)
在重新投影到EPSG:3416之后,我们可以使用几何图形上的计算测量(这里称为计算河流长度)来计算河臂的长度。

现在来看看桥。
首先我们要找到横跨多瑙河的桥梁。如果我们将其应用于两个示例集,这是一个地理连接操作。

我们选择函数十字架在这里。其他功能包括包含/containedBy相交重叠触摸等。函数参数在这里保持空,它只被isWithinDistance
现在我们可以为所有选定的桥创建一个距离“矩阵”(没有格式化为矩阵)。这发生在子进程中。
为了计算距离,我们当然会将桥梁坐标重新投影到基于奥地利米的坐标系中。我们使用笛卡尔连接将桥表与自身连接起来,因此我们为每个桥的组合获得一行,但如果将桥与自身进行比较,则删除该行。
然后我们使用计算几何关系与距离投影几何上的函数。

然后,我们过滤掉距离小于100米的所有内容,以避免返回不相关的组合(桥梁的一些较小部分是数据中的单独条目)。
现在我们可以按距离对数据进行排序并返回第一行。根据我们的数据,“Steg and der nordbahnbr cke”和“Floridsdorfer br cke”是最近的,距离为481米。
就这样,我们完成了分析。我们从Web上导入地理数据,转换坐标,用不同的方法组合不同的示例集,并计算几何图形上的实际度量。
从那里你可以去一些方向:
-使用操作符几何到坐标为了可视化数据(它最适合点几何图形,或者如果您有大量几何图形)
-尝试不同的方式来地理连接示例集
-尝试不同的功能在计算几何关系计算几何上的度量

我期待着您对GeoProcessing扩展和本教程的问题和评论。
Sharan_Gadi sgenzer gmeier IngoRM (删除用户) Jasmine_ varunm1 lionelderkrikor Pavithra_Rao yyhuang

评论

  • BalazsBaranyBalazsBarany 管理员,版主,员工,RapidMiner认证分析师,RapidMiner认证专家职位:930独角兽
    该流程的可下载版本附在这里。
    Jasmine_ DocMusher
  • sgenzersgenzer 管理员,版主,员工,RapidMiner认证分析师,社区经理,成员,大学教授,PM版主职位:2959年社区经理
    2020年2月编辑
    如果你运行的是RapidMiner 9.6+,你可以点击这个链接直接打开进程:

    获取数据(上面显示的第一个进程)

    计算距离(上述第二个过程)
    Jasmine_ BalazsBarany
  • BalazsBaranyBalazsBarany 管理员,版主,员工,RapidMiner认证分析师,RapidMiner认证专家职位:930独角兽
    我还在/Community Data Science下的9.5存储库中添加了这个过程。乐鱼平台进入(扩展示例…)
    Pavithra_Rao sgenzer Jasmine_
  • 生活生活 成员职位:4贡献我
    嗨,Balazs,我用你的geoscript和geotools的压缩库创建了很多groovy脚本。自从2016年您来到墨尔本,向我们(TCA)提供地理脚本库包以来,这些流程一直在发挥作用。现在看来,将这些jar文件添加到Rapidminer studio/lib文件夹中会导致sql连接器在最新版本9.10.008中失效。是否有一个修改后的库包,我可以使用它来继续使用groovy脚本中的进程?

    奇怪的是,它还在9.10.001工作室版上运行。然而,当在AI Hub上执行时,在9.10.001版本上有一个连接到sql数据库的问题-在执行期间1小时45分钟后抛出以下错误:java.lang.IllegalAccessError:试图从类com.microsoft.sqlserver.jdbc.SQLServerDriver访问类com.microsoft.sqlserver.jdbc. sqlserverdriverproperty。

    Rapidminer支持建议我升级到9.10.008,但是当我添加geoscript jar文件包时,sql连接中断了。任何帮助都将非常感激。请注意,我还开发了使用geohash和插值的脚本,以便更快地进行数据匹配,因此我确实需要继续使用使用geoscript的groovy脚本(除非也有geohash和插值操作符作为扩展)。
  • BalazsBaranyBalazsBarany 管理员,版主,员工,RapidMiner认证分析师,RapidMiner认证专家职位:930独角兽
    @ivane

    很高兴这么久没接到你的电话。

    我最近没有更新geotools和geoscript。然而,我正在积极使用GeoProcessing扩展,它应该有更新的库,访问MySQL和PostgreSQL数据库在最新的Studio中不是问题。我没有MS SQL测试。

    我想将geo*库jar逐个更新到当前版本是最好的方法。也许一些常见的日志或实用程序库太旧了,它在Studio启动时被加载,然后MSSQL驱动程序崩溃。

    问候,
    Balazs
  • 生活生活 成员职位:4贡献我
    @BalazsBarany

    我设法在不破坏sql连接器的情况下使geoscript工作—我只在包中的142个jar文件中添加了下面的113个jar文件。sql连接仍然有效(无论是在工作室和AI中心)

    bufr-4.6.2.jar
    c3p0-0.9.1.1.jar
    cdm-4.6.2.jar
    commons-beanutils-1.7.0.jar
    commons-dbcp-1.4.jar
    commons-jxpath-1.3.jar
    commons-pool-1.5.4.jar
    core-0.26.jar
    伊斯特伍德- 1.1.1 - 20090908. - jar
    ecore-2.6.1.jar
    ehcache-1.6.2.jar
    fop-0.94.jar
    gdal-1.11.2.jar
    geodb rc2.jar——0.7
    GeographicLib-Java-1.44.jar
    geoscript-groovy-1.6.0.jar
    gt-api-14.0.jar
    gt-app-schema-resolver-14.0.jar
    gt-arcgrid-14.0.jar
    gt-brewer-14.0.jar
    gt-complex-14.0.jar
    gt-coverage-14.0.jar
    gt-coverage-api-14.0.jar
    gt-cql-14.0.jar
    gt-css-14.0.jar
    gt-data-14.0.jar
    gt-epsg-wkt-14.0.jar
    gt-geobuf-14.0.jar
    gt-geojson-14.0.jar
    gt-geopkg-14.0.jar
    gt-graph-14.0.jar
    gt-grassraster-14.0.jar
    gt-grid-14.0.jar
    gt-gtopo30-14.0.jar
    gt-jdbc-14.0.jar
    gt-jdbc-h2-14.0.jar
    gt-jdbc-mysql-14.0.jar
    gt-jdbc-postgis-14.0.jar
    gt-jdbc-spatialite-14.0.jar
    gt-main-14.0.jar
    gt-metadata-14.0.jar
    gt-ogr-core-14.0.jar
    gt-ogr-jni-14.0.jar
    gt-opengis-14.0.jar
    gt-process-14.0.jar
    gt-process-feature-14.0.jar
    gt-process-geometry-14.0.jar
    gt-process-raster-14.0.jar
    gt-property-14.0.jar
    gt-referencing-14.0.jar
    gt-shapefile-14.0.jar
    gt-swing-14.0.jar
    gt-transform-14.0.jar
    gt-wfs-ng-14.0.jar
    gt-wms-14.0.jar
    gt-xml-14.0.jar
    gt-xsd-core-14.0.jar
    gt-xsd-fes-14.0.jar
    gt-xsd-filter-14.0.jar
    gt-xsd-gml2-14.0.jar
    gt-xsd-gml3-14.0.jar
    gt-xsd-kml-14.0.jar
    gt-xsd-ows-14.0.jar
    gt-xsd-sld-14.0.jar
    jai_codec-1.1.3.jar
    jai_core-1.1.3.jar
    jai_imageio-1.1.jar
    json-simple-1.1.jar
    jsr - 275 - 1.0 - beta - 2. - jar
    jt-affine-1.0.6.jar
    jt-algebra-1.0.6.jar
    jt-attributeop-1.4.0.jar
    jt-bandcombine-1.0.6.jar
    jt-bandmerge-1.0.6.jar
    jt-bandselect-1.0.6.jar
    jt-binarize-1.0.6.jar
    jt-border-1.0.6.jar
    jt-buffer-1.0.6.jar
    jt-classifier-1.0.6.jar
    jt-colorconvert-1.0.6.jar
    jt-colorindexer-1.0.6.jar
    jt-contour-1.4.0.jar
    jt-crop-1.0.6.jar
    jt-errordiffusion-1.0.6.jar
    jt-format-1.0.6.jar
    jt-iterators-1.0.6.jar
    jt-jiffle-language-0.2.0.jar
    jt-jiffleop-0.2.0.jar
    jt-lookup-1.0.6.jar
    jt-mosaic-1.0.6.jar
    jt-nullop-1.0.6.jar
    jt-orderdither-1.0.6.jar
    jt-piecewise-1.0.6.jar
    jt-rangelookup-1.4.0.jar
    jt-rescale-1.0.6.jar
    jt-rlookup-1.0.6.jar
    jt-scale-1.0.6.jar
    jt-stats-1.0.6.jar
    jt-translate-1.0.6.jar
    jt-utilities-1.0.6.jar
    jt-utils-1.4.0.jar
    jt-vectorbin-1.0.6.jar
    jt-vectorbinarize-1.4.0.jar
    jt-vectorize-1.4.0.jar
    jt-warp-1.0.6.jar
    jt-zonal-1.0.6.jar
    jt-zonalstats-1.4.0.jar
    jts-1.13.jar
    net.opengis.fes-14.0.jar
    net.opengis.ows-14.0.jar
    net.opengis.wcs-14.0.jar
    net.opengis.wfs-14.0.jar
    netcdf4-4.6.2.jar
    BalazsBarany
  • c_cheec_chee 成员职位:18Maven
    上面写得不错。我可以确认一下以下情况是否可以做?假设我有一个静态几何体,例如一个度假村的边界。然后是不同的点的位置。这些点来自标记的动物传感器,它们会定期给出纬度和经度的读数。我是否可以使用上面的扩展,一次测试一个点,这个点是否已经越过了度假村的边界?

  • BalazsBaranyBalazsBarany 管理员,版主,员工,RapidMiner认证分析师,RapidMiner认证专家职位:930独角兽
    嗨!

    是的。越过边界意味着你有一个点在边界之外,然后在传感器的下一次读数中,它在里面。

    另一种表达相同的方法是将边界作为线串而不是多边形,并且两点合并为线串。然后你会在这些行串上使用“交叉”操作。但是不规则的形状可能会出现误报,所以我推荐第一种解决方案。

    问候,
    Balazs
  • c_cheec_chee 成员职位:18Maven
    嗨,是否有一些更简单的例子来展示如何使用地理处理跨越边界的问题?
    我从列为Lat,Long的数据开始
    例如:120.16006113532586 22.98360854837837
    120.1598941085565 - 22.98349548390813
    120.1599270061248 - 22.983467540620026
    120.1600903042156 - 22.983575467283245
    120.16006113532586 - 22.98360854837837

    我想在WKT中创建一个多边形——假设这允许我使用“计算几何关系”

    所以我使用ReadCSV ->坐标到几何。
    …希望将上面的latat, Long转换成POLYGON((12022,12022,12022,. ...))
    但相反,从坐标到几何的结果是:
    点(120.16006113532586 22.98360854837837)
    点(120.1598941085565 22.98349548390813)
    点(120.1599270061248 22.983467540620026)
    点(120.1600903042156 22.983575467283245)
    点(120.16006113532586 22.98360854837837)

    整体战略是否正确?如果是,上述部分如何解决?

    谢谢
登录注册置评。