目录

前言

一、任务

二、实现与解析

1.引入库

2.构造数据模型

3.渲染地图元素

4.执行查询操作以及完成绘图

三、总结


前言

本书假定读者了解Pyhon、信息技术的基本知识,并且至少对地理空间分析有一定的认识。

讲述的是第1章 Python与地理空间分析“牛刀小试”部分的代码实现和解析。


一、任务

现在,你已经对地理空间分析有了进一步的了解,接下来我们要着手使用Python构建一个名
为SimpleGIS的GIS应用了。这个程序将使用地理数据模型构建一个完整的GIS应用,而且可以
渲染专题地图,显示不同城市的人口数量。
数据模型还将是结构化的,所以你可以进行一些基本的查询操作。SimpleGIS将会包含科罗
拉多州的3个城市及其人口数量。
更重要的一点是,我们将完全使用Pytohn代码实现这个小型系统的构建,从而展示Python语
言的强大威力。当然我们还会用到Python标准库中的部分模块,但不会下载任何第三方应用包。

笔者使用Python版本是3.9,IDE为VScode,其他IDE可以参考这个:推荐10 款最好的 Python IDE | 菜鸟教程 (runoob.com)

二、实现与解析

这一部分主要的解析都在注释中。

1.引入库

唯一使用的外部库是turtle,初学者常用的画图库。

import turtle as t

2.构造数据模型

首先声明一些和所有城市相关的常量。

# 在计算机科学中,将常用的数字放在方便记忆的变量中是普遍的做法。这个变量通常被称为常量。
# 妙处在于,索引也可以这样。
# 下面三个常量其实规定了列表中元素的先后顺序,即第一个是名称,第二个是点坐标(经纬度),第三个是人口数量。NAME = 0
POINTS = 1
POP = 2# 科罗拉多州,纬度在北纬37至41度之间,经度在西经102至109度之间,有5187582人。
state = ["COLORADO", [[-109, 37],[-109, 41],[-102, 41],[-102,37]], 5187582]# 城市
cities = []
cities.append(["DENVER",[-104.98, 39.74], 634265])
cities.append(["BOULDER",[-105.27, 40.02], 98889])
cities.append(["DURANGO",[-107.88,37.28], 17069])

然后定义地图尺寸大小和确定绘制边界,以及定义一个转换函数,用于将世界坐标(经纬度)转换成屏幕坐标。

# 地图大小
map_width = 400
map_height = 300# 首先需要确定最大范围,即州的尺寸。
# 先假定一个范围。有趣的是,假定的最小值很大,最大值反而很小。
minx = 180
maxx = -180
miny = 90
maxy = -90
# 这个循环的妙处在于,即使要绘制的地图边界不是方方正正的,也可以确定边界值。
# 实际上确定了最小外接矩形(MBR)。
for x,y in state[POINTS]:if x < minx: minx = xelif x > maxx: maxx = xif y < miny: miny = yelif y > maxy: maxy = y
# 第2步是计算州和绘图板之间的缩放比例.这个比例是用来将经纬度坐标转化成屏幕坐标的。
# 我们获取州在x和y坐标上的尺寸,然后和地图的尺寸进行比较得到缩放比例:
dist_x = maxx - minx
dist_y = maxy - miny
x_ratio = map_width / dist_x
y_ratio = map_height / dist_y# 转换函数
def convert(point):# lon:经度 lat:维度lon = point[0]lat = point[1]x = map_width - ((maxx - lon) * x_ratio)y = map_height - ((maxy - lat) * y_ratio)# turtle图形引擎是以屏幕中心为起点位置的,因此必须把坐标点的位置进行适当的偏移x = x - (map_width/2)y = y - (map_height/2)return [x,y]

详细的说明如图:

对convert函数的说明

3.渲染地图元素

首先画边界。

# 开始画图
t.up()
# 这里单独为第一个位置设变量,是为了画出封闭图形,而不需要在坐标列表增加一个点。
first_pixel = None
for point in state[POINTS]:pixel = convert(point)if not first_pixel:first_pixel = pixelt.goto(pixel)t.down()
t.goto(first_pixel)
t.up()
t.goto([0,0])
t.write(state[NAME], align="center", font=("Arial",16,"bold"))

然后绘制城市,注意这里使用convert函数的方法和上面不同的,显示了作者定义函数时的精巧构思。

# 绘制城市
for city in cities:pixel = convert(city[POINTS])t.up()t.goto(pixel)# 绘制城市位置t.dot(10)# 标记城市t.write(city[NAME] + ", Pop.: " + str(city[POP]), align="left")t.up()

效果图

4.执行查询操作以及完成绘图

# 执行一个属性查询操作来确定人口最多的城市
biggest_city = max(cities, key=lambda city:city[POP])
t.goto(0,-200)
t.write("The biggest city is: " + biggest_city[NAME])
# 执行一个属性查询操作来确定最西边的城市
western_city = min(cities, key=lambda city:city[POINTS])
t.goto(0,-220)
t.write("The western-most city is: " + western_city[NAME])
# 关闭画笔
t.pen(shown=False)
# 使用t.done()可以保存窗体
t.done()

效果图


三、总结

本文简单介绍了“牛刀小试”部分的代码实现,其实数学原理也很简单,不需要高等数学就可以推导其中的坐标转换公式,可以自己动手画图、结合图形加深理解。

Python地理空间分析指南(第2版)学习笔记01相关推荐

  1. 《Python地理空间分析指南 第2版》学习笔记-5.1 距离测量

    第5章 Python与地理信息系统 本章主要学习Python处理矢量数据,包含以下内容: 距离测量 坐标转换 矢量数据重投影 Shapefile 文件编辑 海量数据过滤 专题地图创建 非GIS数据类型 ...

  2. 【笔记】《Python地理空间分析指南(第2版)》

    转载地址:https://blog.csdn.net/jianbinzheng/article/details/80215228 概述部分 地理空间数据 地理空间技术概览 Python地理空间分析工具 ...

  3. python地理空间分析指南pdf邓世超_Python地理空间分析指南(第2版)源代码.zip

    [实例简介] Python地理空间分析指南(第2版)的随书源代码,需要的朋友可以下载一下~~ [实例截图] [核心代码] Python地理空间分析指南(第2版)源代码 └── Python地理空间分析 ...

  4. python空间分析_读书笔记——《python地理空间分析指南》

    本文为<Python地理空间分析指南(第2版)>的读书摘录,顺便挖个坑,进一步对python的几个包做学习整理. 本笔记的用途:了解python地理空间处理的技术框架和实现途径. 第三章 ...

  5. 《Python地理空间分析指南(第2版)》——1.9 地理信息系统基本概念

    本节书摘来自异步社区<Python地理空间分析指南(第2版)>一书中的第1章,第1.9节,作者: [美]Joel Lawhead(莱哈德) 更多章节内容可以访问云栖社区"异步社区 ...

  6. Python 地理空间分析

    前文 我们将快速浏览 Python 的(空间)数据科学生态系统,并了解如何使用一些基本的开源 Python 包,例如: pandas / geopandas shapely pysal pyproj ...

  7. MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01

    MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01 1. MySQL体系结构和存储引擎 1.1 定义数据库和实例 数据库database: 物理操作系统文件或其他形式文件类型的集合. 当使 ...

  8. Opencv Python版学习笔记01.计算机眼中的图像

    在计算机眼里,图像是通过数字矩阵的形式存储的.如上图所示,这张图片被分为了若干个小方格,但是每个方格仍然不够小,随意取出一个方格放大观察,这个方格是由许多小格组成的,其中每个小格叫做一个像素点,像素点 ...

  9. python网络爬虫权威指南 百度云-分析《Python网络爬虫权威指南第2版》PDF及代码...

    对那些没有学过编程的人来说,计算机编程看着就像变魔术.如果编程是魔术(magic),那么网页抓取(Web scraping)就是巫术(wizardry),也就是运用"魔术"来实现精 ...

最新文章

  1. poj 3261 后缀数组 找反复出现k次的子串(子串能够重叠)
  2. Consul 原理和使用简介
  3. Linux系统常用目录操作函数
  4. 计算机如何模拟人类说话,七十、计算机如何模拟痛觉
  5. 控制输入框的:选择,复制,粘贴功能。
  6. CentOS 6.9之LVM创建,扩容
  7. 辞退可以,暴力不行!
  8. .NET Quartz 配置JOB
  9. 浅析免费加密软件应该如何选择性下载
  10. 一张图片放两个二维码_经验 | 图片排版的「17个实用技巧」
  11. 机器学习周志华第一章
  12. mysql-front 8.0_使用SQL-Front启动MySQL8.0报错
  13. EPON+EOC 大批量设备网管解决方案
  14. 本周周报-20220109
  15. 18位身份证号码最后一位校验
  16. Revit API 进阶之隐藏dll讲解.
  17. 学生管理系统 C语言 动态链表 结构体 文件操作 设置密码 输入密码回显星号
  18. 独立游戏开发如何入门?
  19. 2019年1月8日个人总结
  20. 雷达威力图绘制matlab,自己动手做一个雷达PPI显示器的动态效果图(附Matlab代码)...

热门文章

  1. x86 PerCPU变量基址(gs寄存器)的原理
  2. webpack创建react项目
  3. linux下jdk的安装与配置jdk-6u45-linux-i586.bin
  4. 统一自己的mac和linux环境的终端使用(alacritty+tmux代替iterm2)
  5. [SWPUCTF 2021 新生赛]caidao
  6. windows如何安装pycocotools
  7. CNS、ENS和PNS的发育过程
  8. 网页设计作业 HTML5期末大作业:旅游网站设计——蓝色的地方旅游门户(9页) HTML+CSS+JavaScript
  9. 打码平台是如何运作的?再谈验证码安全
  10. 虚拟化服务器和存储关系,虚拟化服务器和云存储的对比