95 lines
2.7 KiB
Python
95 lines
2.7 KiB
Python
from pathlib import Path
|
|
|
|
PROJECT_ROOT = Path(__file__).resolve().parents[2]
|
|
DATA_ROOT = PROJECT_ROOT / "data" / "geo_mask"
|
|
SOURCE_ROOT = DATA_ROOT / "source"
|
|
OUTPUT_ROOT = Path("/home/wwwroot/weather/geo-mask")
|
|
LAND_SEA_TILE_ROOT = OUTPUT_ROOT / "land-sea"
|
|
METADATA_ROOT = OUTPUT_ROOT / "metadata"
|
|
POLICY_ROOT = OUTPUT_ROOT / "policies"
|
|
|
|
SOURCE_ROOT.mkdir(parents=True, exist_ok=True)
|
|
LAND_SEA_TILE_ROOT.mkdir(parents=True, exist_ok=True)
|
|
METADATA_ROOT.mkdir(parents=True, exist_ok=True)
|
|
POLICY_ROOT.mkdir(parents=True, exist_ok=True)
|
|
|
|
SOURCE_ASSET = SOURCE_ROOT / "ne_10m_land.geojson"
|
|
DEFAULT_SOURCE_URL = "https://raw.githubusercontent.com/nvkelso/natural-earth-vector/master/geojson/ne_10m_land.geojson"
|
|
|
|
REGION = {
|
|
"lon_min": 120.0,
|
|
"lon_max": 150.0,
|
|
"lat_min": 20.0,
|
|
"lat_max": 50.0,
|
|
}
|
|
|
|
DEFAULT_ZOOMS = [2, 4, 6, 8]
|
|
TILE_SIZE = 256
|
|
|
|
|
|
def build_mask_metadata():
|
|
return {
|
|
"maskId": "land-sea",
|
|
"version": "v1",
|
|
"source": {
|
|
"id": "natural-earth-10m-land",
|
|
"url": DEFAULT_SOURCE_URL,
|
|
"licenseNote": "See upstream Natural Earth licensing terms.",
|
|
},
|
|
"classes": {
|
|
"sea": 0,
|
|
"land": 255,
|
|
"coastTransition": "green channel 0-255",
|
|
},
|
|
"encoding": {
|
|
"format": "png",
|
|
"channels": {
|
|
"red": "land mask: 255 land, 0 sea",
|
|
"green": "coast transition strength: 0-255",
|
|
"blue": "reserved",
|
|
"alpha": "255 where mask asset has data semantics, 0 otherwise",
|
|
},
|
|
},
|
|
"coverage": REGION,
|
|
"supportedZoom": {
|
|
"min": min(DEFAULT_ZOOMS),
|
|
"max": max(DEFAULT_ZOOMS),
|
|
},
|
|
"coastTransition": {
|
|
"supported": True,
|
|
"radiusPixelsByZoom": {
|
|
"2": 3,
|
|
"4": 4,
|
|
"6": 6,
|
|
"8": 10,
|
|
},
|
|
},
|
|
"noDataMode": "outside configured region is not emitted as tiles",
|
|
"displayPolicies": "/geo-mask/policies/display-product-policies.json",
|
|
}
|
|
|
|
|
|
def build_display_policies():
|
|
return {
|
|
"wind": {
|
|
"sea": "normal",
|
|
"land": "attenuate",
|
|
"coastTransition": "soft-attenuate",
|
|
},
|
|
"wave": {
|
|
"sea": "normal",
|
|
"land": "mask",
|
|
"coastTransition": "soft-mask",
|
|
},
|
|
"current": {
|
|
"sea": "normal",
|
|
"land": "mask",
|
|
"coastTransition": "soft-mask",
|
|
},
|
|
"pressure": {
|
|
"sea": "normal",
|
|
"land": "normal",
|
|
"coastTransition": "normal",
|
|
},
|
|
}
|