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
