PYTHON 实现爬取天地图瓦片生成GeoTIFF

一、引言

在地理信息系统(GIS)相关的开发和应用中,天地图的瓦片数据是非常有用的资源。通过 Python,我们可以方便地编写程序来爬取天地图的瓦片数据,并将其保存和合并。本文将详细介绍如何使用 Python 实现这一功能。

二、实现思路

整个程序的实现主要分为以下几个步骤:

  1. 经纬度与瓦片编号的转换:将 WGS84 经纬度转换为瓦片编号,以及反向转换。
  2. 瓦片下载:根据瓦片编号,构造请求 URL,下载瓦片数据。
  3. 多线程下载:使用多线程技术,提高下载效率。
  4. 瓦片合并:将下载的瓦片合并为 GeoTIFF 文件。

三、代码实现

import math
import os
import requests
import random
import time
import threading
from queue import Queue
import rasterio
from rasterio.merge import merge
from rasterio.crs import CRS
from rasterio.transform import Affine
import numpy as np

# 天地图API密钥
TIANDITU_KEY = "<填写密钥,从天地图官网注册后可获取自己的访问密钥>"


# 定义WGS84经纬度转瓦片编号的函数
def lonlat_to_tile(lon, lat, zoom):
    n = 2.0**zoom
    xtile = int((lon + 180.0) / 360.0 * n)
    lat_rad = math.radians(lat)
    ytile = int((1.0 - math.asinh(math.tan(lat_rad)) / math.pi) / 2.0 * n)
    return xtile, ytile


# 定义下载瓦片的函数
def download_tile(zoom, x, y, save_path, tk=TIANDITU_KEY):
    t = random.randint(0, 7)
    url = f"https://t{t}.tianditu.gov.cn/img_w/wmts?tk={tk}&Service=WMTS&Request=GetTile&Version=1.0.0&Style=Default&Format=tiles&serviceMode=KVP&layer=img&TileMatrixSet=w&TileMatrix={zoom}&TileRow={y}&TileCol={x}"
    headers = {
        "User-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值