python三维图形渲染 地图_基于python的turtle图形引擎渲染地图

一.构建SimpleGIS

本文将使用python构建一个名为SimpleGIS的应用,这个程序将使用地理数据模型构建一个完整的GIS应用,而且可以渲染专题地图,显示不同城市的人口数量。

数据模型是结构化的,可以进行一些基本的查询操作。SimpleGIS包含科罗拉多州的3个城市及其人口数量。最重要的的是,我们将完全使用python代码实现这个小型系统的构建,其中会用到python标准库中的部分模块,但不会下载任何第三方应用包。

二.代码内容

代码大致分为两个部分。第一部分是数据模型部分,第二部分是地图数据渲染。

对于数据模型部分,将使用python的列表实现。python的列表是一种原生的数据类型,它可以按照特定顺序作为存储其他对象的容器。

第二部分将会使用python的turtle图形引擎渲染地图。我们在GIS系统中唯一用到的是世界坐标系转换函数,其作用是将经纬度转换为屏幕坐标格式。所有的图形引擎都有一个原点(0,0),这个点通常在绘图板的左上角或右下角。turtle的主要作用是讲授可视化编程的。turtle的图形画板的原点选在了中心点,类似一个图形计算器。

三.代码部分

#导入turtle模块

import turtle as t

#城市属性

NAME=0

POINTS=1

POP=2

#科罗拉多城市名、坐标和人口的列表

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=600

map_height=400

#确定最大范围

minx=180

maxx=-180

miny=90

maxy=-90

for x,y in state[POINTS]:

if x

elif x>maxx:maxx=x

if y

elif y>maxy:maxy=y

#计算州和绘图板之间的缩放比例

dist_x=maxx-minx

dist_y=maxy-miny

x_ratio=map_width/dist_x

y_ratio=map_height/dist_y

#定义convert函数,将经纬度坐标转换成屏幕坐标

def convert(point):

lon=point[0]

lat=point[1]

x=map_width-((maxx-lon)*x_ratio)

y=map_height-((maxy-lat)*y_ratio)

x=x-(map_width/2)

y=y-(map_height/2)

return [x,y]

#用t.up()和t.down()控制画笔

t.up()

first_pixel=None

for point in state[POINTS]:

pixel=convert(point)

if not first_pixel:

first_pixel=pixel

t.goto(pixel)

t.down()

t.goto(first_pixel)

t.up()

t.goto([0,0])

t.write(state[NAME],align="center",font=("Arial",16,"bold"))

#绘制城市

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()

#计算得出人口最多的城市

biggest_city=max(cities,key=lambda city:city[POP])

#在地图下方标记结果

t.goto(0,-300)

t.write("The biggest city is:"+ biggest_city[NAME])

#计算离西部最远的城市

#western_city = min(cities,key=lambda city:city[POINTS])

#to.goto(0,-320)

#t.write("The western-most city is:"+ western_city[NAME])

#隐藏画笔光标

t.pen(shown=False)

t.done()

四.地图渲染结果绘图板上渲染的科罗拉多州地图

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值