initial ship raster implementation
This commit is contained in:
parent
c9c1910699
commit
6d070a19e0
19
Snakefile
19
Snakefile
@ -185,6 +185,22 @@ if config['enable'].get('retrieve_natura_raster', True):
|
|||||||
run: move(input[0], output[0])
|
run: move(input[0], output[0])
|
||||||
|
|
||||||
|
|
||||||
|
if config['enable'].get('build_ship_raster', False):
|
||||||
|
rule build_ship_raster:
|
||||||
|
input:
|
||||||
|
ship_density="data/bundle/shipdensity/shipdensity_global.zip",
|
||||||
|
cutouts=expand("cutouts/{cutouts}.nc", **config['atlite'])
|
||||||
|
output: "resources/europe_shipdensity_raster.nc"
|
||||||
|
log: "logs/build_ship_raster.log"
|
||||||
|
script: "scripts/build_ship_raster.py"
|
||||||
|
|
||||||
|
|
||||||
|
if config['enable'].get('retrieve_ship_raster', True):
|
||||||
|
rule retrieve_ship_raster:
|
||||||
|
input: HTTP.remote("https://tubcloud.tu-berlin.de/s/P9HArMwKbTH48Tf", keep_local=True, static=True)
|
||||||
|
output: "resources/europe_shipdensity_raster.nc"
|
||||||
|
run: move(input[0], output[0])
|
||||||
|
|
||||||
rule build_renewable_profiles:
|
rule build_renewable_profiles:
|
||||||
input:
|
input:
|
||||||
base_network="networks/base.nc",
|
base_network="networks/base.nc",
|
||||||
@ -195,6 +211,9 @@ rule build_renewable_profiles:
|
|||||||
gebco=lambda w: ("data/bundle/GEBCO_2014_2D.nc"
|
gebco=lambda w: ("data/bundle/GEBCO_2014_2D.nc"
|
||||||
if "max_depth" in config["renewable"][w.technology].keys()
|
if "max_depth" in config["renewable"][w.technology].keys()
|
||||||
else []),
|
else []),
|
||||||
|
ship_density= lambda w: ("resources/europe_shipdensity_raster.nc"
|
||||||
|
if "ship_threshold" in config["renewable"][w.technology].keys()
|
||||||
|
else []),
|
||||||
country_shapes='resources/country_shapes.geojson',
|
country_shapes='resources/country_shapes.geojson',
|
||||||
offshore_shapes='resources/offshore_shapes.geojson',
|
offshore_shapes='resources/offshore_shapes.geojson',
|
||||||
regions=lambda w: ("resources/regions_onshore.geojson"
|
regions=lambda w: ("resources/regions_onshore.geojson"
|
||||||
|
@ -30,6 +30,8 @@ enable:
|
|||||||
retrieve_cutout: true
|
retrieve_cutout: true
|
||||||
build_natura_raster: false
|
build_natura_raster: false
|
||||||
retrieve_natura_raster: true
|
retrieve_natura_raster: true
|
||||||
|
build_ship_raster: false
|
||||||
|
retrieve_ship_raster: true
|
||||||
custom_busmap: false
|
custom_busmap: false
|
||||||
|
|
||||||
electricity:
|
electricity:
|
||||||
@ -134,6 +136,7 @@ renewable:
|
|||||||
# until done more rigorously in #153
|
# until done more rigorously in #153
|
||||||
corine: [44, 255]
|
corine: [44, 255]
|
||||||
natura: true
|
natura: true
|
||||||
|
ship_threshold: 400
|
||||||
max_depth: 50
|
max_depth: 50
|
||||||
max_shore_distance: 30000
|
max_shore_distance: 30000
|
||||||
potential: simple # or conservative
|
potential: simple # or conservative
|
||||||
@ -151,6 +154,7 @@ renewable:
|
|||||||
# until done more rigorously in #153
|
# until done more rigorously in #153
|
||||||
corine: [44, 255]
|
corine: [44, 255]
|
||||||
natura: true
|
natura: true
|
||||||
|
ship_threshold: 400
|
||||||
max_depth: 50
|
max_depth: 50
|
||||||
min_shore_distance: 30000
|
min_shore_distance: 30000
|
||||||
potential: simple # or conservative
|
potential: simple # or conservative
|
||||||
|
333
config_float.yaml
Executable file
333
config_float.yaml
Executable file
@ -0,0 +1,333 @@
|
|||||||
|
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
version: 0.4.0
|
||||||
|
tutorial: false
|
||||||
|
|
||||||
|
logging:
|
||||||
|
level: INFO
|
||||||
|
format: '%(levelname)s:%(name)s:%(message)s'
|
||||||
|
|
||||||
|
summary_dir: results
|
||||||
|
|
||||||
|
scenario:
|
||||||
|
simpl: ['']
|
||||||
|
ll: ['copt']
|
||||||
|
clusters: [100]
|
||||||
|
opts: [Co2L-24H]
|
||||||
|
|
||||||
|
countries: ['BE','DE', 'DK', 'GB', 'NL', 'NO']
|
||||||
|
|
||||||
|
clustering:
|
||||||
|
simplify:
|
||||||
|
to_substations: false # network is simplified to nodes with positive or negative power injection (i.e. substations or offwind connections)
|
||||||
|
|
||||||
|
snapshots:
|
||||||
|
start: "2013-01-01"
|
||||||
|
end: "2014-01-01"
|
||||||
|
closed: 'left' # end is not inclusive
|
||||||
|
|
||||||
|
enable:
|
||||||
|
prepare_links_p_nom: false
|
||||||
|
retrieve_databundle: true
|
||||||
|
build_cutout: false
|
||||||
|
retrieve_cutout: false
|
||||||
|
build_natura_raster: false
|
||||||
|
retrieve_natura_raster: true
|
||||||
|
custom_busmap: false
|
||||||
|
split_offshore_regions: true #splits big offshore regions into smaller regions
|
||||||
|
build_ship_raster: true
|
||||||
|
retrieve_ship_raster: true
|
||||||
|
|
||||||
|
electricity:
|
||||||
|
voltages: [220., 300., 380.]
|
||||||
|
co2limit: 7.75e+7 # 0.05 * 3.1e9*0.5
|
||||||
|
co2base: 1.487e+9
|
||||||
|
agg_p_nom_limits: data/agg_p_nom_minmax.csv
|
||||||
|
|
||||||
|
extendable_carriers:
|
||||||
|
Generator: []
|
||||||
|
StorageUnit: [] # battery, H2
|
||||||
|
Store: [battery, H2]
|
||||||
|
Link: []
|
||||||
|
|
||||||
|
max_hours:
|
||||||
|
battery: 6
|
||||||
|
H2: 168
|
||||||
|
|
||||||
|
powerplants_filter: false # use pandas query strings here, e.g. Country not in ['Germany']
|
||||||
|
custom_powerplants: false # use pandas query strings here, e.g. Country in ['Germany']
|
||||||
|
conventional_carriers: [nuclear, oil, OCGT, CCGT, coal, lignite, geothermal, biomass]
|
||||||
|
renewable_capacities_from_OPSD: [] # onwind, offwind, solar
|
||||||
|
|
||||||
|
# estimate_renewable_capacities_from_capacity_stats:
|
||||||
|
# # Wind is the Fueltype in ppm.data.Capacity_stats, onwind, offwind-{ac,dc} the carrier in PyPSA-Eur
|
||||||
|
# Wind: [onwind, offwind-ac, offwind-dc]
|
||||||
|
# Solar: [solar]
|
||||||
|
|
||||||
|
atlite:
|
||||||
|
nprocesses: 1
|
||||||
|
show_progress: false
|
||||||
|
cutouts:
|
||||||
|
# use 'base' to determine geographical bounds and time span from config
|
||||||
|
# base:
|
||||||
|
# module: era5
|
||||||
|
europe-2013-era5:
|
||||||
|
module: era5 # in priority order
|
||||||
|
dx: 0.3
|
||||||
|
dy: 0.3
|
||||||
|
time: ['2013', '2013']
|
||||||
|
|
||||||
|
|
||||||
|
renewable:
|
||||||
|
onwind:
|
||||||
|
cutout: europe-2013-era5
|
||||||
|
resource:
|
||||||
|
method: wind
|
||||||
|
turbine: Vestas_V112_3MW
|
||||||
|
capacity_per_sqkm: 3 # ScholzPhd Tab 4.3.1: 10MW/km^2
|
||||||
|
# correction_factor: 0.93
|
||||||
|
corine:
|
||||||
|
# Scholz, Y. (2012). Renewable energy based electricity supply at low costs:
|
||||||
|
# development of the REMix model and application for Europe. ( p.42 / p.28)
|
||||||
|
grid_codes: [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
|
||||||
|
24, 25, 26, 27, 28, 29, 31, 32]
|
||||||
|
distance: 1000
|
||||||
|
distance_grid_codes: [1, 2, 3, 4, 5, 6]
|
||||||
|
natura: true
|
||||||
|
potential: simple # or conservative
|
||||||
|
clip_p_max_pu: 1.e-2
|
||||||
|
offwind-ac:
|
||||||
|
cutout: europe-2013-era5
|
||||||
|
resource:
|
||||||
|
method: wind
|
||||||
|
turbine: NREL_ReferenceTurbine_2020ATB_12MW_offshore
|
||||||
|
capacity_per_sqkm: 2
|
||||||
|
correction_factor: 0.8855
|
||||||
|
# proxy for wake losses
|
||||||
|
# from 10.1016/j.energy.2018.08.153
|
||||||
|
# until done more rigorously in #153
|
||||||
|
#corine: [44, 255]
|
||||||
|
natura: true
|
||||||
|
max_depth: 60
|
||||||
|
max_shore_distance: 30000
|
||||||
|
potential: simple # or conservative
|
||||||
|
clip_p_max_pu: 1.e-2
|
||||||
|
calculate_topology_cost: true
|
||||||
|
offwind-dc:
|
||||||
|
cutout: europe-2013-era5
|
||||||
|
resource:
|
||||||
|
method: wind
|
||||||
|
turbine: NREL_ReferenceTurbine_2020ATB_12MW_offshore
|
||||||
|
capacity_per_sqkm: 2
|
||||||
|
correction_factor: 0.8855
|
||||||
|
# proxy for wake losses
|
||||||
|
# from 10.1016/j.energy.2018.08.153
|
||||||
|
# until done more rigorously in #153
|
||||||
|
#corine: [44, 255]
|
||||||
|
natura: true
|
||||||
|
max_depth: 60
|
||||||
|
min_shore_distance: 30000
|
||||||
|
potential: simple # or conservative
|
||||||
|
clip_p_max_pu: 1.e-2
|
||||||
|
calculate_topology_cost: true
|
||||||
|
offwind-float:
|
||||||
|
cutout: europe-2013-era5
|
||||||
|
resource:
|
||||||
|
method: wind
|
||||||
|
turbine: NREL_ReferenceTurbine_5MW_offshore
|
||||||
|
# ScholzPhd Tab 4.3.1: 10MW/km^2
|
||||||
|
capacity_per_sqkm: 2
|
||||||
|
correction_factor: 0.8855
|
||||||
|
# proxy for wake losses
|
||||||
|
# from 10.1016/j.energy.2018.08.153
|
||||||
|
# until done more rigorously in #153
|
||||||
|
#corine: [44, 255]
|
||||||
|
natura: true
|
||||||
|
min_depth: 60
|
||||||
|
potential: simple # or conservative
|
||||||
|
clip_p_max_pu: 1.e-2
|
||||||
|
solar:
|
||||||
|
cutout: europe-2013-era5
|
||||||
|
resource:
|
||||||
|
method: pv
|
||||||
|
panel: CSi
|
||||||
|
orientation:
|
||||||
|
slope: 35.
|
||||||
|
azimuth: 180.
|
||||||
|
capacity_per_sqkm: 1.7 # ScholzPhd Tab 4.3.1: 170 MW/km^2
|
||||||
|
# Correction factor determined by comparing uncorrected area-weighted full-load hours to those
|
||||||
|
# published in Supplementary Data to
|
||||||
|
# Pietzcker, Robert Carl, et al. "Using the sun to decarbonize the power
|
||||||
|
# sector: The economic potential of photovoltaics and concentrating solar
|
||||||
|
# power." Applied Energy 135 (2014): 704-720.
|
||||||
|
# This correction factor of 0.854337 may be in order if using reanalysis data.
|
||||||
|
# for discussion refer to https://github.com/PyPSA/pypsa-eur/pull/304
|
||||||
|
# correction_factor: 0.854337
|
||||||
|
corine: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
|
||||||
|
14, 15, 16, 17, 18, 19, 20, 26, 31, 32]
|
||||||
|
natura: true
|
||||||
|
potential: simple # or conservative
|
||||||
|
clip_p_max_pu: 1.e-2
|
||||||
|
hydro:
|
||||||
|
cutout: europe-2013-era5
|
||||||
|
carriers: [ror, PHS, hydro]
|
||||||
|
PHS_max_hours: 6
|
||||||
|
hydro_max_hours: "energy_capacity_totals_by_country" # one of energy_capacity_totals_by_country, estimate_by_large_installations or a float
|
||||||
|
clip_min_inflow: 1.0
|
||||||
|
|
||||||
|
lines:
|
||||||
|
types:
|
||||||
|
220.: "Al/St 240/40 2-bundle 220.0"
|
||||||
|
300.: "Al/St 240/40 3-bundle 300.0"
|
||||||
|
380.: "Al/St 240/40 4-bundle 380.0"
|
||||||
|
s_max_pu: 0.7
|
||||||
|
s_nom_max: .inf
|
||||||
|
length_factor: 1.25
|
||||||
|
under_construction: 'zero' # 'zero': set capacity to zero, 'remove': remove, 'keep': with full capacity
|
||||||
|
|
||||||
|
links:
|
||||||
|
p_max_pu: 1.0
|
||||||
|
p_nom_max: .inf
|
||||||
|
include_tyndp: true
|
||||||
|
under_construction: 'zero' # 'zero': set capacity to zero, 'remove': remove, 'keep': with full capacity
|
||||||
|
|
||||||
|
transformers:
|
||||||
|
x: 0.1
|
||||||
|
s_nom: 2000.
|
||||||
|
type: ''
|
||||||
|
|
||||||
|
load:
|
||||||
|
power_statistics: True # only for files from <2019; set false in order to get ENTSOE transparency data
|
||||||
|
interpolate_limit: 3 # data gaps up until this size are interpolated linearly
|
||||||
|
time_shift_for_large_gaps: 1w # data gaps up until this size are copied by copying from
|
||||||
|
manual_adjustments: true # false
|
||||||
|
scaling_factor: 1.0
|
||||||
|
|
||||||
|
costs:
|
||||||
|
year: 2030
|
||||||
|
discountrate: 0.07 # From a Lion Hirth paper, also reflects average of Noothout et al 2016
|
||||||
|
USD2013_to_EUR2013: 0.7532 # [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html
|
||||||
|
marginal_cost: # EUR/MWh
|
||||||
|
solar: 0.01
|
||||||
|
onwind: 0.015
|
||||||
|
offwind-ac: 0.015
|
||||||
|
offwind-dc: 0.015
|
||||||
|
hydro: 0.
|
||||||
|
H2: 0.
|
||||||
|
electrolysis: 0.
|
||||||
|
fuel cell: 0.
|
||||||
|
battery: 0.
|
||||||
|
battery inverter: 0.
|
||||||
|
emission_prices: # in currency per tonne emission, only used with the option Ep
|
||||||
|
co2: 0.
|
||||||
|
|
||||||
|
solving:
|
||||||
|
options:
|
||||||
|
formulation: kirchhoff
|
||||||
|
load_shedding: false
|
||||||
|
noisy_costs: true
|
||||||
|
min_iterations: 4
|
||||||
|
max_iterations: 6
|
||||||
|
clip_p_max_pu: 0.01
|
||||||
|
skip_iterations: false
|
||||||
|
track_iterations: false
|
||||||
|
#nhours: 10
|
||||||
|
solver:
|
||||||
|
name: gurobi
|
||||||
|
threads: 4
|
||||||
|
method: 2 # barrier
|
||||||
|
crossover: 0
|
||||||
|
BarConvTol: 1.e-5
|
||||||
|
FeasibilityTol: 1.e-6
|
||||||
|
AggFill: 0
|
||||||
|
PreDual: 0
|
||||||
|
GURO_PAR_BARDENSETHRESH: 200
|
||||||
|
# solver:
|
||||||
|
# name: cplex
|
||||||
|
# threads: 4
|
||||||
|
# lpmethod: 4 # barrier
|
||||||
|
# solutiontype: 2 # non basic solution, ie no crossover
|
||||||
|
# barrier.convergetol: 1.e-5
|
||||||
|
# feasopt.tolerance: 1.e-6
|
||||||
|
|
||||||
|
plotting:
|
||||||
|
map:
|
||||||
|
figsize: [7, 7]
|
||||||
|
boundaries: [-10.2, 29, 35, 72]
|
||||||
|
p_nom:
|
||||||
|
bus_size_factor: 5.e+4
|
||||||
|
linewidth_factor: 3.e+3
|
||||||
|
|
||||||
|
costs_max: 800
|
||||||
|
costs_threshold: 1
|
||||||
|
|
||||||
|
energy_max: 15000.
|
||||||
|
energy_min: -10000.
|
||||||
|
energy_threshold: 50.
|
||||||
|
|
||||||
|
vre_techs: ["onwind", "offwind-ac", "offwind-dc", "solar", "ror"]
|
||||||
|
conv_techs: ["OCGT", "CCGT", "Nuclear", "Coal"]
|
||||||
|
storage_techs: ["hydro+PHS", "battery", "H2"]
|
||||||
|
load_carriers: ["AC load"]
|
||||||
|
AC_carriers: ["AC line", "AC transformer"]
|
||||||
|
link_carriers: ["DC line", "Converter AC-DC"]
|
||||||
|
tech_colors:
|
||||||
|
"onwind" : "#235ebc"
|
||||||
|
"onshore wind" : "#235ebc"
|
||||||
|
'offwind' : "#6895dd"
|
||||||
|
'offwind-ac' : "#6895dd"
|
||||||
|
'offshore wind' : "#6895dd"
|
||||||
|
'offshore wind ac' : "#6895dd"
|
||||||
|
'offwind-dc' : "#74c6f2"
|
||||||
|
'offshore wind dc' : "#74c6f2"
|
||||||
|
"hydro" : "#08ad97"
|
||||||
|
"hydro+PHS" : "#08ad97"
|
||||||
|
"PHS" : "#08ad97"
|
||||||
|
"hydro reservoir" : "#08ad97"
|
||||||
|
'hydroelectricity' : '#08ad97'
|
||||||
|
"ror" : "#4adbc8"
|
||||||
|
"run of river" : "#4adbc8"
|
||||||
|
'solar' : "#f9d002"
|
||||||
|
'solar PV' : "#f9d002"
|
||||||
|
'solar thermal' : '#ffef60'
|
||||||
|
'biomass' : '#0c6013'
|
||||||
|
'solid biomass' : '#06540d'
|
||||||
|
'biogas' : '#23932d'
|
||||||
|
'waste' : '#68896b'
|
||||||
|
'geothermal' : '#ba91b1'
|
||||||
|
"OCGT" : "#d35050"
|
||||||
|
"gas" : "#d35050"
|
||||||
|
"natural gas" : "#d35050"
|
||||||
|
"CCGT" : "#b20101"
|
||||||
|
"nuclear" : "#ff9000"
|
||||||
|
"coal" : "#707070"
|
||||||
|
"lignite" : "#9e5a01"
|
||||||
|
"oil" : "#262626"
|
||||||
|
"H2" : "#ea048a"
|
||||||
|
"hydrogen storage" : "#ea048a"
|
||||||
|
"battery" : "#b8ea04"
|
||||||
|
"Electric load" : "#f9d002"
|
||||||
|
"electricity" : "#f9d002"
|
||||||
|
"lines" : "#70af1d"
|
||||||
|
"transmission lines" : "#70af1d"
|
||||||
|
"AC-AC" : "#70af1d"
|
||||||
|
"AC line" : "#70af1d"
|
||||||
|
"links" : "#8a1caf"
|
||||||
|
"HVDC links" : "#8a1caf"
|
||||||
|
"DC-DC" : "#8a1caf"
|
||||||
|
"DC link" : "#8a1caf"
|
||||||
|
nice_names:
|
||||||
|
OCGT: "Open-Cycle Gas"
|
||||||
|
CCGT: "Combined-Cycle Gas"
|
||||||
|
offwind-ac: "Offshore Wind (AC)"
|
||||||
|
offwind-dc: "Offshore Wind (DC)"
|
||||||
|
onwind: "Onshore Wind"
|
||||||
|
solar: "Solar"
|
||||||
|
PHS: "Pumped Hydro Storage"
|
||||||
|
hydro: "Reservoir & Dam"
|
||||||
|
battery: "Battery Storage"
|
||||||
|
H2: "Hydrogen Storage"
|
||||||
|
lines: "Transmission Lines"
|
||||||
|
ror: "Run of River"
|
@ -241,6 +241,11 @@ if __name__ == '__main__':
|
|||||||
codes = corine["distance_grid_codes"]
|
codes = corine["distance_grid_codes"]
|
||||||
buffer = corine["distance"]
|
buffer = corine["distance"]
|
||||||
excluder.add_raster(snakemake.input.corine, codes=codes, buffer=buffer, crs=3035)
|
excluder.add_raster(snakemake.input.corine, codes=codes, buffer=buffer, crs=3035)
|
||||||
|
|
||||||
|
if "ship_threshold" in config:
|
||||||
|
shipping_threshold=config["ship_threshold"]*8760*6 # approximation because 6 years of data which is hourly collected
|
||||||
|
func = functools.partial(np.less,shipping_threshold)
|
||||||
|
excluder.add_raster(snakemake.input.ship_density, codes=func, crs=4326, allow_no_overlap=True)
|
||||||
|
|
||||||
if "max_depth" in config:
|
if "max_depth" in config:
|
||||||
# lambda not supported for atlite + multiprocessing
|
# lambda not supported for atlite + multiprocessing
|
||||||
|
63
scripts/build_ship_raster.py
Normal file
63
scripts/build_ship_raster.py
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
"""
|
||||||
|
Transforms the global ship density data from https://datacatalog.worldbank.org/search/dataset/0037580/Global-Shipping-Traffic-Density to the size of the considered cutout. The global ship density raster is later used for the exclusion when calculating the offshore potentials.
|
||||||
|
|
||||||
|
Relevant Settings
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
renewable:
|
||||||
|
{technology}:
|
||||||
|
cutout:
|
||||||
|
|
||||||
|
.. seealso::
|
||||||
|
Documentation of the configuration file ``config.yaml`` at
|
||||||
|
:ref:`renewable_cf`
|
||||||
|
|
||||||
|
Inputs
|
||||||
|
------
|
||||||
|
|
||||||
|
- ``data/bundle/shipdensity/shipdensity_global.zip``: `Global ship density from <https://datacatalog.worldbank.org/search/dataset/0037580/Global-Shipping-Traffic-Density>`.
|
||||||
|
|
||||||
|
Outputs
|
||||||
|
-------
|
||||||
|
|
||||||
|
- ``resources/natura.tiff``: Reduced version of `Global ship density from <https://datacatalog.worldbank.org/search/dataset/0037580/` to reduce computation times.
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import logging
|
||||||
|
from _helpers import configure_logging
|
||||||
|
from build_natura_raster import determine_cutout_xXyY
|
||||||
|
|
||||||
|
import zipfile
|
||||||
|
import xarray
|
||||||
|
import os
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if 'snakemake' not in globals():
|
||||||
|
from _helpers import mock_snakemake
|
||||||
|
snakemake = mock_snakemake('build_ship_raster')
|
||||||
|
configure_logging(snakemake)
|
||||||
|
|
||||||
|
cutouts = snakemake.input.cutouts
|
||||||
|
xs, Xs, ys, Ys = zip(*(determine_cutout_xXyY(cutout) for cutout in cutouts))
|
||||||
|
|
||||||
|
with zipfile.ZipFile(snakemake.input.ship_density) as zip_f:
|
||||||
|
zip_f.extract("shipdensity_global.tif")
|
||||||
|
ship_density=xarray.open_dataarray("shipdensity_global.tif", engine="rasterio")
|
||||||
|
os.remove("shipdensity_global.tif")
|
||||||
|
|
||||||
|
ship_density=ship_density.drop("band").sel(x=slice(min(xs),max(Xs)), y=slice(max(Ys),min(ys)))
|
||||||
|
|
||||||
|
ship_density.to_netcdf(snakemake.output[0])
|
||||||
|
|
Loading…
Reference in New Issue
Block a user