本帖最后由 托马斯罗辑 于 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的值分别为最后的两个数字。
    1. import requests
    2. import os
    3. from PIL import Image

    4. preurl = "http://218.2.231.247/staticServer/site/atlas/tzzq/6/"
    5. MAX_WIDTH = 24
    6. MAX_HEIGHT = 36

    7. print("正在下载图像,请稍候...")

    8. for i in range(MAX_WIDTH + 1):
    9.     for j in range(MAX_HEIGHT + 1):
    10.         url = preurl + str(i) + "/" + str(j) + ".jpg"
    11.         fname = "output/" + str(MAX_HEIGHT - j) + "-" + str(i) + ".jpg"
    12.         r = requests.get(url)
    13.         with open(fname, "wb") as img:
    14.             img.write(r.content)

    15. print("下载完毕!")
    16. print("————————————")
    17. print("正在合成图像,请稍候...")

    18. toImage = Image.new('RGBA',(256 * (MAX_WIDTH + 1), 256 * (MAX_HEIGHT + 1)))
    19. for i in range(MAX_HEIGHT + 1):
    20.     for j in range(MAX_WIDTH + 1):
    21.         pic_fole_head = Image.open("output/" + str(i) + "-" + str(j) + ".jpg")
    22.         toImage.paste(pic_fole_head, (j * 256, i * 256))
    23. toImage.save('output.png')

    24. print("合成完毕!")
    复制代码

  • 在download.py的同一个目录下,新建一个文件夹,命名为download。在资源管理器的左上角点击文件-打开cmd(有的电脑上是powershell)。
    power.png
  • 在弹出的命令行中输入命令python download.py,稍等片刻,图片就合成完成了,打开output.png就能得到想要下载的图片了。
    cmder.png
  • 注意:在每一次下载新图片时,需要把output文件夹内的文件全部删除。

效果图:
output.png

回复

使用道具 举报

24

主题

217

帖子

365

积分

中级会员

Rank: 3Rank: 3

积分
365
发表于 2022-8-1 22:31:23 | 显示全部楼层
3#
,这都搞成IT论坛了
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

6

主题

117

帖子

157

积分

注册会员

Rank: 2

积分
157
发表于 2020-2-18 11:47:51 | 显示全部楼层
2#
怎嘛按照上面的方法,显示"python"不是内部批处理命令,也不是可执行程序啊!
回复 支持 反对

使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Powered by Discuz! X3.4  © 2001-2013 Comsenz Inc.