本帖最后由 托马斯罗辑 于 2021-1-20 22:28 编辑
天地图·江苏是省测绘局主管的系统,里面提供了各个市县区的行政区划图(http://218.2.231.247/staticServer/site/atlas/),不过缺点是只能浏览不能下载,因为他的源文件是多张小图片合成的。因此在下写了一个程序将服务器上的图片爬下来并且合成,并把详细流程分享在下面。
- 程序是用Python写成的,并用到了其中的一些库,因此推荐直接安装打包好的Anaconda(https://repo.anaconda.com/archiv ... -Windows-x86_64.exe)
- 打开上面天地图的链接,选择你想要下载的地区,然后用鼠标滚轮把图片放大到最大,在图片右上角单击右键,选择“在新窗口打开图片”,并复制新窗口的地址。以泰州市海陵区为例,地址就是(http://218.2.231.247/staticServer/site/atlas/TZhl/5/17/24.jpg)。
- 新建一个文件,命名为download.py(注意扩展名,后面不要有.txt),把下面代码复制进去并保存。其中preurl后面的引号里改为上一步中地址从开头到倒数第二个斜杠的部分,而MAX_WIDTH和MAX_HEIGHT的值分别为最后的两个数字。
- import requests
- import os
- from PIL import Image
- preurl = "http://218.2.231.247/staticServer/site/atlas/tzzq/6/"
- MAX_WIDTH = 24
- MAX_HEIGHT = 36
- print("正在下载图像,请稍候...")
- for i in range(MAX_WIDTH + 1):
- for j in range(MAX_HEIGHT + 1):
- url = preurl + str(i) + "/" + str(j) + ".jpg"
- fname = "output/" + str(MAX_HEIGHT - j) + "-" + str(i) + ".jpg"
- r = requests.get(url)
- with open(fname, "wb") as img:
- img.write(r.content)
- print("下载完毕!")
- print("————————————")
- print("正在合成图像,请稍候...")
- toImage = Image.new('RGBA',(256 * (MAX_WIDTH + 1), 256 * (MAX_HEIGHT + 1)))
- for i in range(MAX_HEIGHT + 1):
- for j in range(MAX_WIDTH + 1):
- pic_fole_head = Image.open("output/" + str(i) + "-" + str(j) + ".jpg")
- toImage.paste(pic_fole_head, (j * 256, i * 256))
- toImage.save('output.png')
- print("合成完毕!")
复制代码
- 在download.py的同一个目录下,新建一个文件夹,命名为download。在资源管理器的左上角点击文件-打开cmd(有的电脑上是powershell)。
- 在弹出的命令行中输入命令python download.py,稍等片刻,图片就合成完成了,打开output.png就能得到想要下载的图片了。
- 注意:在每一次下载新图片时,需要把output文件夹内的文件全部删除。
效果图:
|
|