python gis 实例_用Python作GIS之五:从示例入手—example函数

进入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>")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java jdbc操作类_Java-编写一个jdbc操作类

package数据库操作类;/** Db.javaCreated on 2007年8月20日, 上午 8:37*/import java.io.*;import java.sql.*;importjava.util.Properties;public classDB {privateString driver;privateString url;privateString user;privateString password;privateConnection conn;privat…

第一次冲刺第二天

昨天是冲刺的第一天,我完成了自己认领的任务,屏蔽系统锁屏,在实现过程中我发现了困难,经过各种查资料和询问同学,最后也没能通过敲代码实现屏蔽系统锁屏的功能,所以最后我决定实现调出系统锁屏页面&#xf…

LeetCode 1930. 长度为 3 的不同回文子序列(计数)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s ,返回 s 中 长度为 3 的不同回文子序列 的个数。 即便存在多种方法来构建相同的子序列,但相同的子序列只计数一次。 回文 是正着读和反着读一样的字符串。 子序列 是由原字符串删除其中部分字符&…

修改telnet的用户名密码_远程管理设备telnet的N种设置方法

作为一名网络工程师,日常管理和配置设备,可以选择的方法有很多,很多(如下图),但是最常用的配置手段,任然是本地使用console口,远程使用telnet(或SSH),本文以思科设备演示几种telnet的设置方法&a…

ifix的MySQL数据库_iFIX 技术文章:iFIX历史数据库

如下:定义所需采集数据的标签名(或者数据源), 并定义采集组存放这些标签;定义每个采集组的参数(节点、采集速度、相位、控制标签、状态和标签);采集速度越快,则数据越准确,数据容量越大。iFIX定义的有效数据…

python只能以程序方式执行死刑_Python程序设计基础_2020智慧树网课答案章节答案...

Python程序设计基础_2020智慧树网课答案章节答案答案:更多相关问题审判时怀孕的妇女,无论犯了多么严重的罪,最高可以判处()。A.死刑立即执行B.无期徒刑C.有期徒刑甲见他人贩卖毒品获得巨额暴利,遂起贩毒之意,但苦于无毒品来源,便制造了大量假…

WPF系列 自定控件

引言 WPF中微软提供了一些基本的控件,但是工作中这些基础的控件往往不能满足我们的需求,这个时候我们就需要根据实际的需求去开发自己的控件,但要注意不是所有功能不满足的情况都需要通过自定义控件来实现。实际上一旦用到自定义控件&#xf…

Paddle 使用预训练模型 实现快递单信息抽取

文章目录1. 导包2. 数据处理3. 辅助函数3.1 评估函数3.2 预测函数3.3 预测结果解码4. 训练填写快递单据可以直接把所有信息直接粘贴进客户端,客户端自动识别 省市、人名、电话等信息,分类填入,然后打印出来粘贴。无须人工填写,加快…

java oracle 分区查询_深入学习Oracle分区表及分区索引

深入学习Oracle分区表及分区索引关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类:•    Range(范围)分区•    Hash(哈希)分区•    List(列表)分区•    以及组合分区&a…

python3 可执行文件_将python3打包成为exe可执行文件(pyinstaller)

我们工作中可能会遇到,客户需要一个爬虫或者其他什么功能的python脚本。这个时候,如果我们直接把我们的python脚本发给客户,会有两个问题:1、客户的电脑或者服务器可能并没有安装python环境,这样就直接导致客户拿到pyt…

LeetCode 1935. 可以输入的最大单词数

文章目录1. 题目2. 解题1. 题目 键盘出现了一些故障,有些字母键无法正常工作。 而键盘上所有其他键都能够正常工作。 给你一个由若干单词组成的字符串 text ,单词间由单个空格组成(不含前导和尾随空格); 另有一个字符…

C# DateTime简单的定时器用法

DateTime是C#中的时间类,有公共索引器Now可以获取当前时间。 如果制作简单定时器的话,可以这样: 初始化:DateTime lasttimeDateTime.Now; TimeSpan timeintervalnew TimeSpan(1000); bool CheckTimer() { if(DateTime.Now.Substract(lasttime…

java 播放swf_我用java写了一个播放swf动画的类运行时报错了,代码和报错如下…...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼哪位高手帮小妹看看哈;谢谢啦,代码如下import java.awt.BorderLayout;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.SwingUtilities;import chrriis.common.UIUtils;import chr…

python rsa 公钥解密_python使用rsa库做公钥解密(网上别处找不到)

版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址http://www.cnblogs.com/Colin-Cai/p/8013009.html作者:窗户QQ:6679072E-mail:6679072qq.com使用RSA公钥解密,用o…

立足现在,规划未来

Now Linux ShellPythonCREsed/awk LispSQE ISO9001/TS16949SPCSQL MySQLNoSQLLCDMore MBA转载于:https://www.cnblogs.com/omicron/p/4495644.html

LeetCode 1936. 新增的最少台阶数

文章目录1. 题目2. 解题1. 题目 给你一个 严格递增 的整数数组 rungs ,用于表示梯子上每一台阶的 高度 。 当前你正站在高度为 0 的地板上,并打算爬到最后一个台阶。 另给你一个整数 dist 。 每次移动中,你可以到达下一个距离你当前位置&am…

mysql事务与jdbc事务_事务(mysql事务、jdbc事务)

一、MYSQL事务1、事务概念:事务是一个用户定义的数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。事务可以是一条sql语句,一组sqi语句或者整个程序。特性(ACDI):(1)原子性:一个事务中…

access 如何使用dolby_Access/VBA/Excel-Access表及字段创建-03

Part 1:前面的话对Access数据库的大部分操作都可以通过SQL语言来实现SQL:Structure Query Language,结构化查询语言,语法简单,非常容易学SQL语言的执行可借助于ADO,ADO本身也支持对数据库的各种操作,但是涉…

LeetCode 1937. 扣分后的最大得分(动态规划)

文章目录1. 题目2. 解题1. 题目 给你一个 m x n 的整数矩阵 points (下标从 0 开始)。 一开始你的得分为 0 ,你想最大化从矩阵中得到的分数。 你的得分方式为:每一行 中选取一个格子,选中坐标为 (r, c) 的格子会给你…

java代码测试---插入排序和选择排序

1 public class QuickSort {2 3 //插入排序4 //插入前的序列是排序好的&#xff0c;将新插入的数值与之前的数值比较5 //直到找到合适的位置6 public static int[] quickSort(int[] arr){7 8 for(int j1;j<arr.length;j){9 …