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脚本编写
import win32com.client,arcgisscripting
'''
将数据值写入到txt文件中
'''
def WriteDataToFile(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两个表
'''
def DeleteData(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()
while row:
name=row.getValue('水窖编号')
SJname= str(name)
DeleteData('会理水窖','水窖编号',SJname)
row = rows.next()
except:
print gp.getmessages()

| Service Name: | |
| Type: |
Geocode Service Geodata Service Geometry Service Globe Service Geoprocessing Service Image Service Map Service |
| Description: | 添加新的点位数据到水窖图层 |
| A Toolbox: | ||
| Toolbox: | ||
| Host | |
| Web application Name: | |
| Description: | |
| Use settings from an existing site: |
none a1 Scyc3S |

Arcgis-ModelBuilder和Python学习的更多相关文章
- ARCGIS API for Python进行城市区域提取
ArcGIS API for Python主要用于Web端的扩展和开发,提供简单易用.功能强大的Python库,以及大数据分析能力,可轻松实现实时数据.栅格数据.空间数据等多源数据的接入和GIS分析 ...
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- Python学习--01入门
Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
- Python学习路径及练手项目合集
Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159
- python学习笔记-python程序运行
小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...
- Python学习记录day6
title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...
- Python学习记录day5
title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...
- [Python] 学习资料汇总
Python是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大且完善的通用型语言,已经有十多年的发展历史,成熟且稳定.Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用 ...
随机推荐
- 关于IE10出现LinkButton点击无效的解决方案
关于IE10出现LinkButton点击无效的情况: 一般高配置的系统如Win7旗舰版SP1系统不会出现这种情况,针对家庭普通版和专业版的用户通过测试都有这种情况,对于开发人员要解决不同系统和IE的兼 ...
- 剑指offer(07)-调整数组顺序使奇数位于偶数前面【转】
来源:http://www.acmerblog.com/offer-6-2429/ 题目来自剑指offer系列 九度 1516 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得 ...
- 【转】ie8 不支持 position:fixed 的简单解决办法
今天发现使用 position:fixed 的页面在firefox下没有问题,在IE8下却不能正常显示,在网上找了找,有不少相关文章,但是不是不起作用就是太复杂,后来终于发现一个简单的解决办法,就是在 ...
- 导入安卓项目的时候,发生错误:Cause: peer not authenticated
导入安卓项目时出现Cause: peer not authenticated. 在网上搜了解决方案,都没有凑效.后来干脆插上手机直接debug安装,竟然成功了,成功了,成功了!!!! 然后再次buil ...
- Asianux的SSH登录问题,密码不正确解决
第一.ssh服务默认是关闭的,需要手动打开 [root@Asianux ~]# service sshd start 启动 [root@Asianux ~]#chkconfig sshd - ...
- kettle常见问题解决
开源ETL工具kettle系列之常见问题 摘要:本文主要介绍使用kettle设计一些ETL任务时一些常见问题,这些问题大部分都不在官方FAQ上,你可以在kettle的论坛上找到一些问题的答案 1. J ...
- MySQL下载、安装和修改root密码
一.下载地址:MySQL_5.6.22_winx64_XiaZaiBa :http://rj.baidu.com/soft/detail/12585.html?ald 二.安装软件,安装到指定的路径, ...
- [hadoop] WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
hadoop 启动后,有警告信息: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform ...
- jQuery.KinSlideshow焦点图轮换
兼容IE6/IE7/IE8/IE9,FireFox,Chrome*,Opera的 jQuery. KinSlideshow幻灯片插件,功能很多 ,基本能满足你在网页上使用幻灯片(焦点图)效果. 演示网 ...
- IOS开发-UI基础-视图
//------------------------------UIWindow--------------------------// 1.UIWindow:是 UIView 的子类,用于管理.协调 ...