FME可以使用开源Gisgraphy服务(使用geonames和openstreetmap数据)对地址记录进行地理编码。当我们在本文中提到地理编码时,我们的意思是获得已知地址的纬度和经度。
“啊!GRID_HEIGHT = " 50 " # !TITLE =“GeoCodeGisgraph.fmw”# !显示_bookmarks=“true”!max_log_features=“200”!EndoTcl =“”FME_BUILD_NUM = " 13262 " # !ZOOM_SCALE = " 100 " # !类别=“”REDIRECT_TERMINATORS = "没有" # !法律条款FME_reprojection_engine=“FME”!用法=使用提示和运行输入单个地址
或
用包含地址属性的源数据集替换creator
您需要提供以下属性——如果需要,使用属性重命名器和各种字符串转换器来重新格式化地址
StreetAddress
西蒂
国家(必须是两个字母的国家代码)
“啊!“Pythython =”“!”历史= " 23网络连接
“啊!BEGIN_TCL = " " # !显示_annotations=“true”!查看_page_breaks=“false”!IGNORE_READER_FAILURE = "不" # !警告_invalid_xform_param=“yes”!>!一编码= US_ASCII单机= 不? 几何学 无效的 几何学 )工厂def$(创建者_经典)创意工厂_name创建者_经典_创建者$(创建者d)$(创建者coords)创造_端无输出特征_类型\\\\uuuuuuuuu\\\\\\\\\\\\\\\\\\\\\\\\\实例“输出功能_type creator_created@tcl2(creator_coordsysremover)@coordsys()fme_feature_type creator---------------------------------------tcl2 proc attributecreator_f117b684_15ce_40be_8019_69513b9258997_attrsetter attrlist set attrlist[字符串修剪$attrlist()]”设置attrs[拆分$attrlist,];foreach attrname attrval$attrs if[字符串匹配{* *} $attrName] == 1} {set attrName [FME_Execute EvaluateExpression {STRING} $attrName {AttributeCreator}];{set attrName [FME_DecodeText $attrName];};如果{[字符串匹配{* *} $attrVal] == 1} {set attrVal [FME_Execute EvaluateExpression {STRING_ENCODED} $attrVal {AttributeCreator}];};fm_setattribute$attrname[fm_decodetext$attrval];};};factory_def*teefactory factory_name attributeCreator input feature_type creator_created output feature_type attributeCreator_output“@tcl2(attributeCreator_f117b684_15ce_40be_8019_69513b9258997_attrsetter(streetaddress,$(address),city,$(city),country,$(country),baseurl,$(geocoding_baseurl))”,“-------------------------------————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————--lookup attributeValueMapper_lookup_table antigua 和 阿拉伯巴布达公司 波斯尼亚酋长国 和 开曼群岛黑塞哥维那 中国肯塔基群岛 P.Rep。中国Cocos 岛屿CC做饭 岛屿CK科斯塔 里卡捷克 捷克共和国多米尼加 雷普尔德埃尔 萨尔瓦多SV福克兰 岛屿 马尔维纳斯 法洛 佛罗里岛 法属波利尼西亚 圭亚那GF格鲁吉亚 共和国 的 通用电气象牙 海岸CI马歇尔 岛屿mh neth. 安的列斯一个新的 新喀里多尼亚 新几内亚PG新 新西兰诺福克 北纳法岛 韩国KP俄罗斯 联合俄罗斯圣 克里斯多福 和 尼维斯肯桑 马里诺SM沙特 阿拉伯山山脉 利昂·萨尔·所罗门 南部岛屿某人 非洲扎南 韩国KR SRI 斯里兰卡路。 圣卢西亚LC。 文森特 格林纳丁斯群岛VC的 巴哈马群岛BS土耳其人 和 凯科斯 岛屿TC曼联 王国GB瓦努阿图 新的 赫布里底斯 梵蒂冈 西蒂 状态 神圣的 见 弗吉尼亚州越南 南VN处女 英国 阿尔巴尼亚、阿尔及利亚、安道尔、安哥拉、安圭拉、阿根廷、亚美尼亚、阿鲁巴、澳大利亚、奥地利、阿塞拜疆、阿兹、巴林、孟加拉国、巴巴多斯、白俄罗斯、比利时伯利兹BZ百慕大BM玻利维亚博茨瓦纳BW巴西BR文莱BN保加利亚BG柬埔寨KH喀麦隆CM加拿大CA乍得TD智利CL中国香港哥伦比亚公司刚果CD克罗地亚HR古巴cu塞浦路斯cy捷克斯洛伐克cs丹麦dk多米尼加dm厄瓜多尔ec埃及例如爱沙尼亚ee埃塞俄比亚et斐济fj芬兰fi法国fr gabon ga冈比亚gm德国de加纳gh直布罗陀gi希腊格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵兰格陵意大利IT牙买加JM日本JP约旦JO哈萨克斯坦KZ肯尼亚KE科威特KW吉尔吉斯斯坦KG老挝LA拉脱维亚LV黎巴嫩LB利比里亚LR利比亚LY列支敦士登LI立陶宛LT卢森堡LU澳门莫马其顿MK马达加斯加MG马拉维MW马来西亚MY马里ML马耳他MT马提尼克MQ毛里塔尼亚MR毛里求斯MU墨西哥MX摩尔多瓦MD摩纳哥MC摩洛哥MA缅甸MM纳米比亚NA尼泊尔NP NETherlands nl nicargua niger ne nigeria ng norway no oman om pakistan pk palau pw巴拿马pa巴拉圭py秘鲁pe菲律宾ph波兰pl葡萄牙pt卡塔尔qatar qa罗马尼亚ro塞内加尔新加坡、斯洛伐克、斯洛文尼亚、西班牙、苏丹、苏里南、斯威士兰、瑞典、瑞典、瑞士、叙利亚、台湾、坦桑尼亚、泰国、特立尼达 多巴哥、突尼斯、土耳其和苏联ENCODED_SUPPORTUNICODEFACTORY_DEF * TeeFactory FACTORY_NAME AttributeValueMapper INPUT FEATURE_TYPE AttributeCopier_OUTPUT OUTPUT FEATURE_TYPE AttributeValueMapper_OUTPUT @Lookup(attributevaluemapper_table,"Country",FORWARD|ENCODED_ATTR,国家)# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -FACTORY_DEF * TestFactory FACTORY_NAME测试输入FEATURE_TYPE AttributeValueMapper_OUTPUT测试StreetAddress NOT_ATTRIBUTE_IS_EMPTY 已编码的测试国家NOT_ATTRIBUTE_IS_EMPTY 编码的测试城市NOT_ATTRIBUTE_IS_EMPTY 编码布尔值_operator and output passed feature_type tester_passed output failed feature_type tester_failed------------------------------------------------------------------设置指令以将所有元属性添加到功能。我们这样做是为了让用户在查看的features.reader_meta_a中看到所有可能的信息。属性fme_feature_type fme_dataset fme_basename假设工作区临时目录已经设置和创建。ControlDefs::writeVisualizerTempDirDEFAULT_MACRO WORKSPACE_TEMP_DIRINCLUDE [if {[string length {}] > 0} {set catter "";逗号””;{}{设置catter "$catter$comma@Value(\"$attr\")";设置逗号“_”;};放入“macro catmac_@concatenate($catter)”;} else{放置“宏CATMAC”;};设置安全亚搏在线名称“[regsub -all {[^a-zA-Z0-9]} {MissingData} _]_[expr round(rand() * 1000000)]_[时钟点击-毫秒]”;输入“宏SAFE_FFS亚搏在线_NAME $safeName”;]# Make the temporary directory that the FFS files will live in.FACTORY_DEF * CreationFactory FACTORY_NAME MissingData_DirCreator OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}")FACTORY_DEF * TeeFactory FACTORY_NAME MissingData_DirCreatorCleanerUpper INPUT FEATURE_TYPE __nukeme__# Send raster,点云和矢量功能沿不同路径向下,以准备它们用于查看工厂定义测试工厂名称MissingData功能控制器输入功能测试失败&FME类型=“FME光栅”输出失败功能输出失败功能输出类型MissingData功能输出通过功能输出类型MissingData功能工厂定义*测试工厂名称MissingData_uuuu FeatureDirector1输入功能_u Type MissingData_uuuu NotrasterFeatures_uuuuuuuu Test&fme_Type==“FME_Point_Cloud”输出失败功能_Type MissingData_uuuuuuuuuuu VectorFeatures_uuuuuuuuuu输出传递功能_u Type MissingData_uuuu PointCloudFeatures_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu矢量功能可能会简单地覆盖它们的颜色Enfactory_def*teefactory factory_name missingdata_vectorsetter upper input feature_type missingdata_uuu vectorfeatures_uuuuuuuu output feature_type_uuuuuuviewme_uuuuuuuuuuuuu点云功能可能需要细化,请注意,我们不直接调用thinpointcloud功能,而是通过TCL来实现。这应允许此变压器与台式机许可证一起使用,even though ThinPointCloud requires Professional.Tcl2 proc MissingData_5d7278e5_0fff_48f2_912f_472b44ca3a6f6_thinPointCloud {} { if {[string equal {NO_THINNING} {KEEPNPOINT}]} { FME_Execute ThinPointCloud NO_THINNING ;如果{[string = {no_thin} {MAXNUMPOINTS}]} {FME_Execute ThinPointCloud no_thin ;{FME_Execute ThinPointCloud no_细化 ;}elseif[字符串等于无减薄最后一个点]fme执行thinpointcloud无减薄 ;};}工厂_def*te工厂_name Missing数据UUU点云稀释剂输入功能_type Missing数据UUU点云功能\UUUU\\Uuuuuviewme uu@tcl2(“Missing数据d7278e5_0fff U 48f U 912f U 472b44CA3a6f6_Thi点云”)Tcl2 proc Missing数据U 5d7278e5 U 0fff U 48f U 48f U 48f U 912F U 472b444444ca3a3a3a3a6f6 U PrePrepar擦除器123;子集合子集合行subsetstartcol subsetnumcols set usedi[string equal-nocase$(fme_viewer_app)fmedatainspector];如果{!$usedi fme_执行applyrasterrotation双线性;};设置doResample [string equal {NoReduction} {Resample}];设置do子集[string = {NoReduction}{子集}];设置多边界[字符串等于noreducation boundingboxonly];{FME_Execute GeometryType fme_polygon;}elseif$doresample$dosubset设置注释首先,我们需要给所有属性加上前缀。这是因为我们要调用@rasterproperties,我们要确保它不会覆盖任何现有的属性。};设置kattrPrefix“.”;设置allNames [FME_AttributeNames];{设置newName $kAttrPrefix;追加newname$oldname;fme_renameattribute$newname$oldname;};执行光栅属性;如果$doresample设置oldnumcols[fme_getattribute _num_columns];设置oldNumRows[fm_getattribute_num_rows];设置oldSpacingX [FME_GetAttribute _spacing_x];设置oldSpacingY [FME_GetAttribute _spacing_y];设置kMinNumCells 32;设置kmaxnumcells 512;set comment{我们只会在两个维度都大于最小num单元格时重新采样,至少有一个大于最大值。};如果$oldNumRows>$kminNumCells&$oldNumCols>$kminNumCells&($oldNumRows>$kmaxNumCells$oldNumCols>$kmaxNumCells)设置newspacingX 1.0;将newspacingY设置为1.0;如果$oldNumRows>$oldNumCols设置注释如果行多于列,我们需要选择一个间距,将行数减少到我们选择的最大值。};设置newSpacingY [expr 1.0 * $oldNumRows * $oldSpacingY / $kMaxNumCells];设置newSpacingX [expr 1.0 * $newSpacingY / $oldSpacingY * $oldSpacingX];设置注释现在我们需要检查这样做是否会导致列低于最小值。如果是这样,选择间距,这样我们只会下降到最小值(而不是过去)。};设置newnumcols[expr$oldnumcols*$oldspacingx/$newspacingx];如果{$newNumCols < $kMinNumCells} {set newSpacingX [expr 1.0 * $oldNumCols * $oldSpacingX / $kMinNumCells];设置newSpacingY [expr 1.0 * $newSpacingX / $oldSpacingX * $oldSpacingY];};}否则设置注释这与上述情况相同,除了行和cols的角色是相反的。};设置newSpacingX [expr 1.0 * $oldNumCols * $oldSpacingX / $kMaxNumCells];设置newSpacingY [expr 1.0 * $newSpacingX / $oldSpacingX * $oldSpacingY];设置newNumRows[expr$oldNumRows*$oldSpacingy/$newSpacingy];如果$newNumRows<$kminNumCells设置newSpacingy[expr 1.0*$oldNumRows*$oldSpacingy/$kminNumCells];设置newSpacingX [expr 1.0 * $newSpacingY / $oldSpacingY * $oldSpacingX];};};FME_Execute ResampleRaster CELL_SIZE $newSpacingX $newSpacingY最近邻;};{set comment{获取一些字符串的值,这些字符串可能是属性或常量。请注意,我们传递了正在使用的属性前缀,因为如果一个结果是一个属性,它实际上不是字符串中的确切名称(因为我们在上面重命名了所有属性)。};设置rasternumrows[fme_getattribute_num_rows];设置rasternumcols[fm_getattribute_num_columns];设置注释仅当指定的开始位置实际在光栅内时才进行子集设置。};如果{$subsetStartRow < $rasterNumRows && $subsetStartCol < $rasterNumCols} {set comment{现在将子集绑定到栅格的大小,这样我们就不会创建填充。};{set subsetNumRows [expr $rasterNumRows - $subsetStartRow];};{set subsetNumCols [expr $rasterNumCols - $subsetStartCol];};fme_execute substraster$substratstarrow$substratnumrows$substratstartcol$substratnumcols;};};设置comment删除@rasterproperties添加的所有属性,并从实际属性中删除前缀。我们假设它们都以下划线开头。};fme_regexp_match {^_};{设置newName $kAttrPrefix;追加newname$oldname;fme_renameattribute$旧名称$新名称;};};}工厂定义*teefactory工厂名称MissingData_RasterSetter上输入功能_Type MissingData_uuRasterFeatures_uuuuuuuuuuOutput Feature_Type_uuuViewMe_uuuuuuuu@tcl2(“MissingData_5d7278e5_0fff_48f2_912f_472b44ca3a6f6_Prepareraster{ }{ }{ }{ 现在把所有的功能都路由到记录器中,changing their# feature type to the transformer name so that they view nicely# MissingData_5d7278e5_0fff_48f2_912f_472b44ca3a6f6_VIS_FEAT_TYPE changes the feature types# of the features being visualized.DEFAULT_MACRO MissingData_5d7278e5_0fff_48f2_912f_472b44ca3a6f6_VIS_FEAT_TYPE MissingData$(CATMAC)DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/$(亚搏在线SAFE_FFS_NAME).ffsDEFAULT_MACRO VISUALIZER_CREATE_SPATIAL_INDEX NOFACTORY_DEF * RecorderFactory FACTORY_NAME MissingData_Recorder INPUT FEATURE_TYPE __viewme__ _wb_termination_feature Yes @FeatureType(TERMINATOR_@Value(_wb_termination_xformer)) INPUT FEATURE_TYPE __viewme__ @FeatureType($(MissingData_5d7278e5_0fff_48f2_912f_472b44ca3a6f6_VIS_FEAT_TYPE)) FEATURE_FILE "$(VISUALIZER_FEATURE_FILE)" CREATE_SPATIAL_INDEX "$(VISUALIZER_CREATE_SPATIAL_INDEX)" INSPECTOR "$(VISUALIZER_CREATE_SPATIAL_INDEX)" FSC_SCHEMA _creation_instance,varchar 255 ,街道地址,varchar 255 锡蒂 255 、国家、varchar 255 ,基URL,varchar 255 模式记录-----------------------------------------------------------Tcl2 proc stringconcatenator_9dc172a3_c23c_4ebe_b1e1_4405c69f5b367_doseattr attrtext fme_setattribute[fme_decodext geocodingurl][fme_decodext$attrtext]factory teefactory name stringconcatenator input feature_type tester_pasSED输出特性_type stringconcatenator_output@tcl2(“stringconcatenator_9dc172a3_c23c_4ebe_b1e1_4405c69f5b367_doseattr@evaluateexpression(string_encoded, 价值 BaseURL 地址= 价值 StreetAddress 价值 西蒂 国家= 价值 国家 ,StringConcatenator)“)-----------------------------------------------------------动态_函数_配置http httpfetcher_http_请求请求_头http_用户名“”http_密码“”http_authmethod基本代理\u url代理\u端口代理\u用户名“”代理\u密码“”代理\u authmethod基本使用\u recv_header_encoding no saved_headers_attr“_headers”status_code_attr“_http_status_code”continue_on_error no use_cookies no factory_def*teefactory factory_name httphetcher input feature_type stringconcatenator_output feature_type httphetcher_output@http(get,@EvaluateExpression(字符串_编码, 价值 地理编码URL HTTPFetcher),“URL_内容”,HTTPFetcher_http_request) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -FACTORY_DEF * XFMapFactory FACTORY_NAME XMLFlattener输入FEATURE_TYPE HTTPFetcher_OUTPUT XML_STREAM“_url_contents XFMAP_FEATURE_PATHS_EXPRESSION XFMAP_FEATURE_PATHS_STRUCTURE“结果 结构 分隔符= .map-empty-elements = 是的matched-prefix = 属性匹配的属性= 是的匹配的祖先属性= 基数= +? 除了 structure-prefix = child-position-attribute = 属性标识符= !—— 这个 选项 在这里 允许 定制 属于 这个 属性 和 属性 列表 属于 这个 匹配的 XML 子树 那个 将 是 添加 来 FME 特性。 在这里 是 这个 后 选项 那个 可以 是 明确规定: 1. 分隔符 这个 价值 属于 这 选项 是 习惯于 作为 这个 分隔符 在 这个 命名 属于 这个 属性 属于 这个 孩子们 属于 这个 匹配的 元素。 默认的 价值观: . 可能的 价值观: 任何 一串 2。 映射空元素 如果 集 来