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