爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 26785|回复: 10

[经验总结] cartopy白化分享_2

[复制链接]

新浪微博达人勋

发表于 2020-8-18 22:13:12 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 坎坷 于 2020-8-18 22:27 编辑

是笔者上个帖子的脚本资源,大家支持一下哈!
map_1.png
map_f.py (1.85 KB, 下载次数: 23, 售价: 1 贡献)

本帖被以下淘专辑推荐:

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-9-12 07:53:34 | 显示全部楼层
请问楼主有没有散点图白化的方法呀
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-9-14 08:05:56 | 显示全部楼层
请问楼主可以免费发一份吗?我的贡献值不够,谢谢啊,我的邮箱是2514330828@qq.com
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-8-25 09:30:54 | 显示全部楼层
'utf-8' codec can't decode byte 0xb1 in position 0: invalid start byte

楼主大大,这个问题怎么解决啊
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-8-25 09:51:55 | 显示全部楼层
Divine 发表于 2021-8-25 09:30
'utf-8' codec can't decode byte 0xb1 in position 0: invalid start byte

楼主大大,这个问题怎么解决 ...

在mask的reader中传递shp文件的编码。可以通过notepad++打开shp,右下角有编码方式。
比如encoding=‘ANSI’  或者‘GBK’
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-8-25 14:47:49 | 显示全部楼层
edwardli 发表于 2021-8-25 09:51
在mask的reader中传递shp文件的编码。可以通过notepad++打开shp,右下角有编码方式。
比如encoding=‘AN ...

ANSI和GBK都试了还是不行,报出了同样的错误,还有什么编码吗?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-8-25 15:05:25 | 显示全部楼层
Divine 发表于 2021-8-25 14:47
ANSI和GBK都试了还是不行,报出了同样的错误,还有什么编码吗?

"可以通过notepad++打开shp,右下角有编码方式。"
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-8-25 15:53:12 | 显示全部楼层
edwardli 发表于 2021-8-25 15:05
"可以通过notepad++打开shp,右下角有编码方式。"

1629877873(1).png 右下角是ANSI,但是内容乱码,写进去也还是同样的错误,愁死我了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-8-25 16:09:46 | 显示全部楼层
本帖最后由 edwardli 于 2021-8-25 16:12 编辑
Divine 发表于 2021-8-25 15:53
右下角是ANSI,但是内容乱码,写进去也还是同样的错误,愁死我了

复制代码
我打开了Province.shp,内容和你的一样。


def shp2clip(originfig,ax,shpfile,region, clabel = None, vcplot = None):
    sf = shapefile.Reader(shpfile,encoding='ANSI')
    vertices = []
    codes = []
    for shape_rec in sf.shapeRecords():
        ####这里需要找到和region匹配的唯一标识符,record[]中必有一项是对应的。
        if shape_rec.record[1] == region:   #####在country1.shp上,对中国以外的其他国家或地区进行maskout
        # if shape_rec.record[7] in region:  #####在bou2_4p.shp上,对中国的某几个省份或地区之外的部分进行maskout
            pts = shape_rec.shape.points
            prt = list(shape_rec.shape.parts) + [len(pts)]
            for i in range(len(prt) - 1):
                for j in range(prt, prt[i+1]):
                    vertices.append((pts[j][0], pts[j][1]))
                codes += [Path.MOVETO]
                codes += [Path.LINETO] * (prt[i+1] - prt -2)
                codes += [Path.CLOSEPOLY]
            clip = Path(vertices, codes)
            plate_carree_transform = ccrs.PlateCarree()._as_mpl_transform(ax)
            clip = PathPatch(clip, transform=plate_carree_transform)
    if vcplot:
        if isinstance(originfig,Iterable):
            for ivec in originfig:
                ivec.set_clip_path(clip)
        else:
            originfig.set_clip_path(clip)
    else:
        for contour in originfig.collections:
        # for contour in originfig:
            contour.set_clip_path(clip)
            print(0)
    if  clabel:
        clip_map_shapely = ShapelyPolygon(vertices)
        for text_object in clabel:
            if not clip_map_shapely.contains(ShapelyPoint(text_object.get_position())):
                text_object.set_visible(False)   
    return clip



clip = shp2clip(cs, ax, 'D:/pycode/shp/Province.shp','河北省')
Province.PNG

masked.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-9-16 21:44:28 | 显示全部楼层
感谢楼主

maskout文件很有用
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表