Matlab 從全國 shp 中扣出某一省份的shp並畫圖 函數


1、全代碼

function varargout=drawsheng(varargin)
%% 此函數用於從全國 shp 中扣出某一省份的 shp 並畫圖
% 輸入:
%   file    shp文件路徑
%   str     要扣的東西的名字
%   1 or 0  省1國家0,默省
% 輸出:
%   sheng   搞出來的 shp 結構體
%   ex      經緯極值,后續用sheng 畫圖,有可能會用
% 調用:
%   P2file='D:\下載\Useful\shp\國家基礎地理數據\bou2_4m\bou2_4p.shp';%省界多邊形
%   str='河南省';
%   [sheng,ex]=drawsheng(P2file,str);
%    -------------------
%   Sjfile='D:\下載\Useful\shp\國家基礎地理數據\世界國家\世界國家.shp';%國界
%   str='中國';
%   [sheng,ex]=drawsheng(file,str,1);
%    -------------------
%   drawsheng(file,str);
%   sheng=drawsheng(file,str);
%   [sheng]=drawsheng(file,str);
%   [sheng,ex]=drawsheng(file,str,1 or 0);  %省1國家0
%-------------------------------------------------------------------
    %%%%    Authors:   Bill O'Hanlon
    %%%%    EMAIL:     ohanlon@qq.com
    %%%%    DATE:      24-08-2020
%% 輸入
disp('--------function drawsheng--------');
mode=1;%mode指示裁剪省或國家,省1國家0
t=0;   %t指示是否是第一次找到目標結構
if nargin<2
    disp('參數不足!');
    return;
elseif nargin==2
    file=varargin{1};
    str=varargin{2};
elseif nargin==3
    file=varargin{1};
    str=varargin{2};
    mode=varargin{3};
else
    disp('參數過多!');
    return;
end
P2=shaperead(file);
n=size(P2,1);
%% 得到省的結構體
sheng=struct;
if mode==1
    for i=1:n
        if strcmp(str,P2(i).NAME)
            if t==0
                sheng=P2(i);%找到第一個多邊形
                t=1;
            else
                a=P2(i);
                sheng(end+(1:length(a))) = a;
            end
        end
    end
else if mode==0
        for i=1:n
            if strcmp(str,P2(i).FCNAME)
                if t==0
                    sheng=P2(i);%找到第一個多邊形
                    t=1;
                else
                    a=P2(i);
                    sheng(end+(1:length(a))) = a;
                end
            end
        end
    else
        disp('第三個參數錯誤!');
        return;
    end
end
disp('shp OK!');
%% 開始畫圖
subplot(121);
% 下面搞定橫縱坐標注釋
XArray=[P2(:).X];%所有多邊形的經度
YArray=[P2(:).Y];%%所有多邊形的緯度
[x,x1,y,y1]=getxy(XArray,YArray);
disp('drawing...');
mapshow(P2,'FaceColor','w');
mapshow(sheng,'FaceColor','r');
set(gca,'XTick',x,'XTicklabel',x1);   %設置x,y軸
set(gca,'YTick',y,'YTicklabel',y1);
box on;
title([str '的位置']);
axis equal

subplot(122);
% 下面搞定橫縱坐標注釋
XArray=[sheng(:).X];%所有多邊形的經度
YArray=[sheng(:).Y];%%所有多邊形的緯度
[x,x1,y,y1,ex]=getxy(XArray,YArray);
mapshow(sheng,'FaceColor','r');
set(gca,'XTick',x,'XTicklabel',x1);   %設置x,y軸
set(gca,'YTick',y,'YTicklabel',y1);
box on;
title([str '行政規划圖']);
axis equal
%% 輸出
if nargout==0
    return;
elseif nargout==1
    varargout{1}=sheng;
elseif nargout==2
    varargout{1}=sheng;
    varargout{2}=ex;
end
disp('--------Finished!--------');
end

依賴:

https://www.cnblogs.com/Gou-Hailong/p/13559123.html

2、調用

P2file='D:\下載\Useful\shp\國家基礎地理數據\bou2_4m\bou2_4p.shp';%省界多邊形
str='北京市';
[sheng,ex]=drawsheng(P2file,str);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM