shp地圖文件包含中文時, 程序報錯的解決方法

shp地圖文件包含中文時, 有些程序不容中文(比如某些python),程序就會報錯。

其中一個解決方法是,修改shp文件。

有時候用讀SHP的軟件打開刪掉中文還是沒法解決,可能是你能看到的中文不見了,可以編碼方式或一些你沒看出來的中文還在。

這裏,我就用MATLAB重新生成一個沒中文的SHP.

可以看到,SHP中有各省份的名字,先建立一個中英省份名字一一對應的表p2。然後進行操作。

代碼如下:

function [outp]=changeshp()
    p=shaperead('bou2_4p.shp');
    mm=load('pro_name.mat');
    mm=mm.p2; %table of chinese to english
    
    outp={}
    for i =1:length(p)
        outp(i).Geometry=p(i).Geometry;
        outp(i).BoundingBox=p(i).BoundingBox;
        outp(i).X=p(i).X;
        outp(i).Y=p(i).Y;
        outp(i).AREA=p(i).AREA;
        outp(i).PERIMETER=p(i).PERIMETER;
        outp(i).BOU2_4M_=p(i).BOU2_4M_;
        outp(i).BOU2_4M_ID=p(i).BOU2_4M_ID;
        outp(i).ADCODE93=p(i).ADCODE93;
        outp(i).ADCODE99=p(i).ADCODE99;
        outp(i).NAME=''
        for ii =1:size(mm,1)
            if strcmp(mm{ii,1}{1},p(i).NAME)==1
                outp(i).NAME=mm{ii,2}{1};
                break
            end
        end
        
    end
    shapewrite(outp,'mychinamap.shp')  %%p
end

那麼,生成的mychinamap就可以給各種讀不了中文的程序讀了。

利用這個新的中國地圖SHP,可以導出各省的SHP,邏輯很程單,直接貼代碼了。

function [outp]=getpro(ipro)
    p=shaperead('mychinamap.shp');
    mm=load('pro_name.mat');
    mm=mm.p2;
    
    %ipro=14;
    outp={};
    outpi=1;
    for i =1:length(p)
        if strcmp(mm{ipro,2}{1},p(i).NAME)==1
            outp(outpi).Geometry=p(i).Geometry;
            outp(outpi).BoundingBox=p(i).BoundingBox;
            outp(outpi).X=p(i).X;
            outp(outpi).Y=p(i).Y;
            outp(outpi).AREA=p(i).AREA;
            outp(outpi).PERIMETER=p(i).PERIMETER;
            outp(outpi).BOU2_4M_=p(i).BOU2_4M_;
            outp(outpi).BOU2_4M_ID=p(i).BOU2_4M_ID;
            outp(outpi).ADCODE93=p(i).ADCODE93;
            outp(outpi).ADCODE99=p(i).ADCODE99;
            outp(outpi).NAME=p(i).NAME;
            outpi=outpi+1;
        end
    end
    outpi
    shapewrite(outp,[mm{ipro,2}{1},'_province.shp']);  %%p
    
end

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值