【python地图添加指北针和比例尺】

文章目录

  • 1、前言
  • 2、代码
    • 2.1、指北针
    • 2.2、比例尺
  • 3、结果

1、前言

  • 地理信息绘制中添加指北针和比例尺,使得图像更专业。

2、代码

2.1、指北针

def add_north(ax, labelsize=18, loc_x=0.95, loc_y=0.99, width=0.06, height=0.09, pad=0.14):"""画一个比例尺带'N'文字注释主要参数如下:param ax: 要画的坐标区域 Axes实例 plt.gca()获取即可:param labelsize: 显示'N'文字的大小:param loc_x: 以文字下部为中心的占整个ax横向比例:param loc_y: 以文字下部为中心的占整个ax纵向比例:param width: 指南针占ax比例宽度:param height: 指南针占ax比例高度:param pad: 文字符号占ax比例间隙:return: None"""minx, maxx = ax.get_xlim()miny, maxy = ax.get_ylim()ylen = maxy - minyxlen = maxx - minxleft = [minx + xlen*(loc_x - width*.5), miny + ylen*(loc_y - pad)]right = [minx + xlen*(loc_x + width*.5), miny + ylen*(loc_y - pad)]top = [minx + xlen*loc_x, miny + ylen*(loc_y - pad + height)]center = [minx + xlen*loc_x, left[1] + (top[1] - left[1])*.4]triangle = mpatches.Polygon([left, top, right, center], color='k')ax.text(s='N',x=minx + xlen*loc_x,y=miny + ylen*(loc_y - pad + height),fontsize=labelsize,horizontalalignment='center',verticalalignment='bottom')ax.add_patch(triangle)

2.2、比例尺

  • add_scalebar
#-----------函数:添加比例尺--------------
def add_scalebar(ax,lon0,lat0,length,size=0.45):'''ax: 坐标轴lon0: 经度lat0: 纬度length: 长度size: 控制粗细和距离的'''# style 3ax.hlines(y = lat0,  xmin = lon0, xmax = lon0+length/111, colors="black", ls="-", lw=1, label='%d km' % (length))ax.vlines(x = lon0, ymin = lat0-size, ymax = lat0+size, colors="black", ls="-", lw=1)ax.vlines(x = lon0+length/2/111, ymin = lat0-size, ymax = lat0+size, colors="black", ls="-", lw=1)ax.vlines(x = lon0+length/111, ymin = lat0-size, ymax = lat0+size, colors="black", ls="-", lw=1)ax.text(lon0+length/111,lat0+size+0.05,'%d' % (length),horizontalalignment = 'center')ax.text(lon0+length/2/111,lat0+size+0.05,'%d' % (length/2),horizontalalignment = 'center')ax.text(lon0,lat0+size+0.05,'0',horizontalalignment = 'center')ax.text(lon0+length/111/2*3,lat0+size+0.05,'km',horizontalalignment = 'center')# style 1# ax.hlines(y=lat0,  xmin = lon0, xmax = lon0+length/111, colors="black", ls="-", lw=2, label='%d km' % (length))# ax.vlines(x = lon0, ymin = lat0-size, ymax = lat0+size, colors="black", ls="-", lw=2)# ax.vlines(x = lon0+length/111, ymin = lat0-size, ymax = lat0+size, colors="black", ls="-", lw=2)# # ax.text(lon0+length/2/111,lat0+size,'500 km',horizontalalignment = 'center')# ax.text(lon0+length/2/111,lat0+size,'%d' % (length/2),horizontalalignment = 'center')# ax.text(lon0,lat0+size,'0',horizontalalignment = 'center')# ax.text(lon0+length/111/2*3,lat0+size,'km',horizontalalignment = 'center')# style 2# ax.hlines(y=lat0,  xmin = lon0, xmax = lon0+length/111, colors="black", ls="-", lw=1, label='%d km' % (length))# ax.vlines(x = lon0, ymin = lat0-size, ymax = lat0+size, colors="black", ls="-", lw=1)# ax.vlines(x = lon0+length/111, ymin = lat0-size, ymax = lat0+size, colors="black", ls="-", lw=1)# ax.text(lon0+length/111,lat0+size,'%d km' % (length),horizontalalignment = 'center')# ax.text(lon0,lat0+size,'0',horizontalalignment = 'center')
  • draw_the_scale
def draw_the_scale(ax, y,x,text,length = 1.5,lw = 5):#画比例尺函数# y代表比例尺所在纬度# x代表比例尺开始的经度# text代表比例尺最后刻度值# length代表比例尺的长度,单位为多少个经度# lw代表比例尺的宽度step = length/5#计算步长,画五格#画黑白线五条ax.hlines(y=y,xmin=x,xmax=x + step,colors="black", ls="-", lw=lw)ax.hlines(y=y,xmin=x + step,xmax=x + step*2,colors="white", ls="-", lw=lw)ax.hlines(y=y,xmin=x + step*2,xmax=x + step*3,colors="black", ls="-", lw=lw)ax.hlines(y=y,xmin=x + step*3,xmax=x + step*4,colors="white", ls="-", lw=lw)ax.hlines(y=y,xmin=x + step*4,xmax=x + step*5,colors="black", ls="-", lw=lw)#画长刻度两个ax.vlines(x = x, ymin = y - (lw/100) *3, ymax = y + lw/100, colors="black", ls="-", lw=1)ax.vlines(x = x + length, ymin = y - (lw/100) *3, ymax = y + lw/100, colors="black", ls="-", lw=1)#画段刻度四个ax.vlines(x = x + step, ymin = y - (lw/100) *2, ymax = y + lw/100, colors="black", ls="-", lw=1)ax.vlines(x = x + step*2, ymin = y - (lw/100) *2, ymax = y + lw/100, colors="black", ls="-", lw=1)ax.vlines(x = x + step*3, ymin = y - (lw/100) *2, ymax = y + lw/100, colors="black", ls="-", lw=1)ax.vlines(x = x + step*4, ymin = y - (lw/100) *2, ymax = y + lw/100, colors="black", ls="-", lw=1)#写字,0,500,kmax.text(x,y + (lw/100) *7,'0',horizontalalignment = 'center')ax.text(x + length,y + (lw/100) *7,text,horizontalalignment = 'center')ax.text(x + length/2,y + (lw/100)*2,'km',horizontalalignment = 'center')
  • draw_the_scale改
import matplotlib.patches as mpatches
def draw_the_scale(ax, y=0,x=0,length=500,lw=5):#画比例尺函数# y代表比例尺所在纬度# x代表比例尺开始的经度# text代表比例尺最后刻度值# length代表比例尺的长度,单位为多少个经度# lw代表比例尺的宽度step_ = length/111    #计算步长,画五格step = step_ * 100/111 /5#画黑白线五条ax.hlines(y=y,xmin=x,xmax=x + step,colors="black", ls="-", lw=lw)ax.hlines(y=y,xmin=x + step,xmax=x + step*2,colors="white", ls="-", lw=lw)ax.hlines(y=y,xmin=x + step*2,xmax=x + step*3,colors="black", ls="-", lw=lw)ax.hlines(y=y,xmin=x + step*3,xmax=x + step*4,colors="white", ls="-", lw=lw)ax.hlines(y=y,xmin=x + step*4,xmax=x + step*5,colors="black", ls="-", lw=lw)#画长刻度两个ax.vlines(x = x, ymin = y - (lw/100) *3, ymax = y + lw/100, colors="black", ls="-", lw=1)ax.vlines(x = x + step*5, ymin = y - (lw/100) *3, ymax = y + lw/100, colors="black", ls="-", lw=1)#画段刻度四个ax.vlines(x = x + step, ymin = y - (lw/100) *2, ymax = y + lw/100, colors="black", ls="-", lw=1)ax.vlines(x = x + step*2, ymin = y - (lw/100) *2, ymax = y + lw/100, colors="black", ls="-", lw=1)ax.vlines(x = x + step*3, ymin = y - (lw/100) *2, ymax = y + lw/100, colors="black", ls="-", lw=1)ax.vlines(x = x + step*4, ymin = y - (lw/100) *2, ymax = y + lw/100, colors="black", ls="-", lw=1)# #写字,0,500,kmax.text(x,y + 0.25,'0',horizontalalignment = 'center')ax.text(x + step_ -0.25,y + 0.25,str(length),horizontalalignment = 'center')ax.text(x + step_ + 0.25,y-0.25,'km',horizontalalignment = 'center')
  • draw_the_scale改2
def draw_the_scale(ax, y,x,length=500,num=5, lw=5):#画比例尺函数# y代表比例尺所在纬度# x代表比例尺开始的经度# text代表比例尺最后刻度值# length代表比例尺的长度,单位为多少个经度# num代表要划分的线段数# lw代表比例尺的宽度step_ = length/111           # 计算经度跨度step = step_ * 100/111 /num  # 100km为一格#画黑白线五条for i in range(num):if i%2 == 0:ax.hlines(y=y, xmin=x+i*step, xmax=x + (i+1)*step,colors="black", ls="-", lw=lw)else:ax.hlines(y=y,xmin=x + i*step,xmax=x + (i+1)*step,colors="white", ls="-", lw=lw)if i > 0:ax.vlines(x = x + (i+1)*step, ymin = y - (lw/100) *2, ymax = y + lw/100, colors="black", ls="-", lw=1)#画长刻度两个ax.vlines(x = x, ymin = y - (lw/100) *3, ymax = y + lw/100, colors="black", ls="-", lw=1)ax.vlines(x = x + step*num, ymin = y - (lw/100) *3, ymax = y + lw/100, colors="black", ls="-", lw=1)# #写字,0,500,kmax.text(x,y + 0.25,'0',horizontalalignment = 'center')ax.text(x + step_ -0.25,y + 0.25,str(length),horizontalalignment = 'center')ax.text(x + step_ + 0.25,y-0.25,'km',horizontalalignment = 'center')

3、结果

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

亚马逊云科技:基于老服务器打造的旧实例类型

内容摘要: 2021年,距离第一个EC2实例上线已经十五周年了。 在漫长的开发过程中,很多EC2实例自然会基于旧服务器构建。 随着时间的推移,旧的服务器总是需要更换硬件,实例也得更换,但并不是所有的用户都想迁…

20个Nginx经典面试题

在准备Nginx相关的技术面试时,了解一些常见的面试问题是非常重要的。以下是根据提供的文件内容,总结出的20个Nginx面试中常被问到的问题及其答案。 请解释一下什么是Nginx? Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP…

ZYNQ学习之Ubuntu系统的简单设置与文本编辑

基本都是摘抄正点原子的文章&#xff1a;<领航者 ZYNQ 之嵌入式Linux 开发指南 V3.2.pdf&#xff0c;因初次学习&#xff0c;仅作学习摘录之用&#xff0c;有不懂之处后续会继续更新~ 一、Ubuntu的简单操作 1.1 切换拼音输入法 Ubuntu 自带的拼音输入法&#xff0c;有两种…

C语言程序编译与链接(拓宽视野的不二之选)

文章目录 翻译环境和运行环境翻译环境预处理编译汇编链接 运行环境 翻译环境和运行环境 1&#xff0c;在ANSI C的任何⼀种实现中&#xff0c;存在两个不同的环境。 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执⾏的机器指 令&#xff08;⼆进制指令&#…

WEB DDOS的安全策略

近年来网络攻击的数量和频率急剧上升&#xff0c;针对Web应用程序的DDoS海啸攻击就是其中增长非常迅速的一个种类。过去常见的HTTP/S洪水攻击正在大范围的转变为更难对付的Web DDoS海啸攻击&#xff0c;网络安全空间攻防对抗越演越烈&#xff0c;企业用户面临更加严峻的网络安全…

CCCorelib 点云RANSAC拟合平面(CloudCompare内置算法库)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 点云平面拟合的实质其实就是用一个拟合平面取代近似位于同一平面的点云,使点云中的所有点到拟合平面的距离平方和最小, 达到点云与拟合平面的高度吻合。已有的方法其实已有很多,如最小二乘法、特征值法等,本文将…

Vue 3中ref和reactive的区别

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Floyd算法 【多源最短路】模板

B3647 【模板】Floyd - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> using namespace std; const int N1e210; const int inf0x3f3f3f; int n,m; int g[N][N]; void floyd() {for(int k1;k<n;k){for(int i1;i<n;i){for(int j1;j<n;j){g…

python工具方法 48 基于视觉大模型生成目标检测数据集

1、基本说明 1.1 lang-segment-anything Language Segment-Anything 是一个开源项目,它结合了实例分割和文本提示的强大功能,为图像中的特定对象生成蒙版。它建立在最近发布的 Meta 模型、segment-anything 和 GroundingDINO 检测模型之上,是一款易于使用且有效的对象检测…

取消自动设置的开机自启动(pywin32库)请勿仿照!否则可能对电脑造成损害。

本文使用创作助手。 要取消Python程序的开机自启动&#xff0c;可以通过删除注册表中相应的注册表项来实现。请按照以下步骤进行操作&#xff1a; 打开Windows注册表编辑器&#xff1a;按下 Windows R 键&#xff0c;输入 regedit&#xff0c;然后按下回车键。 导航到注册表…

1.简单使用SmartTable

愿你出走半生,归来仍是少年&#xff01; 环境&#xff1a;Android Studio 在android上进行统计数据、列表、表格数据等信息展示是常有的需求。 在Github上有一个优秀的控件&#xff1a;smartTable 1.功能介绍 快速配置自动生成表格&#xff1b;自动计算表格宽高&#xff1b;表…

低功耗、低成本 NAS 的可能性

使用现状&#xff1a;多台工作电脑&#xff0c;家里人手一台&#xff0c;还在两个住处 有好几台工作电脑&#xff0c;不同电脑有不同的用途&#xff0c;最大的问题就是各个电脑上文件的同步问题&#xff0c;这里当然就需要局域网里的公共文件夹&#xff0c;在NAS的问题上查了网…

Openwrt下适配Samba

关于Samba samba是Linux和Unix平台的一款实现了SMB协议的软件&#xff0c;可以使得windows平台的主机也可以访问Linux和Unix平台主机共享出来的资源。 SMB协议(Server Message Block)是由微软开发的一种软件程序级的网络传输协议&#xff0c;基于NetBIOS&#xff0c;主要功用…

【Canvas与艺术】模拟八一电影制片厂电影片头效果

【缘起】 八一厂每部电影前都有其专有开头&#xff0c;如&#xff1a;https://www.ixigua.com/6799821997258834440?logTag2eacce76401e13f9efe7 这个片头可以用canvas模拟下来。 【关键点】 线型放射状粒子系统的运作。 立体感五角星的绘制。 【图例】 【代码】 <!D…

开放大学2024年春《幼儿园环境创设 050546》过程性考核作业二:撰写一所幼儿园活动环境创设现状分析评价报告参考答案

答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 选择一所幼儿园&#xff0c;最好是你所在或者比较熟悉的园所&am…

单页面应用部署到iis上可以正常打开,刷新就404

当您遇到Dumi打包的网站部署到IIS上可以正常打开首页,但刷新页面时出现404错误的情况,这通常与以下几个方面有关: 路由处理: Dumi生成的项目通常基于SPA(Single Page Application)架构,使用前端路由来实现无刷新导航。这意味着大部分页面切换是在浏览器层面完成的,而不…

vc_red.msi 错误

建议将安装的软件解压&#xff0c;再安装&#xff0c;这样可以自动下载vc_red.msi. 不解压就会出现这个错误。

unity学习(73)——服务器异常--无法处理 123类型的数据包

服务器发送回的数据包&#xff0c;客户端根本读不出来&#xff0c;type都读不出来&#xff0c;拖了三天&#xff0c;把客户端翻了个底朝天&#xff0c;发现客户端一点问题都没有&#xff01; 所有的问题不是unity的模型问题&#xff0c;就是socket网络通信中断&#xff01; 1…

C++ 控制语句(一)

一 顺序结构 程序的基本结构有三种&#xff1a; 顺序结构、分支结构、循环结构 大量的实际问题需要通过各种控制流程来解决。 1.1 顺序结构 1.2 简单语句和复合语句 二 循环 2.1 for循环 语句流程图 注意&#xff1a;使用for语句的灵活性 三 while语句 四 do while语句

java springboot mybatisplus vue elementui python django vue 30套源代码 可用于接私活或毕设

java springboot vue elementui python django vue 30套源代码 Springboot vue3 elementplus 后台通用权限系统 代码生成器 (源码教程开发环境) Springboot vue2 elementui 后台通用权限系统 代码生成器(源码教程开发环境) Springboot vue2 elementui 物品出入库管理系统 (源…