• Matlab 从全国 shp 中扣出某一省份的shp并画图 函数


    1、全代码

    function varargout=drawsheng(varargin)
    %% 此函数用于从全国 shp 中扣出某一省份的 shp 并画图
    % 输入:
    %   file    shp文件路径
    %   str     要扣的东西的名字
    %   1 or 0  省1国家0,默省
    % 输出:
    %   sheng   搞出来的 shp 结构体
    %   ex      经纬极值,后续用sheng 画图,有可能会用
    % 调用:
    %   P2file='D:下载Usefulshp国家基础地理数据ou2_4mou2_4p.shp';%省界多边形
    %   str='河南省';
    %   [sheng,ex]=drawsheng(P2file,str);
    %    -------------------
    %   Sjfile='D:下载Usefulshp国家基础地理数据世界国家世界国家.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:下载Usefulshp国家基础地理数据ou2_4mou2_4p.shp';%省界多边形
    str='北京市';
    [sheng,ex]=drawsheng(P2file,str);
    

  • 相关阅读:
    美国和日本不是盟友吗,为什么拒绝出售F-22战斗机给日本?
    刚刚大学毕业,是选择创业还是选择公司上班?
    现今的社会一定要结婚吗?
    事必躬亲果真是无能的表现?
    课外辅导机构,就让疫情灭了吧!
    这些年,我读书越来越少了!
    Python操作日志、加密、发送邮件、线程、生产者消费者
    Python模块操作之re、MySQL、Excel
    Python面向对象、迭代器、range和切片的区分
    Python模块、文件读写、异常
  • 原文地址:https://www.cnblogs.com/Gou-Hailong/p/13559150.html
Copyright © 2020-2023  润新知