老师的一个项目,需求如下:

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学习相关推荐

  1. GIS开发之二维地下管线综合管理系统(Arcgis)第三节 使用python和modelbuilder

    GIS开发之二维地下管线综合管理系统(Arcgis)第三节 使用python和modelbuilder ArcGIS python使用 modelbuilder使用 在管网系统的功能中,高效的数据处理 ...

  2. 【专注学习】基于Arcgis的python学习1

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 [专注学习]基于Arcgis的python学习1 前言 一.主体思路流程? 二.需要用到的函数 1.清除所有变量 2.读入数据-loa ...

  3. 简明GISer Python学习指南

    简明GISer Python学习指南 缘起 GISer学Python Python简介 学什么 学习资源 视频 图书 基础入门 进阶 高级(专业) 开发库 webGIS开发 遥感影像处理 爬虫 机器学 ...

  4. pygame是python的一个库吗,python学习pygame,,基本库导入impor

    python学习pygame,,基本库导入impor 基本库导入 import pygame import sys from pygame.locals import * 初始化 pygame.ini ...

  5. python科学计数法转换_对比Python学习Go 基本数据结构

    公众号文章不方便更新,可关注底部「阅读原文」博客,文章随时更新. 本篇是「对比 Python 学习 Go」[1] 系列的第三篇,本篇文章我们来看下 Go 的基本数据结构.Go 的环境搭建,可参考之前的 ...

  6. 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  ...

  7. Python学习day5作业-ATM和购物商城

    Python学习day5作业 Python学习day5作业 ATM和购物商城 作业需求 ATM: 指定最大透支额度 可取款 定期还款(每月指定日期还款,如15号) 可存款 定期出账单 支持多用户登陆, ...

  8. Python学习系列(六)(模块)

    Python学习系列(六)(模块) Python学习系列(五)(文件操作及其字典) 一,模块的基本介绍 1,import引入其他标准模块 标准库:Python标准安装包里的模块. 引入模块的几种方式: ...

  9. 最新Python学习项目Top10!

    作者 | Mybridge 译者 | Linstancy 整理 | Jane 出品 | AI科技大本营 [导读]过去一个月里,我们对近1000个Python 学习项目进行了排名,并挑选出热度前10的项 ...

最新文章

  1. 如何为ccflow工作流引擎增加一个优先级PRI?
  2. php无限极分类并添加指定值,PHP实现无限极分类的两种方式,递归和引用
  3. 不清楚 spring 的这几个知识点,面试直接挂了!
  4. Hadoop2.7.6在Windows7单机部署
  5. python安装缺少api怎么办_请问缺少win32api模块该如何解决?
  6. 进程调度算法 C++实现
  7. 教师新学年工作愿景_新学年的3个创新开源项目
  8. 关于myeclipise注册机run.bat运行失败的解决方法
  9. 同事经常蹭我的车,我该怎么拒绝?
  10. 坐飞机也能享受百兆宽带了,这个技术是怎么实现的?
  11. [android开发IDE]adt-bundle-windows-x86的一个bug:无法解析.rs文件--------rs_core.rsh file not found...
  12. 亲测可用sqlyog激活注册码
  13. 高中计算机教室标语,高中教室布置标语
  14. 薛定谔的猫、量子纠缠、和量子计算机
  15. C++操作Excel表格
  16. 论文笔记:Attention U-Net: Learning Where to Look for the Pancreas
  17. lambda表达式的3种写法
  18. Unity Render Streaming 云渲染
  19. 【Leetcode】精选算法top200道(二)
  20. 微信小程序使用crypto.js加密解密

热门文章

  1. 1.3 Java二维数组详解
  2. 1.3 字符编码介绍
  3. 3.2.1 虚拟内存的基本概念
  4. docker之网络访问
  5. YAML 在Python中的配置应用
  6. FastDFS配置nginx插件访问图片
  7. python中输入提示_Python-Tkinter Text输入内容在界面显示的实例
  8. noteexpress 笔记导出_【在库言库】2019年第7期 科研工具——NoteExpress文献管理软件...
  9. activiti的processEngine空指针异常
  10. java基础(十) 数组类型