Python | 非规则矩形投影添加斑马线边框

news2024/11/28 1:38:59

前言

在地图绘制领域,非规则投影的示例相对较少,通过几个python的示例可以更好地理解如何在不同投影类型和边界形状下绘制地图。

以下提供了一系列示例,演示了如何在地图中添加非规则边界和边框。这些示例涵盖了不同的投影类型和边界形状,包括近景透视投影、兰伯特等角投影、正交投影和等经纬度投影。其中,示例6还提供了一个方便的函数,可以在等经纬度投影下添加斑马线边框,使得地图更加生动和引人注目。

导入必要的库


from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
import cartopy.feature as cf
import cartopy
import os
import xarray as xr
import glob
import numpy as np
import cartopy.feature as cfeature
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import matplotlib.ticker as mticker
import matplotlib.path                 as mpath
import cartopy.mpl.ticker              as ctk
import matplotlib.patches as patches
import itertools
import matplotlib.patheffects as pe
# ================================================================================================
# Author: %(Jianpu)s | Affiliation: Hohai
# Email : %(email)s
# Last modified: 2024-03-30 22:28:06
# Filename: 非规则矩形投影.py
# =================================================================================================

示例1:近景透视投影-非规则投影区域

非规则矩形投影添加经纬度

Code


# # -----------------------------------------------------------------------------
# #                自定义非矩形投影区域
# # -----------------------------------------------------------------------------
# 定义了地图的经度和纬度范围,即左侧经度、右侧经度、下方纬度和上方纬度。
leftlon, rightlon, lowerlat, upperlat = [-80, -10, 58, 85]
# 创建了一个矩形路径,用于表示地图的边界范围,并使用50个插值点对其进行插值处理。
rect = mpath.Path([[leftlon, lowerlat], [rightlon, lowerlat],
    [rightlon, upperlat], [leftlon, upperlat], [leftlon, lowerlat]]).interpolated(50)
# 定义了一个近景透视投影,设置了中心经度和中心纬度为地图范围的中心点。
proj=ccrs.NearsidePerspective(central_longitude=(leftlon+rightlon)*0.5,
    central_latitude=(lowerlat+upperlat)*0.5)
# 创建一个新的Matplotlib图形对象,指定了图形的大小和分辨率。
fig= plt.figure(figsize = (12,10),dpi=300)
# 在图形上添加一个轴,指定了轴的位置和投影类型。
ax= fig.add_axes([0.2,0.3,0.5,0.5],projection =proj)
# 在地图上添加海岸线特征,使用10m的比例尺。
ax.add_feature(cfeature.COASTLINE.with_scale('10m'))
# 创建一个转换对象,用于将地图投影坐标系转换为数据坐标系。
proj_to_data = ccrs.PlateCarree()._as_mpl_transform(ax) - ax.transData
# 将矩形边界路径转换为目标投影坐标系下的路径。
rect_in_target = proj_to_data.transform_path(rect)
# 设置地图的边界范围为转换后的目标路径。
ax.set_boundary(rect_in_target)
# 设置地图的横向范围为目标路径的最小和最大横坐标。
ax.set_xlim(rect_in_target.vertices[:,0].min(), rect_in_target.vertices[:,0].max())
# 设置地图的纵向范围为目标路径的最小和最大纵坐标。
ax.set_ylim(rect_in_target.vertices[:,1].min(), rect_in_target.vertices[:,1].max())
# 在地图上添加海洋特征,设置线宽和颜色。
ax.add_feature(cartopy.feature.OCEAN, linewidth=.3, color='lightblue')
# 在地图上添加陆地特征,设置显示顺序和边界颜色。
ax.add_feature(cartopy.feature.LAND, zorder=1, edgecolor='black')
# 添加经纬网格线,设置是否显示标签、线型等参数。
gl=ax.gridlines(draw_labels=True, x_inline=False, y_inline=False, linestyle='dashed')
gl.top_labels=False
gl.right_labels=False
gl.rotate_labels=False
gl.xlocator=ctk.LongitudeLocator(4)
gl.ylocator=ctk.LatitudeLocator(6)
gl.xformatter=ctk.LongitudeFormatter(zero_direction_label=True)
gl.yformatter=ctk.LatitudeFormatter()

示例2:兰伯特等角投影-高纬度非矩形投影(与示例1类似)

兰伯特等角投影


# # -----------------------------------------------------------------------------
# #                高纬度非矩形投影
# # -----------------------------------------------------------------------------

# 创建figure对象
fig = plt.figure(figsize=(3, 2.5), dpi=400, linewidth=1)  
# 定义了地图的经度和纬度范围,即左侧经度、右侧经度、下方纬度和上方纬度。
lon1, lon2, lat1, lat2 = [100, 180, 58, 85]
# -----------------------------------------------------------------------------
# 创建了一个矩形路径,用于表示地图的边界范围,并使用150个插值点对其进行插值处理。
rect = mpath.Path([[lon1, lat1], [lon2, lat1],
                    [lon2, lat2], [lon1, lat2], [lon1, lat1]]).interpolated(150)
# 定义了一个兰伯特等角投影,设置了中心经度和中心纬度为地图范围的中心点。
proj = ccrs.LambertConformal(central_longitude=(lon1 + lon2) * 0.5,
                              central_latitude=(lat1 + lat2) * 0.5)
# 在图形上创建一个子图,指定了投影类型为之前定义的兰伯特等角投影。
ax = fig.subplots(1, 1, subplot_kw = {'projection': proj})
# ---关键部分-------关键部分------------------关键部分-------------------关键部分----------
proj_to_data = ccrs.PlateCarree()._as_mpl_transform(ax) - ax.transData
rect_in_target = proj_to_data.transform_path(rect)
ax.set_boundary(rect_in_target)
ax.set_xlim(rect_in_target.vertices[:, 0].min(), rect_in_target.vertices[:, 0].max())
ax.set_ylim(rect_in_target.vertices[:, 1].min(), rect_in_target.vertices[:, 1].max())
# 在地图上添加海洋特征,设置线宽和颜色。
ax.add_feature(cartopy.feature.OCEAN, linewidth=.3, color='lightblue')
# 在地图上添加陆地特征,设置显示顺序和边界颜色。
ax.add_feature(cartopy.feature.LAND, zorder=1, edgecolor='black')

ax.add_feature(cfeature.COASTLINE.with_scale('50m'), linewidth=0.1)
ax.spines['bottom'].set_linewidth('0.2')
gl=ax.gridlines(draw_labels=True, x_inline=False, y_inline=False, linestyle='dashed')
gl.top_labels=False
gl.right_labels=False
gl.rotate_labels=False
gl.xlocator=ctk.LongitudeLocator(4)
gl.ylocator=ctk.LatitudeLocator(6)
gl.xformatter=ctk.LongitudeFormatter(zero_direction_label=True)
gl.yformatter=ctk.LatitudeFormatter()


前两个示例,实现的过程基本一致,通过一个坐标转换对象加上边界限制实现非规则矩形的投影。这里可以将代码展开,进而了解其中的运行逻辑:

解析

  • 创建一个子图,得到如下的一个底图:

创建子图


# 创建figure对象
fig = plt.figure(figsize=(3, 2.5), dpi=400, linewidth=4)  
# 定义了地图的经度和纬度范围,即左侧经度、右侧经度、下方纬度和上方纬度。
lon1, lon2, lat1, lat2 = [100, 180, 58, 85]
# -----------------------------------------------------------------------------
# 创建了一个矩形路径,用于表示地图的边界范围,并使用150个插值点对其进行插值处理。
rect = mpath.Path([[lon1, lat1], [lon2, lat1],
                    [lon2, lat2], [lon1, lat2], [lon1, lat1]]).interpolated(150)
# 定义了一个兰伯特等角投影,设置了中心经度和中心纬度为地图范围的中心点。
proj = ccrs.LambertConformal(central_longitude=(lon1 + lon2) * 0.5,
                              central_latitude=(lat1 + lat2) * 0.5)
# 在图形上创建一个子图,指定了投影类型为之前定义的兰伯特等角投影。
ax = fig.subplots(1, 1, subplot_kw = {'projection': proj})
  • 坐标转换并添加边界限制

值得注意的是在坐标转换中需要进行ccrs.PlateCarree()的转换,因为在使用 ax.set_boundary() 方法时,需要将路径(rect)从其当前的投影坐标系转换为与地图子图(ax)相同的坐标系。这是因为 set_boundary() 方法要求提供的路径必须与地图子图的坐标系相匹配。

在这种情况下,ccrs.PlateCarree()._as_mpl_transform(ax) 的作用是创建一个从地理坐标系(PlateCarree)到地图子图坐标系的转换。这个转换对象(proj_to_data)然后被用来将路径 rect 从地理坐标系转换到地图子图坐标系,以确保它与地图子图的坐标系相匹配。

因此,ccrs.PlateCarree() 用于创建一个地理坐标系到地图子图坐标系的转换对象,以确保正确地转换路径;虽然在理论上可以使用其他投影进行转换,但这可能会导致更多的复杂性和可能的误差。其他投影通常会在地图的不同区域产生不同的变形,因此在使用其他投影进行转换时,你需要确保理解其在特定区域内的变形特性,并相应地处理。

坐标转换

proj_to_data = ccrs.PlateCarree()._as_mpl_transform(ax) - ax.transData
rect_in_target = proj_to_data.transform_path(rect)
ax.set_boundary(rect_in_target)
  • 设置边界范围与目标区域的边界范围一致

设置边界范围

ax.set_xlim(rect_in_target.vertices[:, 0].min(), rect_in_target.vertices[:, 0].max())
ax.set_ylim(rect_in_target.vertices[:, 1].min(), rect_in_target.vertices[:, 1].max())
  • 添加地图要素信息,以及标签等

最终结果


# 在地图上添加海洋特征,设置线宽和颜色。
ax.add_feature(cartopy.feature.OCEAN, linewidth=.3, color='lightblue')
# 在地图上添加陆地特征,设置显示顺序和边界颜色。
ax.add_feature(cartopy.feature.LAND, zorder=1, edgecolor='black')

ax.add_feature(cfeature.COASTLINE.with_scale('50m'), linewidth=0.1)
ax.spines['bottom'].set_linewidth('4')
gl=ax.gridlines(draw_labels=True, x_inline=False, y_inline=False, linestyle='dashed')
gl.top_labels=False
gl.right_labels=False
gl.rotate_labels=False
gl.xlocator=ctk.LongitudeLocator(4)
gl.ylocator=ctk.LatitudeLocator(6)
gl.xformatter=ctk.LongitudeFormatter(zero_direction_label=True)
gl.yformatter=ctk.LatitudeFormatter()
plt.show()

示例3: 非规则矩形投影 - 无坐标转换

  • 与前两个代码相比代码更简洁一点

示例3

fig = plt.figure(figsize=(8,6),dpi= 200)
# 定义了地图的经度和纬度范围
xmin,xmax,ymin,ymax = [100, 160, 58, 85]
proj = ccrs.LambertConformal(central_longitude=(xmin+xmax)/2, central_latitude=(ymin+ymax)/2)
# 在图形上创建一个子图,指定了投影类型为之前定义的兰伯特等角投影。
ax = fig.add_subplot(1, 1, 1, projection=proj)
n = 10
# 创建了一个表示感兴趣区域(AOI)的路径,通过连接一系列经纬度坐标点形成闭合区域。
aoi = mpath.Path(
    list(zip(np.linspace(xmin,xmax, n), np.full(n,ymax))) + \
    list(zip(np.full(n,xmax), np.linspace(ymax,ymin, n))) + \
    list(zip(np.linspace(xmax,xmin, n), np.full(n,ymin))) + \
    list(zip(np.full(n,xmin), np.linspace(ymin,ymax, n)))
)
# 设置地图的边界范围为之前定义的感兴趣区域路径,并指定了路径的坐标系转换。
ax.set_boundary(aoi, transform=ccrs.PlateCarree())
# Plot Ocean Borders
ocean = cf.NaturalEarthFeature('physical','ocean',scale='50m',edgecolor='k',facecolor='lightblue',lw=1,linestyle='-')
ax.add_feature(ocean)
# Colored Land Background
land = cf.NaturalEarthFeature('physical','land',scale='50m',facecolor='snow',lw=1,linestyle='--')
ax.add_feature(land)
# 设置地图的显示范围为之前定义的经纬度范围,并指定了坐标系。
ax.set_extent([xmin,xmax,ymin,ymax],crs=ccrs.PlateCarree())
# Set gridlines to variable so you can manipulate them
gl = ax.gridlines(draw_labels=True,crs=ccrs.PlateCarree(),x_inline=False,y_inline=False)
# gl.xlocator = mticker.FixedLocator([110,130,150])
# gl.ylocator = mticker.FixedLocator([50,55,60,65,70])
gl.xformatter = LONGITUDE_FORMATTER
gl.yformatter = LATITUDE_FORMATTER
gl.top_labels=False
plt.show()

示例4:高纬度非规则投影添加黑色斑马线边框- 正交投影

正交投影


# # -----------------------------------------------------------------------------
# #                高纬度非矩形投影,添加黑色斑马线边框(matlab风格)
# # -----------------------------------------------------------------------------
# # 平面直角坐标系,中心经度设置为0度。
noProj = ccrs.PlateCarree(central_longitude=0)
# 定义了一个正交投影的地理坐标系,中心经纬度分别设置为经度-25度、纬度58度。
myProj = ccrs.Orthographic(central_longitude=-25, central_latitude=58)
# 调整了正交投影的阈值,以提高绘图的精度。
myProj._threshold = myProj._threshold/40.  
fig = plt.figure(figsize=(8,12),dpi= 200)
# 在图形上创建一个子图,指定了投影类型为之前定义的正交投影。
ax = fig.add_subplot(1, 1, 1, projection=myProj)
# 使用plot函数绘制了一个多边形边界线,通过一系列经纬度坐标点来定义多边形的形状。
[ax_hdl] = ax.plot(
    [
        -45, -40, -35, -30, -25, -20, -15, -10, -5,
        -5,-5,-5,-5,-5,
        -10,-15,-20,-25,-30,-35,-40,-45,
        -45, -45, -45, -45, -45
    ],
    [
        45, 45, 45, 45, 45, 45, 45, 45, 45,
        50, 55, 60, 65, 70,
        70,70,70,70,70,70,70,70,
        65, 60, 55, 50, 45 
    ],
    color='black', linewidth=0.5,
    transform=noProj)
# 获取了绘制多边形边界线后的路径,并将其转换为数据坐标系。
tx_path = ax_hdl._get_transformed_path()
# 创建了一个路径对象,表示多边形边界线的形状。
path_in_data_coords, _ = tx_path.get_transformed_path_and_affine()
# 创建了一个路径对象,表示多边形边界线的形状,
polygon1s = mpath.Path( path_in_data_coords.vertices)
vcode = [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1]  #Path-code
# 创建了一个带有路径代码的路径对象。
polygon1v = mpath.Path( path_in_data_coords.vertices, vcode)
# 设置地图的边界范围为多边形边界线的形状,用于遮罩地图的不需要部分。
ax.set_boundary(polygon1s) 
# 创建一个路径补丁对象,用于绘制多边形边界线的线条。
patch1s = patches.PathPatch(polygon1s, facecolor='none', ec="black", lw=7, zorder=100)
# 创建另一个路径补丁对象,用于绘制多边形边界线的虚线。
patch1v = patches.PathPatch(polygon1v, facecolor='none', ec="white", lw=6, zorder=101)
# 在地图上添加多边形边界线的线条。
ax.add_patch(patch1s)
# 在地图上添加多边形边界线的虚线。
ax.add_patch(patch1v)
# # 添加经纬网格线,设置是否显示标签等参数。
ax.gridlines(draw_labels=True, x_inline=False, y_inline=False)
# 在地图上添加海洋\陆地特征。
ax.add_feature(cartopy.feature.OCEAN, linewidth=.3, color='lightblue')
ax.add_feature(cartopy.feature.LAND, zorder=1, edgecolor='black')
ax.title.set_text("Map with zebra border line")
plt.show()

示例5:高纬度非规则投影添加黑色斑马线边框- 等经纬度投影

平面投影

只需要在示例4的基础上将myProj = ccrs.Orthographic(central_longitude=-25, central_latitude=58),修改为myProj = ccrs.PlateCarree(central_longitude=180)即可。

当然,在我的测试下,示例4-5的代码不太友好,如果需要更换区域的话需要手动去调整,更适用于一种添加边框的思路。下面解释的这种方法,更加简便。

示例6: 等经纬度投影添加斑马线边框

image

  • 通过一个函数来实现边框的添加,函数首先隐藏了地图坐标轴的边框,然后获取地图的范围(左、右、底、顶)。

  • 接下来,使用 itertools.cycle 创建一个交替生成黑色和橙色的迭代器,用于绘制交替的线段。

  • 然后,对经度和纬度分别进行循环处理,绘制横向和纵向的线段。对于经度,线段的起点和终点在纬度范围内(底部到顶部);对于纬度,线段的起点和终点在经度范围内(左侧到右侧)。

  • 对于第一个和最后一个线段,采用了 “projecting” 线段末端的样式,使得它们更突出。

  • 最后,将线段绘制在地图上,使用了一些参数来控制线段的样式和外观,例如线段宽度、裁剪、投影类型等。同时,通过添加路径效果(path_effects)来增强线段的视觉效果,如增加黑色边框以突出白色线段。

通过函数的裁剪后,可以非常方便的修改ax.set_extent((100, 140, -30, 22))中的区域范围,实现区域的调整。缺点是只在等经纬度投影下的效果较好,在其他投影的效果还需要进行调整




def add_zebra_frame(ax, lw=2, crs="PlateCarree", zorder=None):
    ax.spines["geo"].set_visible(False)
    left, right, bot, top = ax.get_extent()
    # Alternate black and white line segments
    bws = itertools.cycle(["k", "orange"])
    xticks = sorted([left, *ax.get_xticks(), right])
    xticks = np.unique(np.array(xticks))
    yticks = sorted([bot, *ax.get_yticks(), top])
    yticks = np.unique(np.array(yticks))
    for ticks, which in zip([xticks, yticks], ["lon", "lat"]):
        for idx, (start, end) in enumerate(zip(ticks, ticks[1:])):
            bw = next(bws)
            if which == "lon":
                xs = [[start, end], [start, end]]
                ys = [[bot, bot], [top, top]]
            else:
                xs = [[left, left], [right, right]]
                ys = [[start, end], [start, end]]
            # For first and lastlines, used the "projecting" effect
            capstyle = "butt" if idx not in (0, len(ticks) - 2) else "projecting"
            for (xx, yy) in zip(xs, ys):
                ax.plot(
                    xx,
                    yy,
                    color=bw,
                    linewidth=6,
                    clip_on=True,
                    transform=crs,
                    zorder=zorder,
                    solid_capstyle=capstyle,
                    # Add a black border to accentuate white segments
                    path_effects=[
                        pe.Stroke(linewidth=lw + 1, foreground="black"),
                        pe.Normal(),
                    ],
                )


crs = ccrs.PlateCarree()
fig = plt.figure(figsize=(10, 8),dpi=200)
ax = fig.add_subplot(111,projection=crs)
ax.coastlines()
ax.set_extent((100, 140, -30, 22))
ax.add_feature(cfeature.OCEAN, linewidth=.3, color='lightblue')
ax.add_feature(cfeature.LAND, zorder=1, edgecolor='black')

gl = ax.gridlines(draw_labels=True, x_inline=False, y_inline=False, linestyle='dashed')
gl.top_labels = False
gl.right_labels = False
gl.rotate_labels = False
gl.xlocator = ctk.LongitudeLocator(8)
gl.ylocator = ctk.LatitudeLocator(6)
gl.xformatter = ctk.LongitudeFormatter(zero_direction_label=True)
gl.yformatter = ctk.LatitudeFormatter()
add_zebra_frame(ax, crs=crs)
ax.set_title("Map with zebra border line")
plt.show()


参考:

https://stackoverflow.com/questions/57313303/how-to-plot-zebra-style-axis-in-matplotlib
https://stackoverflow.com/questions/74124975/cartopy-fancy-box

文字部分解释和代码均来自于gpt~

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

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

相关文章

element-ui 表单校验,失去焦点/框内值改变,校验

前提:在el-form表单中,框中有值,失去焦点或者框内值改变的时候,校验提示,依旧没有消失el-select校验失效问题 之前el-select,trigger时候用的“blur”,导致失效,现在 el-select 统一改为"c…

PyTorch深度学习实战(40)——零样本学习(Zero-Shot Learning)

PyTorch深度学习实战(40)——零样本学习 0. 前言1. 零样本学习2. 实现零样本学习模型2.1 模型分析2.2 构建零样本学习模型 小结系列链接 0. 前言 零样本学习 (Zero-Shot Learning) 是一种机器学习方法,旨在解决传统监督学习中,当…

pulsar存在大量消费未ack的原因

问题起源: 某产品灰度上线后,从pulsar服务端监控发现存在一种现象:消费但未ack的信息不断增加,直到3000左右就稳定下来了且消费速度为0,但不清楚这3000是怎么来的,因为代码是消费到立马ack的; …

格雷希尔G10系列L150A和L200A气动快速连接器,在新能源汽车线束线缆剥线后的气密性测试密封方案

线束线缆在很多用电环境都有使用,比如说新能源汽车,从电池包放电开始,高低压、通讯都开始进行工作,线束在连接的地方需要具有较高的气密性和稳定性,才能保证车辆在不同环境下能够正常的运行。 线束在组装铜鼻子前需要剥…

【Oracle篇】expdp/impdp高效完成全部生产用户的全库迁移(第四篇,总共四篇)

☘️博主介绍☘️: ✨又是一天没白过,我是奈斯,DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux,也在扩展大数据方向的知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣️❣️…

基于SpringBoot的游戏商城系统的设计与实现(论文+源码)_kaic

目录 1前言 1.1研究的背景及意义 1.2国内外的研究状况和发展趋势 2需求分析 2.1系统需求分析 2.1.1技术可行性 2.1.2经济可行性 2.1.3操作可行性 2.2系统的开发环境 2.2.1 Springboot框架 2.2.2 数据库Mysql 2.2.3 IntelliJ IDEA平台 2.2.4 Mybatis和MyBatis-plus 2.2.5 前端框…

火鸟门户同城模块

同城活动 同城活动是指在同一城市举办的活动,可以是多种类型,例如: 聚会:朋友聚会、同学聚会、兴趣爱好聚会等。展览:艺术​​展览、科技展览、文化展览等。演出节目:演唱会、音乐会、戏剧表演等。比赛项…

JumpServer 堡垒主机

JumpServer 堡垒机帮助企业以更安全的方式管控和登陆各种类型的资产 SSH:Linux/Unix/网络设备等Windows:Web方式连接/原生RDP连接数据库:MySQL、Oracle、SQLServer、PostgreSQL等Kubernetes:连接到K8s集群中的PodsWeb站点&#x…

Backend - gitea 首次建库(远端本地)

目录 一、建立远端储存库 1. 进入新增画面 2. 填写储存库名称(如book),点击“建立”即可 二、本地关联远端储存库 1. 本地初始化储存库代码 (1)新建文件夹 (2)获取远端储存库 2. 本地编写…

前端学习<二>CSS基础——14-CSS3属性详解:Web字体

前言 开发人员可以为自已的网页指定特殊的字体(将指定字体提前下载到站点中),无需考虑用户电脑上是否安装了此特殊字体。从此,把特殊字体处理成图片的方式便成为了过去。 支持程度比较好,甚至 IE 低版本的浏览器也能…

HTML期末作业-香水网站,逐步讲解

知名品牌 CHANEL I wear nothing but a few drops of Chanel No.5. 了解更多 GIVENCHY 纪梵希香水几乎就是赫本本人的化身——经典、优雅、高贵、简洁、女性化 了解更多 DIOR Dior Addict the now fragrance from Dior. 了解更多 BURBUEEY The good things in life neve…

大数据技术之 Apache Doris(一)

第 1 章 Doris 简介 1.1 Doris 概述 Apache Doris 由百度大数据部研发(之前叫百度 Palo,2018 年贡献到 Apache 社区后,更名为 Doris ),在百度内部,有超过 200 个产品线在使用,部署机器超过 10…

抽象类和接口(2)(接口部分)

❤️❤️前言~🥳🎉🎉🎉 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥&a…

微信公众号账号迁移主体怎么变更?

公众号迁移有什么作用?只能变更主体吗?大家都知道,公众号是不支持直接变更主体的;但是很多情况下,我们又不得不进行账号主体的更换;这时候,我么就可以通过账号迁移功能,将A公众号的粉…

MySQL使用技巧,高级Java开发必看

insert into tab(col1,col2…) select … 5、活用正则表达式 regexp ^ $ . * | 6、关联查询比子查询效率快,优先使用join关联查询 7、if(exp,v1,v2) if()函数的使用 exp:表达式 v1:exp为真时返回的值 v2:exp为假时返回的值 8、case when… then… else… en…

广和通发布基于高通高算力芯片的具身智能机器人开发平台Fibot

3月29日,为助力机器人厂商客户快速复现及验证斯坦福Mobile ALOHA机器人的相关算法,广和通发布具身智能机器人开发平台Fibot。作为首款国产Mobile ALOHA机器人的升级配置版本,开发平台采用全向轮底盘设计、可拆卸式训练臂结构,赋予…

AI如何影响装饰器模式与组合模式的选择与应用

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL应用》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自热榜文章:设计模式深度解析:AI如何影响…

[C/C++] -- 二叉树

1.简介 二叉树是一种每个节点最多有两个子节点的树结构,通常包括:根节点、左子树、右子树。 满二叉树: 如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。深度为k&a…

10、电科院FTU检测标准学习笔记-双遥信及变位优先验证

———————————————————————————————————— 作者简介: 本人从事电力系统多年,岗位包含研发,测试,工程等,具有丰富的经验 在配电自动化验收测试以及电科院测试中,本人全程参…

电脑win10系统更新后开机很慢,更新win10后电脑开机怎么变慢了

很多用户反映,更新win10后电脑开机怎么变慢了呢?现在动不动就要30几秒,以前都是秒开机的,要怎么设置才能提高开机速度?小伙伴们别着急,主要原因可能是关机设置中没有勾选启用快速启动,或者是开机启动设置的问题,针对开机变慢的情况,小编整理了2个处理方法,接下来,我…