python地理空间分析——构建SimpleGIS

主要分两部分进行编写的,第一是数据模型,第二是地图渲染,使用的是turtle模块。具体代码如下:

import turtle as t
#myList[0]
#firstItem=0
#myList[firstItem]
##所有图层都有一个名称,1个点和人口数
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=400
map_height=300
#设置全局边框的范围大小
minx=180
maxx=-180
miny=90
maxy=-90
for x,y in state[POINTS]:
    if x< minx:minx=x
    elif x>maxx:maxx=x
    if y<miny:miny=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]
#结果:出图,渲染专题地图
#添加一个标题
wn=t.Screen()
wn.title("Simple GIS")
#添加状态
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, -1*((map_height/2)+20)))
t.write("the highest-populated city is :"+biggest_city[NAME])
#编辑离西部最远的城市
western_city=min(cities,key=lambda city:city[POINTS])
t.goto(0, -1*((map_height/2)+40))
t.write("the western-most city is :"+western_city[NAME])
#隐藏地图笔
t.pen(shown=False)
t.done()

这是输出结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值