进入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之五:从示例入手—example函数的更多相关文章

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

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

  2. 用Python作GIS之一:介入STARS

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

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

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

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

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

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

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

  6. python中hashlib模块用法示例

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

  7. Python自定义线程类简单示例

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

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

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

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

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

随机推荐

  1. C#调用C dll,结构体传参

    去年用wpf弄了个航线规划软件,用于生成无人机喷洒农药的作业航线,里面包含了不少算法.年后这几天将其中的算法移植到C,以便其他同事调用.昨天在用C#调用生成的dll时,遇到一些问题,折腾了好久才解决. ...

  2. Powerdesigner 导出Excel格式数据字典 导出Excel格式文件

    版权声明:本文为博主原创文章,转载请注明出处; 网上我也看到了很多的Powerdesigner 导出方法,因为Powerdesigner 提供了部分VBA功能,所以让我用代码导出Excel格式文件得以 ...

  3. Orchard官方文档翻译(二) 安装 Orchard

    原文地址:http://docs.orchardproject.net/Documentation/Installing-Orchard 想要查看文档目录请用力点击这里 最近想要学习了解orchard ...

  4. Oozie 中各种类型的作业执行结果记录

    一,提交的作业被SUSPEND,然后再被KILL,记录如下: TYPE1: appType WORKFLOW_JOB id 0000002-160516095026479-oozie-oozi-W e ...

  5. EXTJS 密码确认与验证

    extjs 框架是一个非常优秀的前端框架,提供了丰富的功能与炫丽的界面展示,在用 extjs 创建表单时,特别是在注册或修改密码的时候,要对密码进行确认,这里就密码确认一致性验证和大家分享自己的心得与 ...

  6. WPF学习系列之八(形状,画刷和变换)

    形状,画刷和变换   概述: 在许多用户界面技术中,普通控件和自定义绘图之间具有清晰的区别.通常来说,绘图特性只用于特定的应用程序--如游戏,数据可视化和物理仿真等.而WPF具有一个非常不同的原则.它 ...

  7. SQL 2008配置管理工具服务显示 远程过程调用失败0x800706be

    摘自: http://www.cnblogs.com/cool-fire/archive/2012/09/15/2686131.html 基本上我的解决方案也是根据该文提示 操作的. 因为 我后来 装 ...

  8. 自动计算尺寸列表功能案例ios源码

    源码HTKDynamicResizingCell,HTKDynamicResizingCell提供自动计算尺寸的TableViewCell/CollectionViewCel,只要设置了合适AutoL ...

  9. 关于ADO.NET的基本介绍

    关于ADO.NET ADO.NET是微软提供的一种数据库访问方式.他使得.NET程序员对于不同的数据库都能采用相同的访问方式. Connection 连接 Connection是一个数据库连接类,他负 ...

  10. iOS网络通讯——监测网络状态:Reachability(可达性)

    1.iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三方应用.大多数的iOS应用都需要联网,甚至有些应用严重依赖网络,没有网络就无法正常工作. 2.在你的应用尝试通过 ...