【Folium】使用离线地图

文章目录

  • 相关文献
  • 离线地图下载
  • Folium 使用离线地图

相关文献

  • Folium — Folium 0.19.5 documentation
  • Offline Map Maker

离线地图下载

我们使用 Offline Map Maker 进行地图下载。

特别注意:Folium 默认支持 WGS84 坐标系,建议下载 WGS84 坐标系的地图(比如高德、谷歌等),而类似百度地图(BD09 坐标系)默认不支持。

在这里插入图片描述

由于此软件收费较贵,也可以通过如下链接下载(注意网站是否允许爬虫)。

[!TIP]

Gaode base map with areas roads labels buildings (China)

http://wprd01.is.autonavi.com/appmaptile?lang=zh_cn&style=7&ltype=7&scl=0&size=0&x=417&y=222&z=9

import glob
import shutil
import math
import os
import requests
from concurrent.futures import ThreadPoolExecutor, as_completed# 下载单个URL的函数
def download_url(url, filename):try:print(f"开始下载: {url}")response = requests.get(url, timeout=10)with open(filename, 'wb') as f:f.write(response.content)print(f"下载完成: {url} -> 保存为 {filename}")return url, Trueexcept Exception as e:print(f"下载失败: {url}, 错误: {e}")return url, Falsedef save_file_with_directories(file_path, content):"""自动创建路径中的所有目录,并保存文件内容。:param file_path: 文件路径,例如 'a/b/c.png':param content: 要写入的内容(二进制或文本)"""# 获取文件所在目录directory = os.path.dirname(file_path)# 如果目录不为空,则创建目录(exist_ok=True 表示目录存在也不会报错)if directory:os.makedirs(directory, exist_ok=True)# 写入文件(以二进制方式为例)with open(file_path, 'wb') as f:f.write(content)# 多线程下载器
def multi_thread_download(urls, filenames, output_dir='downloads', max_workers=5):if not os.path.exists(output_dir):os.makedirs(output_dir)futures = []results = []with ThreadPoolExecutor(max_workers=max_workers) as executor:for i, (url, filename) in enumerate(zip(urls, filenames)):filename = os.path.join(output_dir, filename)future = executor.submit(download_url, url, filename)futures.append(future)for future in as_completed(futures):result = future.result()results.append(result)return resultsdef deg2num(lat_deg, lon_deg, zoom):"""根据给定的纬度、经度和缩放级别计算瓦片的X和Y坐标。参数:lat_deg (float): 纬度lon_deg (float): 经度zoom (int): 缩放级别返回:tuple: 包含X和Y坐标的元组"""lat_rad = math.radians(lat_deg)n = 2.0 ** zoomxtile = int((lon_deg + 180.0) / 360.0 * n)ytile = int((1.0 - math.asinh(math.tan(lat_rad)) / math.pi) / 2.0 * n)return (xtile, ytile)def move_file(src_file, dest_file):"""将文件移动到指定路径,如果路径不存在则自动创建。:param src_file: 源文件路径(需要移动的文件):param dest_file: 目标文件夹路径"""# 获取源文件的文件名filename = os.path.basename(src_file)# 获取文件所在目录directory = os.path.dirname(dest_file)# 如果目录不为空,则创建目录(exist_ok=True 表示目录存在也不会报错)if directory:os.makedirs(directory, exist_ok=True)# 移动文件shutil.move(src_file, dest_file)print(f"文件已从 '{src_file}' 移动至 '{dest_file}'")# 示例用法
if __name__ == "__main__":left_lon = 113 + 52 / 60right_lon = 114 + 18 / 60top_lat = 22 + 35 / 60bottom_lat = 22 + 8 / 60from_zoom = 9to_zoom = 18i = 0url_list = []filenames = []for zoom in range(from_zoom, to_zoom + 1):x_min, y_min = deg2num(top_lat, left_lon, zoom)x_max, y_max = deg2num(bottom_lat, right_lon, zoom)for x in range(x_min, x_max + 1):for y in range(y_min, y_max + 1):filename = f"{zoom}_{x}_{y}.png"url = f"http://wprd0{i + 1}.is.autonavi.com/appmaptile?lang=zh_cn&style=7&ltype=7&scl=0&size=0&x={x}&y={y}&z={zoom}"  # 高德地图url_list.append(url)filenames.append(filename)i = (i + 1) % 4# 开始多线程下载multi_thread_download(url_list, filenames, max_workers=8)for source_file in glob.glob("downloads/*.png"):filename = os.path.basename(source_file)zoom, x, y = filename[:-4].split("_")target_folder = f"{zoom}/{x}/{y}.png"move_file(source_file, target_folder)

Folium 使用离线地图

import foliumoffline_map_path = 'D:/offlinemaps/Gaode base map with areas roads labels buildings (China)/{z}/{x}/{y}.png'  # 离线地图文件路径# 创建一个以香港为中心的地图,zoom_start参数控制初始缩放级别
m = folium.Map(location=[22.5, 114],zoom_start=9,tiles=offline_map_path,attr='Gaode base map with areas roads labels buildings (China)'
)# 在地图上添加一个标记,默认的标记类型是'Marker'
folium.Marker(location=[22.5, 114],  # 标记的位置坐标popup='这里是香港',  # 点击标记时显示的信息icon=folium.Icon(color='blue')  # 标记的颜色
).add_to(m)# 将地图保存为HTML文件
m.save('hk_map.html')

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/81200.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSearch:字节新一代 DeerFlow 框架

项目地址:https://github.com/bytedance/deer-flow/ 【全新的 Multi-Agent 架构设计】独家设计的 Research Team 机制,支持多轮对话、多轮决策和多轮任务执行。与 LangChain 原版 Supervisor 相比,显著减少 Tokens 消耗和 API 调用次数&#…

Qt—用SQLite实现简单的注册登录界面

1.实现目标 本次实现通过SQLite制作一个简易的登录窗口,当点击注册按钮时,登录窗口会消失,会出现一个新的注册界面;完成注册或退出注册时,注册窗口会消失,重新出现登录窗口。注册过的用户信息会出现在SQLi…

day 18:零基础学嵌入式之数据结构——

一、基础内容 1.数据结构:相互之间存在一种或多种特定关系的数据元素的集合。 2.逻辑结构 (1)集合,所有数据在同一个集合中,关系平等。 (2)线性,数据和数据之间是一对一的关系 &am…

【SSL证书系列】客户端如何验证https网站服务器发的证书是否由受信任的根证书签发机构签发

客户端验证HTTPS网站证书是否由受信任的根证书颁发机构(CA)签发,是一个多步骤的过程,涉及证书链验证、信任锚(Trust Anchor)检查、域名匹配和吊销状态验证等。以下是详细的验证流程: 1. 证书链的…

iOS即时通信的技术要点

iOS即时通信开发的关键技术要点总结: 一、通讯协议选择 Socket通信 基础实现:使用原生BSD Socket或CFNetwork框架(复杂),推荐第三方库如CocoaAsyncSocket(封装GCDAsyncSocket),简化T…

智能AI构建工地安全网:跌倒、抽搐、区域入侵多场景覆盖

智能AI在工地安全中的应用:从监测到救援的全流程实践 一、背景:高温作业下的工地安全挑战 随着夏季高温持续,工地户外作业环境面临严峻考验。工人因高温疲劳、脱水或突发疾病引发的行为异常(如晕厥、抽搐、跌倒)频发…

Doris

Apache Doris(原名:Palo)是一个高性能、实时的MPP分析型数据库,非常适合海量数据的即席查询、报表分析、指标统计等 OLAP 场景。Doris 的设计目标是:极致查询性能、简单易用、支持高并发分析和明细查询。 一、Doris 核…

# 2-STM32F103-复位和时钟控制RCC

STM32-复位和时钟控制RCC 2-STM32-复位和时钟控制RCC摘要说明本文参考资料如下: 一、STM32最小系统回顾STM32F103C8T6核心板原理图 二、复位三、时钟3.1 时钟树3.2 STM32启动过程3.2 SystemInit()函数3.2.1 SystemInit()第1句:3.2.2 SystemInit()第2句&a…

rk3576 gstreamer opencv

安装gstreamer rk3588使用gstreamer推流_rk3588 gstreamer-CSDN博客 rk3588使用gstreamer推流_rk3588 gstreamer-CSDN博客 Installing on Linux sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-pl…

Quic如何实现udp可靠传输

QUIC(Quick UDP Internet Connections)是由 Google 设计并被 IETF 标准化的传输层协议,它基于 UDP 实现,但提供了类似 TCP 的可靠性和更高级的功能(如多路复用、0-RTT 握手、TLS 加密等)。 尽管 UDP 是不可…

uniapp-商城-59-后台 新增商品(属性的选中,进行过滤展示,filter,some,every和map)

前面讲了属性的添加,添加完成后,数据库中已经存在数据了,这时再继续商品的添加时,就可以进行属性的选择了。 在商品添加过程中,属性选择是一个关键步骤。首先,界面需要展示嵌套的属性数据,用户通…

负载均衡 ELB 在 zkmall开源商城高流量场景下的算法优化

在电商大促、直播带货等高频交易场景下,流量突发增长对系统稳定性提出严峻挑战。ZKmll 开源商城通过对负载均衡 ELB(Elastic Load Balancer)算法的深度优化,结合业务场景特性设计动态加权轮询 地域感知 热点分流的混合策略&…

Linux干货(三)

前言 从B站黑马程序员Linux课程摘选的学习干货,新手友好!若有侵权,会第一时间处理。 目录 前言 1.which find命令 1.which命令 2.find命令 2.grep wc 管道符 1.grep命令 2.wc命令 3.管道符 3.echo tail 重定向符 1.echo命令 2.反…

Sigmoid与Softmax:从二分类到多分类的深度解析

Sigmoid与Softmax:从二分类到多分类的深度解析 联系 函数性质:二者都是非线性函数 ,也都是指数归一化函数,可将输入值映射为0到1之间的实数 ,都能把输出转化成概率分布的形式,在神经网络中常作为激活函数使用。Softmax是Sigmoid的推广:从功能角度看,Softmax函数可视为…

文件系统交互实现

关于之前的搭建看QT控件文件系统的实现-CSDN博客,接下来是对本程序的功能完善,我想着是这样设计的,打开一个目录以后,鼠标选中一个项可以是目录,也可以是文件,右键可以出现一个菜单选择操作,比如…

[ctfshow web入门] web75

信息收集 启用了open_basedir,所以之前的方法又不能用了 解题 cforeach(new DirectoryIterator("glob:///*") as $a){echo($a->__toString(). ); } ob_flush();cif ( $a opendir("glob:///*") ) {while ( ($file readdir($a)) ! false …

Vulfocus靶场-文件上传-3

WSO2 文件上传 (CVE-2022-29464) WSO2是一家成立于 2005 年的开源技术提供商。它提供了一个企业平台,用于在本地和整个 Internet 上 集成应用程序编程接口(API)、应用程序和 Web 服务。 某些 WSO2 产品允许无限制的文件上传和远程代码执行。…

基于MCP的桥梁设计规范智能解析与校审系统构建实践

引言 今天本文准备盘一个大活,聊一聊偏特定行业一点的AI技术深入应用思考及实践。 一、传统设计行业项目背景与行业痛点 在桥梁设计领域,标准规范是设计的基础,直接关系到桥梁结构的安全性、耐久性和经济性。然而,传统的规范应…

远程连接电脑的方法?异地远程桌面连接和三方软件实现

远程连接电脑,是指通过网络技术,在一台设备上操控另一台设备的电脑桌面,实现跨地域的操作和管理。在日常工作、技术支持、远程办公等场景中,远程连接电脑都发挥着重要作用。实现远程连接电脑主要有系统自带工具和第三方软件两种方…

win11 安装 wsl ubuntu 18.04后换源失败!

记录几个问题是如何解决的。 一 下载wsl后,有报错: Installing, this may take a few minutes... WslRegisterDistribution failed with error: 0x8007019e Error: 0x8007019e ??????? Linux ? Windows ???? Press any key to continue... …