零,应用场景

刚刚接触arcgis不久,最近有需求增量同步其他数据库的地理数据到arcgis server 使用的sql server数据库中,升级为Geodatabase的sqlserver数据库不方便直接往数据表中更新数据,更新数据只能通过其预制的存储过程(猜想),提供的feature access接口,或者重新发布更新后的要素,要从其他数据库自动同步数据到已经发布的图层,本文介绍一种kettle+feature access的方案。

为什么用kettle呢?1. 快,接触水壶两天就走通技术路线了;2.能够Post;3.水壶好像很受欢迎。

feature access提供的rest api有增删查改操作,怎么发布feature access服务这里就不再描述,可以参考arcgis文档。

feature access REST接口

增量同步数据的具体需求尚不明确,但无非是:1,只更新,2,只新增,3,更新又新增,4,增删改,这个以后再深入探讨,本文主要讨论通过kettle的post请求功能来进行要素的同步。

本文将从kettle小白的角度实现一个简单的技术demo,有待完善的地方欢迎一起研究。

一,kettle安装

kettle是一款不错的ETL工具,可以省下写原生代码进行ETL的功夫。

首先下载kettle,下载页在这里:下载页,找到Downloads下载即可。

下载页

下载完毕,解压压缩包,双击运行Spoon.bat就可进入kettle的可视化操作界面,忘了说了,要想使用kettle得先准备好java环境,本人使用的是64位jdk1.8.1,如果启动过程出现问题可以使用SpoonDebug.bat进行启动,然后检查SpoonDebug.txt进行排错。

调试工具

二,数据库连接和表输入

进入勺子(Spoon.bat),新建一个“转换(transformation)”任务,这个“转换”就负责执行我们同步数据的具体流程。新建“表输入”,在“编辑”中设置好数据库连接(这里以mysql为例),

数据库连接

设置好数据库字符集,不设置字符集可能导致乱码,

设置字符集

点击“获取SQL查询语句”选择需要导入的表和选择需要同步的字段,在增量更新的应用场景中需要在SQL中限制数据的更新日期或创建日期,并使用kettle记录最近一次同步的日期,这个以后再讨论。这里可以限制从表导入的数据的行数。

数据选择

三,POST请求参数的封装

在“转换”中新建一个JavaScript脚本,然后按住Shift从刚刚建立的“表输入”中拖拉一个箭头指向JS脚本,这个箭头将表输入的数据传输给JS脚本,一行一行地传输的,因此在JS脚本中是一行一行地处理的(有多行同时处理的方法吗?)。

JS脚本建设

通过这个JS脚本完成下一步POST请求的参数的封装,这里需要查看一下Feature Access接口的API Reference,在熟悉Kettle之前建议先使用Postman确认接口参数的正确性。本文以新增要素(Add Features)功能作为示范,这个接口是可以同时更新多个要素的,但是由于JS脚本是一条一条处理数据的(由于懒),本文示范一条一条地POST。在这里我们拼装features(待更新要素),f(返回值格式),rollbackOnFailure(失败后回滚)三个参数。其中features参数的拼装最为麻烦,需要将数据放入json,然后再调用JSON.stringify(str);。

API REFRENCE

KETTLE中JS脚本的流程是输入一行数据,经过一番处理后指定输出的字段,JS脚本将指定的字段通过箭头输出到下一步操作。左侧红框内是上一步输入到该步的数据,可以在脚本中直接操作,下面红框是指定的输出字段,这些字段将输出到下一步作为参数。我们也将POST请求的URL和Header在这里生成。“获取变量”按钮可以自动从代码中指定输出字段,同时还可以自动检查语法错误。

JS脚本

四,每一条记录POST的设置

加入一个“Http Post”任务,或者“Rest Client”也可以,从上一步拉出箭头来接上。

Post参数传递

从上一步输入的字段中选择好请求地址,设置好字符集,在Output fields里面指定该步骤输出字段的名称,后面日志输出要用。

General设置

点击进入Fields,设置好请求的参数,设置好Header参数。注意请求的参数名要和Feature Access中参数名对应哦。

POST参数的Mapping

五,POST结果当做日志输出

新建“文本文件输出”,从上一步输入“result”字段作为日志内容。

更新日志的输出

选择好存放的文件夹,扩展名,本案例中其他参数使用默认就行了。

文本输出

在“字段”中选择输出到日志中的字段,该文本将会累计所有的行的日志并将它们一口气输出为一个文件。调试过程中日志的打印尤其关键。

字段输出

六,测试结果

完成,调试一条数据,成功运行!是不是很方便呢,比徒手写原生代码同步快多了。

总体过程

测试1000条数据,耗时16.4秒。这个案例每一条数据post一次,在生产环境中可以积累所有的数据post一次完成。

运行记录

数据源字段如图,来源百度地图POI。

数据源

更新结果可以马上在arcgis server 中查看。

效果

七,OVERVIEW

乱码问题:

在调试中遇到数据提交到sqlserver乱码的情况,最后检查为Arcgis Server内置Tomcat配置的问题,折腾了半天加上一段配置解决问题。

Tomcat配置

重复并作为本地程序运行:

作为本地程序(或服务)更轻便,更方便启停。

在勺子中建立一个job,job中调用刚刚创建的转换,在START设置循环时间:

循环时间

同步前检查网络状况,同步结束后将日志发送到邮箱内。

检查网络,发送邮件

新建一个批处理程序(.bat),编辑内容如下(根据实际情况修改盘符和kitchen.bat所在位置):d:

cd D:\data-integration

kitchen /file:D:\data-integration\samples\jobs\firstjob.kjb

也可以通过命令行运行该job:

参考文献

总结:

第一次写技术文章,刚刚上手kettle两天还不知道怎么一次处理多行数据,后面会继续记录使用kettle进行增量同步的过程。

poi数据导入arcgis_借助kettle(PDI)的POST功能同步POI到arcgis server注册数据库相关推荐

  1. JAVA语言(POI数据导入导出Excel)

    POI数据导入导出Excel(样式可以自己设置) //----------------------------Controller层 --------------------------------- ...

  2. poi数据导入arcgis,结合POI数据的道路自动选取方法

    关键词: 道路自动选取, POI数据, 语义特征, 地图综合 Abstract: People's cognition of the importance of roads is closely re ...

  3. Java 实现数据库数据 导入 导出成Excel文档的功能

    1.创建导入 导出工具类,写入其导入和导出方法 导出成外部文件: public static ResponseEntity<byte[]> emp2Excel(List<Emp> ...

  4. WSUS2.0数据导入、导出(备份、还原)

    以前我们做的WSUS实验都是让WSUS服务器通过互联网连接到微软网站去下 载更新补丁,但是现实的生活中有些网络是与互联网隔绝的,这种情况下可以采用导入导出WSUS数据的方法来解决WSUS的更新问题.先 ...

  5. 实用工具|零代码实现高德地图POI数据下载

    1 工具获取方式 点击下面链接,即可获取地理坐标系转换工具 地理坐标系转换工具 2 工具介绍 高德地图POI数据下载工具(下文称该工具)是一款能够让用户在不写代码的前提下实现高德地图POI数据批量下载 ...

  6. 百度地图POI数据爬取,突破百度地图API爬取数目“400条“的限制11。

    1.POI爬取方法说明 1.1AK申请 登录百度账号,在百度地图开发者平台的API控制台申请一个服务端的ak,主要用到的是Place API.检校方式可设置成IP白名单,IP直接设置成了0.0.0.0 ...

  7. hive 数据导入 导出

    目录 hive outline 数据导入hive 本地文件 1. 加载本地文件studet.txt到hive默认数据库student表中(拷贝+追加) 2. 加载本地文件studet.txt到hive ...

  8. 【数据分享】2022年11月西南地区POI数据分享(重庆、四川、贵州、云南、西藏)

    一.数据概况 今天分享一份西南地区的POI数据,包含重庆市.四川省.贵州省.云南省.西藏自治区5个省级行政区. 数据时间为2022年11月,坐标系是GCJ-02. 较2022年3月的POI数据,5个区 ...

  9. 使用python爬取高德POI数据,并转换为WGS84经纬度坐标的点矢量

    一,爬取高德POI数据(高德开放平台接口+ Python) 参考记者博客https://blog.csdn.net/hxx099/article/details/88974264 1,申请高德开放平台 ...

最新文章

  1. html设置 header,http设置header
  2. iBatis学习网站推荐
  3. python输入数字翻译成星期几-Python练习笔记——计算输入日期为改年的第几天、星期几...
  4. ios开发text kit_iOS富文本(三)深入使用Text Kit
  5. [20180428]DNS与ORA-12154错误.txt
  6. python二分法查找时间点_python有序查找算法:二分法
  7. 循环遍历java属性_java中循环遍历实体类的属性和数据类型以及属性值
  8. 01、静态工厂方法替代构造器
  9. 红黑树(Red Black Tree)
  10. (转)比特币有了定价模型?过去四年94%的价格波动可由此解释
  11. elk日志管理系统搭建
  12. Keil 保护视力背景颜色设置和代码的颜色设置
  13. 什么是SVG?及SVG引入方式
  14. 想找Java项目练手,却不知道从哪找?
  15. 基于微信小程序的游戏账号交易小程序
  16. INSERT INTO SET
  17. 【创建Vue手脚架项目】
  18. 如何用Qt抠一个圆形头像出来
  19. linux rsync排除目录,如何从rsync中排除文件夹
  20. 仙之侠道2玖章各个任务详情_仙之侠道2玖章给Z武器的任务 | 手游网游页游攻略大全...

热门文章

  1. 苹果A10芯片挑战英特尔?有点早但是值得关注
  2. python隐式类型转换_python隐式转换_Python | 数据类型的转换 显式转换 隐式转换
  3. 按照打印机会多出来一个副本_安装打印机驱动后为什么出现副本?
  4. 先导知识:SV中需要了解的基础的面向对象编程的概念
  5. 【深度学习】OCR文字识别—基于CTC/Attention/ACE的三大解码算法
  6. 技术和商业的碰撞,谈阿里云与天猫双11这十年 1
  7. 供应链单据套打设置保存提示:未知错误,activeX部件不能创建对象,组件跟踪到:Kingdee.K3.ExcelPrint.ComLibary.dll
  8. 猫眼APP注册界面布局
  9. 【HEC-RAS】2D模型初步介绍(2)--创建二维网格
  10. PVCBOT【6号】光能比目鱼--太阳能翻跟斗机器人