使用QGis 对同一区域的卫星图片和道路地图配对输出

学了没记等于没学 --贺浩

上次用qgis做了openstreet的地图输出,完全没有任何记录,现在重新学并记下来

工具

  • Qgis
  • Openlayer plugin

暂时先这么开始

  1. 使用openlayer加载osm和bing aerial 图层;
  2. 选中区域, 用vector OSM工具中download data下载osm数据,保存成.osm 格式,接下来可以读取该osm文件并为所欲为了;
  3. 同样使用Vector->OSM工具将下载的osm文件读成xml文件;
  4. 接下来,使用OSM的第三个工具,提取感兴趣的点、线和多边形;

在这之前都没有什么难度 。


image

我们注意到,图层管理器中多了一项 ××--polylines,这是因为我感兴趣的主要是道路。现在可以关掉osm图层专心研究polylines了

  1. 双击polylines图层可以查看和修改其属性,包括目标的名字,性质,像素宽度等等,如下图所示。
  2. 按理来说,现在选择感兴趣区域,感兴趣图层,手工点菜单栏Project->Save as image 就OK了,但是我还有更多的需求,希望选取一大片区域,把这片区域的OSM图保存成我希望的大小,那么另开一段。


    image

将OSM数据转换为shp文件并保存为图片

1 . 首要我们要知道,想要将图层保存下来,最好将图层转化成shp格式,因此我们将刚才保存的db文件保存成shp文件


image
  1. 接下来用一段代码来总结这篇笔记 T T
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Jun 25 18:19:28 2018
CONVERT SHP FILE TO IMAGE
@author: hehao
"""


import os
import sys
import mapnik # for drawing 
from osgeo import ogr # for open shapefile


shp_path = 'your_path/*.shp'

X = int(10240)  
Y = int(10240)
if X <= 0 or Y <= 0:
    print('Image size should be positive')
    exit()

layer_type = 'pl'

xmin = xmax = ymin = ymax = None



def render_img(width, height, layer, output, minx, miny, maxx, maxy, layer_type):
  m = mapnik.Map(width, height)
  s = mapnik.Style()

  r = mapnik.Rule()
  symbolizer = None
  if layer_type == "pt":
      print('not implement!') 
      return
  elif layer_type == "pl":
      symbolizer = mapnik.LineSymbolizer()
      symbolizer.stroke = mapnik.Color('#ff0000')
      symbolizer.width = 0.3
  elif layer_type == "pg":
      symbolizer = mapnik.PolygonSymbolizer()
      symbolizer.fill =  mapnik.Color('#ff0000')
  else:
      return
  r.symbols.append(symbolizer)

  s.rules.append(r)
  m.append_style('style', s)

  mlayer = mapnik.Layer(str("test_layer"))
  print('layer param: ', layer)
  mlayer.datasource = mapnik.Shapefile(file=layer)
  mlayer.styles.append('style')

  m.layers.append(mlayer)
  tile_bounds = (minx, miny, maxx, maxy)
  box = mapnik.Box2d(*tile_bounds)
  m.zoom_to_box(box)

  print(output)
  mapnik.render_to_file(m, output)


ds = ogr.Open(shp_path) 
layer = ds.GetLayer(0)
if xmin is None:
    xmin, xmax, ymin, ymax = layer.GetExtent()

render_img(X, Y, shp_path, './out.png', xmin, ymin, xmax, ymax, layer_type)

这里放一个怎么使用Qgis下载OSM数据并检索的官方教程

Searching and Downloading OpenStreetMap Data

你可能感兴趣的:(使用QGis 对同一区域的卫星图片和道路地图配对输出)