arcgis中python简单实例-用Python作GIS之五:从示例入手—example函数

进入STARS后,最简单的学习方法就是演示示例数据。对于源码的分析也可以从这里入手。

885d272d2db35138349bf7cf.jpgd84a271fca50a8c4a78669cf.jpg

以下为出发菜单项"Example Project”的函数example:

def example(self):

"""canned loading of data files and matrices for debugging"""

self.project = SProject("current",self.master,self) topDir = options.getSTARSHOME()

self.project.directory = os.path.join(topDir,"data")

projectFile = os.path.join(self.project.directory,"csiss.prj")

t=self.project.ReadProjectFile(projectFile)

if hasattr(self.project,"coords"):

self.project.scaleCoords()

else:

self.report("no coords in project")

#self.master.configure(cursor=options.DEFAULTCURSOR)

#self.Editor.configure(cursor='crosshair')

self.projectSummary() self.enableMenus()

加粗标注的几行代码可作进一步详细了解:

(1)SProject:

代码如下所示

class SProject(Project):

"""Subclass to compose STARS project inside a GUI

"""

def __init__(self,name,master,app):

"""Constructor

name (string): name of project

master (Tk): application top level window

app (App): App instance

"""

Project.__init__(self,name)

self.master = master

self.app = app

self.fnt=("Times",10)

self.screenHeight = self.app.winfo_screenheight()

self.screenWidth = self.app.winfo_screenwidth()

if self.screenWidth > 1280:

self.screenWidth = 1280 # prevent spread across 2-extended displays

s = str(self.screenWidth) + " " + str(self.screenHeight)

self.screenDim = s

其中调用了父类Project,打开star.py文件,找到Project类,对其进行分析:

class Project:

"""Stars project.

Example Usage:

>>> from stars import Project

>>> s=Project("s")

>>> s.ReadData("csiss")

>>> income=s.getVariable("pcincome")

>>> region=s.getVariable("bea")

>>> w=spRegionMatrix(region)

>>> mi=Moran(income,w)

>>> print(mi.mi[70])

0.38918107312

"""

def __init__(self,name):

self.name = name

self.dataBase = Database()

self.getVariable = self.dataBase.getVariable

self.getMatrix = self.dataBase.getMatrix

self.addMatrix = self.dataBase.addMatrix

self.getMatrixNames = self.dataBase.getMatrixNames

self.getVariableNames = self.dataBase.getVariableNames

self.getTSVariableNames = self.dataBase.getTSVariableNames

self.getCSVariableNames = self.dataBase.getCSVariableNames

self.getCSTSVariableNames = self.dataBase.getCSTSVariableNames

(2)ReadProjectFile:

代码如下所示

def ReadProjectFile(self,fileName):

#assumes extension is passed into fileName

#check for file existence

if os.path.exists(fileName):

self.initialize()

config = ConfigParser.ConfigParser()

config.read(fileName)

projectDir = os.path.dirname(fileName)

#print config.sections()

for section in config.sections():

options = config.options(section)

for option in options:

value = config.get(section,option)

# print section,option,value

sec=self.options[section]

opt=sec[option]

opt.append(value)

sec[option]=opt

self.options[section]=sec

# self.summarizeOptions()

# read data files

dataFiles = self.options["data"]["files"]

for dataFile in dataFiles:

# print dataFile

dfile = os.path.join(projectDir,dataFile)

# print dfile

self.ReadData(dfile)

#print "data files"

# read any gal matricies

try:

galFiles = self.options["weight"]["gal"][0].split()

print galFiles

for galFile in galFiles:

# print galFile

gfile = os.path.join(projectDir,galFile)

self.ReadGalMatrix(gfile)

#print "gal"

except:

print "No Weights Matrices"

# read any gis boundary files

self.listGISNames = []

gisFiles = self.options["gis"]["gis"]

for gisFile in gisFiles:

fileName = gisFile+".gis"

self.listGISNames.append(fileName)

fileName = os.path.join(projectDir,fileName)

self.ReadGisFile(fileName)

fileName = os.path.join(projectDir,gisFile+".cnt")

if os.path.exists(fileName):

self.readCentroids(fileName)

else:

self.__calcCentroids()

self.gisResolution = self.options["graphics"]["screen"]

else:

print "Error: Cannot read project file: %s"%fileName

该段代码可以帮助解析STARS工程文件project的大致结构,打开系统自带示例的工程文件csiss.prj:

[data]

files: csiss

[weight]

gal: states48

[gis]

gis: us48

[graphics]

screen: 1280 1201

可以发现该文件分为四段,前三段分别对应有数据文件、权重文件、GIS文件的连接,最后一段为显示参数。

·数据文件存储统计数据信息,又分为两个文件:csiss.dht存储数据索引信息,csiss.dat存储数据主体信息,其中注释CS为空间序列数据,TS为时间序列数据,CSTS即为时空序列数据。

·权重文件存储空间权重信息,后缀名为gal。此文件第一行为空间实体数目,从第二行开始每两行构成固定格式,形如:[第一行]实体序号 权重关联实体个数[第二行]权重关联实体序号列表,如此循环至最后一个实体。参见states48.gal文件。

·GIS文件(后缀名为gis)存储空间实体的地图数据,结构形如:[数据头]空间实体编号 该实体内多边形编号 该多边形节点数[数据体]X坐标(换行)Y坐标。参见us48.gis文件。

(3)projectSummary:

代码如下所示

def projectSummary(self):

self.report(self.project.catalogue())

在guimaker.py中找到report函数:

def report(self,message):

"""enters messages into main application window. use for

entering results, commands called by gui, etc."""

self.Editor.insert(END,message)

t=len(message)

self.Editor.yview_scroll(t,UNITS)

self.Editor.insert(END," >")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值