arcgis与python_Arcgis-ModelBuilder和Python学习
老师的一个项目,需求如下:
1)arcgis版本使用9.2;
2)需要发布一个数据入库服务,第三方调用这个服务,就可以将“水窖”点位数据存入到服务器数据库中的“水窖”图层;
3)入库前需要检查“水窖”点位数据的合法性:
a.水窖点位是否在合理的区域内:水窖在县城范围内;
b.水窖编号的唯一性:水窖编号和数据库中的水窖记录编号不存在重复。
本项目中数据入库服务是通过ArcServer进行发布,由于考虑到开发时间和开发成本,数据入库服务不采用Web Service调用AO方式。
决定使用GP服务来实现数据入库:利用Arcgis ModelBuilder和Python脚本进行建模,模型需要实现以上的功能,然后将这个模型发布成一个GeoProsscessor服务,第三方调用这个GeoProsscessor服务就可以实现数据入库。思想如下:
条件1:水窖点位是否在合理的区域内:水窖在县城范围内
这个可以通过Arcgis ModelBuilder进行建模,对新添加的水窖点位数据和数据库中的县城图层进行叠加,如果水窖点落在县城范围内,就满足合理区域要求,允许存入到数据库。
条件2:水窖编号的唯一性:水窖编号和数据库中的水窖记录编号不存在重复
这个需要考虑录入新的水窖数据时,水窖的编号和数据库中的编号不能存在重复。如果新录入的水窖编号和数据库中的水窖编号相同,则覆盖数据库中的相同水窖编号的水窖记录。
一、条件1实现方式:ArcGIS建模
在Arcmap中进行建模,在toolbox上右键New Toolbox,添加一个新的工具箱,命名为“最终数据入库”
在“最终数据入库”上右键,新建一个模型,命名为CheckArea,编辑这个模型,模型视图如下
1)模型图的左上方,会理县界为数据库中的县界图层,FeatureSet是模型参数,为新输入的水窖点位图层,对两者进行叠加,得到“会理县界_Intersect.shp”,这个shape文件路径为in_memory\会理县界_Intersect.shp,说明这个shape文件是保存在内存中的(内存中的数据文件可以更快的读写)。
2)模型图的左下方,FeatureSet(新输入的水窖点位图层)和会理水窖(数据库中的会理水窖图层)进行Append操作,将新添加的水窖点位存入到数据库中的水窖图层中。
3)为第二步的Append操作设置前提,前提就是“会理县界_Intersect.shp”,如果这个图层存在,说明新添加的点位都在会理县界内,这时可以允许水窖点位数据入库,也就是可以允许Append操作。如果这个图层不存在,说明新添加的点不在会理县内,不允许入库,因此Append操作不会触发,并且返回一个“会理县界_Intersect.shp”前提不为真的错误。
4)当水窖数据入库完成后,也就是Append操作完成后,删除内存中的“会理县界_Intersect.shp”,删除操作以“会理水窖合并后”为前提,当这个图层生成完毕,也就说明数据入库完成,此时,可以删除“会理县界_Intersect.shp”图层了。
二、条件2实现方式:Python脚本编写
在“最终数据入库”上右键,Add->Script,
General选项卡下设置:
name:删除重复数据
label:删除数据库中的已存在的数据
Description:判断数据库中是否存在重复数据,如果存在删除重复数据
Source选项卡下设置:
Script File:D:\删除重复数据.py
Parameters选项卡下新建两个变量:
Display Name Data Type
NewPoint FeatureSet (定义Schema为数据库中的水窖图层)
CheckData Boolean
然后点击确定,编辑这个脚本:
检查重复数据.py
#coding=gbkimportwin32com.client,arcgisscripting'''将数据值写入到txt文件中'''defWriteDataToFile(value):
file_object=open('D://111.txt','w')
Svalue=str(value)
file_object.write(Svalue)
file_object.close()print'ok''''DeleteData()函数用于删除Mdb图层”S_Layer“中,S_Field字段下值为S_Value的地物数据
其中:S_Layer为图层名称
S_Field为主键字段
S_Value为主键字段值
注释:一个图层的数据在mdb下,主要对应S_Layer_SHAPE_Index和S_Layer两个表'''defDeleteData(S_Layer,S_Field,S_Value):
conn=win32com.client.Dispatch('ADODB.Connection')
DSN='PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=d:/sampledata/backupfinal.mdb;'conn.Open(DSN)
DeleteSQL1="delete from"+S_Layer+"_SHAPE_Index where IndexedObjectId in (select OBJECTID from"+S_Layer+"where"+S_Field+"= '"+S_Value+"')"conn.execute(DeleteSQL1)
DeleteSQL2="delete from"+S_Layer+"where"+S_Field+"= '"+S_Value+"'"conn.execute(DeleteSQL2)
conn.close()'''查找输入参数FeatureSet中的特定字段值,并删除数据库中已存在相同字段值的地物数据'''gp=arcgisscripting.create(9.3)try:
NewPointSet=gp.GetParameter(0)
rows=gp.SearchCursor(NewPointSet)
row=rows.Next()whilerow:
name=row.getValue('水窖编号')
SJname=str(name)
DeleteData('会理水窖','水窖编号',SJname)
row=rows.next()except:printgp.getmessages()
CheckData=True
gp.SetParameter(1,CheckData)
这个脚本就是查找FeatureSet中的水窖数据,提取出主键字段值,并删除数据库中含有相同字段值的数据。
三、建立一个模型命名为“最终入库检查”,将条件1的model和条件2的python组合在一起。
四、在Arcgis Server将这个模型发布为GP服务
1)登录ArcGIS Server Manager,点击左侧的Add new service:
Service Name:
Type:
Geocode Service
Geodata Service
Geometry Service
Globe Service
Geoprocessing Service
Image Service
Map Service
Description:
添加新的点位数据到水窖图层
2)单击next,选择Toolbox的存储位置:
A Toolbox:
Toolbox:
3)一直next,默认设置即可。
4)然后我们就可以看见AddDataToShuiJiao的GP服务发布完成。
五、在Arcgis Server中建立一个Application使用这个GP服务
1)在Manager中新建一个application:
Host
Web application Name:
Description:
Use settings from an existing site:
none
a1
Scyc3S
2)单击next,添加需要显示的图层。
3)单击next,单击Add Task,选择Geoprocessing Task,确定,然后点击Supporting Service,就可以看到刚才发布的AddDataToShuiJiao服务,选择“最终入库检查” 这个模型,点击Apply,然后点击next,一路默认到底。
4)在manager下发布这个application,勾选ToShuiJiao,然后单击Deploy。
5)登录这个Application,我的是http://WYF:8399/ToShuiJiao,然后单击Geoprocessing Task,就会出现在线数据录入界面。
arcgis与python_Arcgis-ModelBuilder和Python学习相关推荐
- GIS开发之二维地下管线综合管理系统(Arcgis)第三节 使用python和modelbuilder
GIS开发之二维地下管线综合管理系统(Arcgis)第三节 使用python和modelbuilder ArcGIS python使用 modelbuilder使用 在管网系统的功能中,高效的数据处理 ...
- 【专注学习】基于Arcgis的python学习1
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 [专注学习]基于Arcgis的python学习1 前言 一.主体思路流程? 二.需要用到的函数 1.清除所有变量 2.读入数据-loa ...
- 简明GISer Python学习指南
简明GISer Python学习指南 缘起 GISer学Python Python简介 学什么 学习资源 视频 图书 基础入门 进阶 高级(专业) 开发库 webGIS开发 遥感影像处理 爬虫 机器学 ...
- pygame是python的一个库吗,python学习pygame,,基本库导入impor
python学习pygame,,基本库导入impor 基本库导入 import pygame import sys from pygame.locals import * 初始化 pygame.ini ...
- python科学计数法转换_对比Python学习Go 基本数据结构
公众号文章不方便更新,可关注底部「阅读原文」博客,文章随时更新. 本篇是「对比 Python 学习 Go」[1] 系列的第三篇,本篇文章我们来看下 Go 的基本数据结构.Go 的环境搭建,可参考之前的 ...
- python学习------tab补全
python学习------tab补全 python也可以进行tab键补全 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #!/usr/bin/env ...
- Python学习day5作业-ATM和购物商城
Python学习day5作业 Python学习day5作业 ATM和购物商城 作业需求 ATM: 指定最大透支额度 可取款 定期还款(每月指定日期还款,如15号) 可存款 定期出账单 支持多用户登陆, ...
- Python学习系列(六)(模块)
Python学习系列(六)(模块) Python学习系列(五)(文件操作及其字典) 一,模块的基本介绍 1,import引入其他标准模块 标准库:Python标准安装包里的模块. 引入模块的几种方式: ...
- 最新Python学习项目Top10!
作者 | Mybridge 译者 | Linstancy 整理 | Jane 出品 | AI科技大本营 [导读]过去一个月里,我们对近1000个Python 学习项目进行了排名,并挑选出热度前10的项 ...
最新文章
- 如何为ccflow工作流引擎增加一个优先级PRI?
- php无限极分类并添加指定值,PHP实现无限极分类的两种方式,递归和引用
- 不清楚 spring 的这几个知识点,面试直接挂了!
- Hadoop2.7.6在Windows7单机部署
- python安装缺少api怎么办_请问缺少win32api模块该如何解决?
- 进程调度算法 C++实现
- 教师新学年工作愿景_新学年的3个创新开源项目
- 关于myeclipise注册机run.bat运行失败的解决方法
- 同事经常蹭我的车,我该怎么拒绝?
- 坐飞机也能享受百兆宽带了,这个技术是怎么实现的?
- [android开发IDE]adt-bundle-windows-x86的一个bug:无法解析.rs文件--------rs_core.rsh file not found...
- 亲测可用sqlyog激活注册码
- 高中计算机教室标语,高中教室布置标语
- 薛定谔的猫、量子纠缠、和量子计算机
- C++操作Excel表格
- 论文笔记:Attention U-Net: Learning Where to Look for the Pancreas
- lambda表达式的3种写法
- Unity Render Streaming 云渲染
- 【Leetcode】精选算法top200道(二)
- 微信小程序使用crypto.js加密解密
热门文章
- 1.3 Java二维数组详解
- 1.3 字符编码介绍
- 3.2.1 虚拟内存的基本概念
- docker之网络访问
- YAML 在Python中的配置应用
- FastDFS配置nginx插件访问图片
- python中输入提示_Python-Tkinter Text输入内容在界面显示的实例
- noteexpress 笔记导出_【在库言库】2019年第7期 科研工具——NoteExpress文献管理软件...
- activiti的processEngine空指针异常
- java基础(十) 数组类型