美文网首页开源
使用QGis 对同一区域的卫星图片和道路地图配对输出

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

作者: Mouse_HH | 来源:发表于2018-09-20 16:37 被阅读9次

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

    上次用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 对同一区域的卫星图片和道路地图配对输出

        本文链接:https://www.haomeiwen.com/subject/kpennftx.html