123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- #!/usr/bin/env python
- """
- MODULE: r.in.wms
- AUTHOR(S): Stepan Turek <stepan.turek AT seznam.cz>
- PURPOSE: Downloads and imports data from WMS/WMTS/NASA OnEarth server.
- COPYRIGHT: (C) 2012 Stepan Turek, and by the GRASS Development Team
- This program is free software under the GNU General Public License
- (>=v2). Read the file COPYING that comes with GRASS for details.
- """
- #%module
- #% description: Downloads and imports data from OGC WMS and OGC WMTS web mapping servers.
- #% keyword: raster
- #% keyword: import
- #% keyword: OGC web services
- #% keyword: OGC WMS
- #% keyword: OGC WMTS
- #%end
- #%option
- #% key: url
- #% type: string
- #% description: Typically starts with "http://"
- #% required: yes
- #%end
- #%option G_OPT_R_OUTPUT
- #% description: Name for output raster map
- #%end
- #%option
- #% key: layers
- #% type: string
- #% description: Layer(s) to request from the map server
- #% multiple: yes
- #% required: yes
- #%end
- #%option
- #% key: styles
- #% type: string
- #% description: Layer style(s) to request from the map server
- #% multiple: yes
- #% guisection: Map style
- #%end
- #%option
- #% key: format
- #% type: string
- #% description: Image format requested from the server
- #% options: geotiff,tiff,jpeg,gif,png,png8
- #% answer: png
- #% guisection: Request
- #%end
- #%option
- #% key: srs
- #% type: integer
- #% description: EPSG code of requested source projection
- #% answer:4326
- #% guisection: Request
- #%end
- #%option
- #% key: driver
- #% type:string
- #% description: Driver used to communication with server
- #% descriptions: WMS_GDAL;Download data using GDAL WMS driver;WMS_GRASS;Download data using native GRASS-WMS driver;WMTS_GRASS;Download data using native GRASS-WMTS driver;OnEarth_GRASS;Download data using native GRASS-OnEarth driver;
- #% options:WMS_GDAL, WMS_GRASS, WMTS_GRASS, OnEarth_GRASS
- #% answer:WMS_GRASS
- #% guisection: Connection
- #%end
- #%option
- #% key: wms_version
- #% type:string
- #% description: WMS standard version
- #% options: 1.1.1,1.3.0
- #% answer: 1.1.1
- #% guisection: Request
- #%end
- #%option
- #% key: maxcols
- #% type:integer
- #% description: Maximum columns to request at a time
- #% answer:512
- #% guisection: Request
- #%end
- #%option
- #% key: maxrows
- #% type: integer
- #% description: Maximum rows to request at a time
- #% answer: 512
- #% guisection: Request
- #%end
- #%option
- #% key: urlparams
- #% type:string
- #% description: Additional query parameters to pass to the server
- #% guisection: Request
- #%end
- #%option
- #% key: username
- #% type:string
- #% description: Username for server connection
- #% guisection: Connection
- #%end
- #%option
- #% key: password
- #% type:string
- #% description: Password for server connection
- #% guisection: Connection
- #%end
- #%option
- #% key: method
- #% type: string
- #% description: Interpolation method to use in reprojection
- #% options:nearest,linear,cubic,cubicspline
- #% answer:nearest
- #% required: no
- #%end
- #%option
- #% key: region
- #% type: string
- #% description: Request data for this named region instead of the current region bounds
- #% guisection: Request
- #%end
- #%option
- #% key: bgcolor
- #% type: string
- #% label: Background color
- #% description: Format: 0xRRGGBB
- #% guisection: Map style
- #%end
- #%option
- #% key: proxy
- #% label: HTTP proxy only GDAL driver (GDAL_HTTP_PROXY)
- #% type: string
- #% description: HTTP proxy
- #%end
- #%option
- #% key: proxy_user_pw
- #% label: User and password for HTTP proxy only for GDAL driver (GDAL_HTTP_PROXYUSERPWD). Must be in the form of [user name]:[password].
- #% type: string
- #% description: User and password for HTTP proxy
- #%end
- #%option G_OPT_F_BIN_INPUT
- #% key: capfile
- #% required: no
- #% description: Capabilities file to parse (input). It is relevant for WMTS_GRASS and OnEarth_GRASS drivers
- #%end
- #%option G_OPT_F_OUTPUT
- #% key: capfile_output
- #% required: no
- #% description: File where the server capabilities will be saved ('c' flag)
- #%end
- #%flag
- #% key: c
- #% description: Get the server capabilities then exit
- #% guisection: Request
- #% suppress_required: yes
- #%end
- #%flag
- #% key: o
- #% description: Do not request transparent data
- #% guisection: Map style
- #%end
- #%flag
- #% key: b
- #% description: Keep original bands (default: create composite)
- #% guisection: Map style
- #%end
- #%rules
- #% exclusive: capfile_output, capfile
- #%end
- import os
- import sys
- sys.path.insert(1, os.path.join(os.path.dirname(sys.path[0]), 'etc', 'r.in.wms'))
- import grass.script as grass
- from grass.script.utils import decode
- def GetRegionParams(opt_region):
- # set region
- if opt_region:
- reg_spl = opt_region.strip().split('@', 1)
- reg_mapset = '.'
- if len(reg_spl) > 1:
- reg_mapset = reg_spl[1]
- if not grass.find_file(name=reg_spl[0], element='windows', mapset=reg_mapset)['name']:
- grass.fatal(_("Region <%s> not found") % opt_region)
- if opt_region:
- s = grass.read_command('g.region',
- quiet=True,
- flags='ug',
- region=opt_region)
- region_params = grass.parse_key_val(decode(s), val_type=float)
- else:
- region_params = grass.region()
- return region_params
- def main():
- if 'GRASS' in options['driver']:
- grass.debug("Using GRASS driver")
- from wms_drv import WMSDrv
- wms = WMSDrv()
- elif 'GDAL' in options['driver']:
- grass.debug("Using GDAL WMS driver")
- from wms_gdal_drv import WMSGdalDrv
- wms = WMSGdalDrv()
- if flags['c']:
- wms.GetCapabilities(options)
- else:
- from wms_base import GRASSImporter
- # set proxy
- if options['proxy'] and options['proxy_user_pw']:
- wms.setProxy(options['proxy'], options['proxy_user_pw'])
- if options['proxy']:
- wms.setProxy(options['proxy'])
- if 'GRASS' in options['driver']:
- grass.warning(_("The proxy will be ignored by the choosen GRASS driver. It is only used with the GDAL driver."))
- options['region'] = GetRegionParams(options['region'])
- fetched_map = wms.GetMap(options, flags)
- grass.message(_("Importing raster map into GRASS..."))
- if not fetched_map:
- grass.warning(_("Nothing to import.\nNo data has been downloaded from wms server."))
- return
- importer = GRASSImporter(options['output'], (flags['b'] == False))
- importer.ImportMapIntoGRASS(fetched_map)
- return 0
- if __name__ == "__main__":
- options, flags = grass.parser()
- sys.exit(main())
|