使用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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 14,534评论 2 59
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,045评论 8 265
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,741评论 25 709
  • 我一直觉的自己和自己强烈的不相关。不知道为自己考虑和打算,甚至刻意背离自己。 我一点也不愿意为自己付出努力,甚至根...
    蹒跚幸福阅读 1,634评论 0 0
  • 今天察觉到很重要的一个事情,也就是之前自己很多的学习好像都是一个片面的东西,就好像只是一个横切面,而不是一个纵面。...
    吾宗老孙子阅读 1,760评论 0 0

友情链接更多精彩内容