zoukankan      html  css  js  c++  java
  • 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);
    

  • 相关阅读:
    Redis
    Linux 命令
    Linux 命令
    Networking
    Networking
    MySQL(5.6) 函数
    MySQL 中事务、事务隔离级别详解
    程序人生:搜索引擎被禁用,你还会写代码吗?
    程序人生:搜索引擎被禁用,你还会写代码吗?
    程序员幽默:老板让明天带条鱼来大家观察
  • 原文地址:https://www.cnblogs.com/Gou-Hailong/p/13559150.html
Copyright © 2011-2022 走看看