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

      


以下为出发菜单项“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,"\n>")

用Python作GIS之二:STARS开发环境配置

STARS的一般使用可以通过REGAL网页快速学习http://regionalanalysislab.org/?n=STARS再次不做详细介绍这里关注的主题是对STARS源代码分析即为使用Pytho ...

用Python作GIS之一:介入STARS

STARS的全称是Space-Time Analysis of Regional Systems,直译过来就是区域系统时空分析软件.这是针对区域多时相数据的分析包,源代码公开.该软件将最近几年发展起来 ...

用Python作GIS之四:Tkinter基本界面的搭建

Python下的主窗口可以定义如下:def start(self):        #self.project = Project("temp")        #self.pro ...

用Python作GIS之三:入口程序 - stargui.py

"""gui start file for Space-Time Analysis of Regional Systems#STARS的图形用户界面入口(高级用户可以直接 ...

C++开发python windows版本的扩展模块示例

C++开发python windows版本的扩展模块示例 测试环境介绍和准备 测试环境: 操作系统:windows10 Python版本:3.7.0 VS版本:vs2015社区版(免费) 相关工具下载 ...

python中hashlib模块用法示例

python中hashlib模块用法示例 我们以前介绍过一篇Python加密的文章:Python 加密的实例详解.今天我们看看python中hashlib模块用法示例,具体如下. hashlib ha ...

Python自定义线程类简单示例

Python自定义线程类简单示例 这篇文章主要介绍了Python自定义线程类,结合简单实例形式分析Python线程的定义与调用相关操作技巧,需要的朋友可以参考下.具体如下: 一. 代码     # - ...

python golang中grpc 使用示例代码详解

python 1.使用前准备,安装这三个库 pip install grpcio pip install protobuf pip install grpcio_tools 2.建立一个proto文件 ...

Python Socket 编程——聊天室示例程序

上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

随机推荐

Yii javascript 的结合 账号禁用 激活 的设置。

2014-02-16 控制器中的代码: public function actionUpdown(){ //print_r($_POST);die(); if(Buser::model()->u ...

回车,根据编码获取相应记录,然后再将这录绑定到AutoList

问题描述: 回车后,根据编码获取相应记录,然后再将这录绑定到AutoList(我们自定义控件,其实就是下拉列表),回车事件是用jquery ajax实现,这样在后台给AutoList绑定数据源,如果不 ...

学习笔记_过滤器应用(粗粒度权限控制(拦截是否登录、拦截用户名admin权限))

RBAC ->基于角色的权限控制 l  tb_user l  tb_role l  tb_userrole l  tb_menu(增.删.改.查) l  tb_rolemenu 1 说明 我们给 ...

windows下体验Redis

Redis 是一个高性能的key-value数据库, 使用内存作为主存储,数据访问速度非常快,当然它也提供了两种机制支持数据持久化存储.比较遗憾的是,Redis项目不直接支持Windows,Windo ...

Python安装和开发环境搭建

1.官网:http://www.python.org/download/下载安装包,目前最新版本为3.6,安装包很多地方可以下,也可以在360软件管家上下载安装  特别要注意勾选:Add Python ...

css-div翻转动画

Spring Boot + Jpa + Thymeleaf 增删改查示例

快速上手 配置文件 pom 包配置 pom 包里面添加 Jpa 和 Thymeleaf 的相关包引用 org.springframe ...

Spring Security编程模型

1.采用spring进行权限控制 url权限控制 method权限控制 实现:aop或者拦截器(本质就是之前之后进行控制)--------------------proxy就是 2.权限模型: 本质理 ...

@Scheduled执行定时任务与cron表达式

1 配置文件形式执行定时任务 1 1.X 版本与spring结合使用实例 1.1 常用maven管理 pom.xml文件