Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Mayer
CircularGreenSimCity
Commits
bf1c47ef
Commit
bf1c47ef
authored
Sep 20, 2024
by
Mayer
Browse files
Add new file
parent
a9698bb2
Changes
1
Show whitespace changes
Inline
Side-by-side
python_scripts/DLM_Tree_Classification/Orthoimage_download_script
0 → 100644
View file @
bf1c47ef
from owslib.wms import WebMapService
# Initialisiere Web Mapping Service fuer das Land Bayern
wms = WebMapService('https://geoservices.bayern.de/od/wms/dop/v1/dop20?')from owslib.wms import WebMapService
# Definiere eine Funktion, welche RGBI-Daten herunterlaedt und speichert, basierend auf einer bounding box (Gauss-Kruger zone 4 Koordinaten)
def get_wms_tile(bbox,
gsd=0.2,
url='https://geoservices.bayern.de/od/wms/dop/v1/dop20?',
srs='EPSG:31468',
format='image/tiff',
targetdir='./'):
# open wms
wms = WebMapService(url)
# determine image shape in pixels
width = int((bbox[2]-bbox[0])/0.2)
height = int((bbox[3]-bbox[1])/0.2)
# retrieve RGB data
params = {
'layers': ["by_dop20c"],
'bbox': bbox,
'srs': srs,
'format': format,
'size': (width, height)
}
data = wms.getmap(**params, timeout=60) # Timeout auf 60 Sekunden erhöhen
rgb_data = np.array(Image.open(data).convert('RGB'))
# retrieve IRG data
params = {
'layers': ["by_dop20cir"],
'bbox': bbox,
'srs': srs,
'format': format,
'size': (width, height)
}
data = wms.getmap(**params, timeout=60) # Timeout auf 60 Sekunden erhöhen
irg_data = np.array(Image.open(data).convert('RGB'))
# combine datasets
rgbi_data = np.array([rgb_data[:,:,0], rgb_data[:,:,1], rgb_data[:,:,2], irg_data[:,:,0]], dtype=np.uint8)
# shape: [channels, height, width]
# check image properties
assert np.all(np.equal(rgbi_data.shape, (4, height, width)))
# write data to geotiff file
transform = from_bounds(*bbox, rgbi_data.shape[2], rgbi_data.shape[1])
filename = "{:d}_{:d}_rgbi_20cm.tif".format(int(bbox[0]), int(bbox[1]))
with rasterio.open(
os.path.join(targetdir, filename),
'w',
driver='GTiff',
height=height,
width=width,
count=rgbi_data.shape[0],
dtype='uint8',
crs=CRS.from_string(srs),
transform=transform) as dataset:
dataset.write(rgbi_data)
return rgbi_data
# Download fuer Stadt Memmingen
import os
wue_bbox = (4365264, 5315180, 4365944, 5320884)
# W, S, N, E
width = 200 # px
height = 200 # px
gsd = 0.2 # m/px
os.mkdir('memmingen/') if not os.path.exists('memmingen') else None
for x in tqdm(np.arange(wue_bbox[0], wue_bbox[2], width*gsd)):
for y in np.arange(wue_bbox[1], wue_bbox[3], height*gsd):
coo = (x, y) # SW corner of tile
bb = (x, y, x+width*gsd, y+height*gsd) # (x_min, y_min, x_max, y_max)
get_wms_tile(bb, targetdir='memmingen/')
# Umwandlung der (RGBI) TIFF-Files in (RGB) PNGs
from PIL import Image
datadir = 'wuerzburg/'
targetdir = 'wuerzburg_rgb/'
filenames = os.listdir(datadir)
os.mkdir(targetdir) if not os.path.exists(targetdir) else None
for filename in filenames:
dataset = rasterio.open(os.path.join(datadir, filename))
img = np.dstack(dataset.read()[:3])
image = Image.fromarray(img.astype('uint8'), 'RGB')
image.save(os.path.join(targetdir, filename.replace('.tif', '_rgb.png')))
print(filename)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment