1楼:匿名用户
例子取自<>
**由两部分组成。第一部分是数据模型,第二部分是绘制数据(地图渲染)。
一、数据模型:使用python内置的列表(list),用来存储空间数据。
[python]view plaincopy
#datamodel
#alllayerswillhaveaname,1+points,andpopulationcount
name=0
points=1
pop=2
#createthestatelayer
state=["colorado",[[-109,37],[-109,41],[-102,41],[-102,37]],5187582]
#citieslayerlist
#city=[name,[point],population]
cities=
#adddenver
#addboulder
#adddurango
二、地图渲染
使用python turtle 绘图模块来渲染地图。其中有一个函数用来将世界坐标转换为像素坐标。
1、首先计算地图的显示范围及设定屏幕的绘制范围
[python]view plaincopy
#mapgraphicsrendering
map_width=800
map_height=500
#stateboundingbox
#usepythonmin/maxfunctiontogetboundingbox
minx=180
maxx=-180
miny=90
maxy=-90
forx,yinstate[points]:
ifx elifx>maxx:maxx=x ify elify>maxy:maxy=y #getearthdistanceoneachaxis dist_x=maxx-minx dist_y=maxy-miny #scalingratioeachaxis #tomappointsfromworldtoscreen x_ratio=map_width/dist_x y_ratio=map_height/dist_y 2、世界坐标到屏幕坐标的转换 [python]view plaincopy #functiontoconvertlat/lontoscreencoordinates defconvert(point): lon=point[0] lat=point[1] x=map_width-((maxx-lon)*x_ratio) y=map_height-((maxy-lat)*y_ratio) #pythonturtlegraphicsstartinthemiddleofthescreen #sowemustoffsetthepointssotheyarecentered x=x-(map_width/2) y=y-(map_height/2) return[x,y] 3、绘制地图:标注和要素图形 [python]view plaincopy #drawthestate t.up() first_pixel=none forpointinstate[points]: pixel=convert(point) printpixel ifnotfirst_pixel: first_pixel=pixel t.goto(pixel) t.down() #gobacktothefirstpoint t.goto(first_pixel) #labelthestate t.up() t.goto([0,0]) t.write(state[name],align="center",font=("arial",16,"bold")) #drawthecities forcityincities: pixel=convert(city[points]) t.up() t.goto(pixel) #placeapointforthecity t.dot(10) #labelthecity t.write(city[name]+",pop.:"+str(city[pop]),align="left") t.up() #performanattributequery #question:whichcityhasthelargestpopulation? #writetheresultbutmakesureit'sunderthemap biggest_city=max(cities,key=lambdacity:city[pop]) t.goto(0,-1*((map_height/2)+20)) t.write("thebiggestcityis:"+biggest_city[name]) #performaspatialquery #question:whichisthewesternmostcity? #writetheresultbutmakesureit'sundertheotherquestion western_city=min(cities,key=lambdacity:city[points]) t.goto(0,-1*((map_height/2)+40)) t.write("thewestern-mostcityis:"+western_city[name]) #hideourmappen t.pen(shown=false) t.done() 三、结果 有没有人用web方式开发gis的 2楼:广州启汇营销策划**** arcgis server是esri公司最新推出的服务器端品,主要可以实现两大功能: 强大的web gis系统的开发; 分布式gis系统的开发; arcgis server其内核与arcgis desktop和arcgis engine一样,都是arcobjects库。其所谓的web gis,其实无非就是用web技术来封装arcobjects,而分布式的开发则是通过d***来实现的。 安装arcgis server的安装非常简单,先安装arcgis server,然后安装dot*** adf,最后用arccatelog添加一个server,然后再添加一个serverobject,这样就可以进行开发了。 python开发gis程序 3楼:hfy小杨 python之于gis与python之于it类似 giser采用python的原因也在于“人生苦短,我用python” python在gis中的应用非常之广 1. desktop gis: arcgis从版本10开始不再支持原来的vba,而改用python qgis本身大部分的**特别是插件部分可以采用python进... 有哪些 gis+python 的开发经验值得分享 4楼:我的小名叫仙女 python之于gis与python之于it类似 giser采用 怎么用python开发arcgis 5楼:匿名用户 在pyhton写的一些**,用户交互不方便,用户体验比较差,不方便重用。在arcgis中可以将用写的python**导入到toolbox中,这样用起来就比较方便了。这里用按要素裁剪栅格的python来演示如何导入arcgis中。 **如下: import sys reload(sys) sys.setdefaultencoding( "utf-8" ) import arcpy import string from arcpy.sa import * try: raster = arcpy.getparameterastext(0) #要裁剪的栅格 clip_feat = arcpy.getparameterastext(1) #裁剪要素类 field = arcpy.getparameterastext(2) #命名字段 outworkspace = arcpy.getparameterastext(3) #命名字段裁剪后输出目录 for row in arcpy.searchcursor(clip_feat): mask=row.getvalue("shape") outpath=outworkspace+"\\"+str(row.getvalue(field)) outextractbymask = extractbymask(raster,mask) outextractbymask.save(outpath) except arcpy.executeerror: print arcpy.getmessages() 在用户工具箱中新建工具箱(在系统工具箱中不能新建),在工具箱右键,添加脚本; 输入名称、标签、描述等信息。下一步,选择脚本文件。(这里需要注意的是:一定要勾选"存储相对路径名"这个选项) 设置参数,这是最重要的一步。其中参数即**中getparameterastext(n),并选择合适的数据类型,在参数属性中也可以进行相关设置。如果输出栅格名称按裁剪要素中的某个字段,需要设置"获取息"属性,还要进行过滤一下。 设置好一切参数过后,就可以来进行测试了。在本机上测试通! 接下来便是怎样移植到其他电脑了的问题了。前面我说说过要存储为相对路径,否则,将报错00576:脚本工具使用的脚本未处于所需位置。 创建脚本工具时,有一个选项用于存储相对路径名(而不是绝对路径名)。设置此选项后,脚本的相对位置和保存脚本工具的工具箱必须保持不变。执行工具时移动两者中的任何一个都会出现此错误。 但改为相对路径后,在其他电脑上也能正常运行,但弹出了警告窗口。原因是客户机上没有勾选扩展模块相应的功能。这个示例需要勾选空间分析模板,因为使用了按掩膜提取这个工具。 这个脚本实现的详情参考:使用python脚本批量裁切栅格 发布给他人,涉及到个人知识产权的问题,怎样让他人使用工具,又不能看到脚本**?如果编辑调试完成了,在脚本工具右键可导入脚本。 设置密码后,即可。