使用python爬取智图地图切片

智图(www.qeoq.cn)是国内领先的网络地图提供商。
本例抓取智图网络地图局部切片并进行拼接以满足本地使用。

使用python3.6抓取数据

import urllib.request

#此处经纬度范围可根据具体要求调整
#本例范围为成都
xmin=51695
xmax=51745
ymin=26870
ymax=26920
x=xmin
y=ymin
num=0
while(x<xmax):
    while(y<ymax):
        num=num+1
        url = 'https://thematic.geoq.cn/arcgis/rest/services/StreetThematicMaps/Gray_OnlySymbol/MapServer/tile/16/'+str(y)+'/'+str(x)+'?blankTile=false'
        #'url'中的'Gray_OnlySymbol'为地图类型,可根据需要调整
        #'url'中的'16'为图幅大小,可根据需要调整
        HEADERS = {
        'Accept':'*/*',
        'Accept-Encoding':'gzip, deflate, br',
        'Accept-Language':'zh-CN,en-US;q=0.7,en;q=0.3',
        'Connection':'keep-alive',
    'Cookie':'Hm_lvt_ca4d6c93ba95a519be60addfd546ac72=1533781615,1533806950,1533807108,1533807258',
        'Host':'thematic.geoq.cn',
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0'
        }
        request = urllib.request.Request(url, headers=HEADERS)
        r_response = urllib.request.urlopen(request)
        r=r_response.read()
        #保存为png文件
        with open('D://'+str(y)+'_'+str(x)+'.png', 'wb') as f:
            f.write(r)
            print('第'+str(num)+'幅')
        y=y+1
    x=x+1
    y=ymin

使用matlab(2017b)进行拼接

clc;
clear;
num=0;
x=26870;
y=51695;

%先读入第一行第一列
newData = importdata(['D:/',int2str(x),'_',int2str(y),'.png']);
vars = fieldnames(newData);
for i = 1:length(vars)
    assignin('base', vars{i}, newData.(vars{i}));
end
%默认的保存格式是颜色图(颜色分类(cdata)+颜色映射(colormap))
%转换为rgb格式
img = ind2rgb(cdata,colormap);
y=51696;

%再读入第一行剩余列
while(y<51745)
    newData = importdata(['D:/',int2str(x),'_',int2str(y),'.png']);
vars = fieldnames(newData);
for i = 1:length(vars)
    assignin('base', vars{i}, newData.(vars{i}));
end
%转换为rgb
de = ind2rgb(cdata,colormap);
    img=[img,de];
    y=y+1;
end
x=x+1;
all=img;

%读入剩余行列
while(x<26920)
    y=51695;
    newData = importdata(['D:/',int2str(x),'_',int2str(y),'.png']);
vars = fieldnames(newData);
for i = 1:length(vars)
    assignin('base', vars{i}, newData.(vars{i}));
end
img= ind2rgb(cdata,colormap);
    y=51696;
    while(y<51745)
        num=num+1;
        disp('num');
        newData = importdata(['D:/',int2str(x),'_',int2str(y),'.png']);
vars = fieldnames(newData);
for i = 1:length(vars)
    assignin('base', vars{i}, newData.(vars{i}));
end
de = ind2rgb(cdata,colormap);
        img=[img,de];
        y=y+1;
    end
    all=[all;img];
    x=x+1;
end

%写出数据
imwrite(all,'E:/output.png');
disp('done')

使用matlab(2017b)进行路网提取和绿地与水体提取

clc;
clear;
all=imread('E:/output.png');
new=im2bw(all,0.99);
%转为二值图提取路网
imwrite(new,'E:/street.jpg');
disp('done')
all=imread('E:/output.png');
new=im2bw(all,0.9);
%转为二值图提取绿地与水体
imwrite(new,'E:/greenland_and_water.jpg');
disp('done')

原图
原图
道路
道路
绿地与水体
绿地与水体

猜你喜欢

转载自blog.csdn.net/nju_zjy/article/details/81913732
今日推荐