Skip to content

Commit fd72a3c

Browse files
committed
Apollo updates
1 parent 1aa087d commit fd72a3c

16 files changed

Lines changed: 147 additions & 55 deletions

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ build
1313
/site
1414
__pycache__
1515
.DS_Store
16+
tutorials/**/*.local.py
1617
tutorials/outputs/*
1718
tutorials/inputs/DEM_5m.tif
1819
!tutorials/outputs/project.rs.xml

fct/cli/Tiles.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,11 @@ def CreateTileset(datasource: str = 'bdalti',
153153

154154
# Tileset 1
155155

156-
minx -= resolution/2
157-
miny -= resolution/2
156+
minx -= (resolution)
157+
miny -= (resolution)
158158

159-
maxx += resolution/2
160-
maxy += resolution/2
159+
maxx += (resolution)
160+
maxy += (resolution)
161161

162162
gx, gy = np.arange(minx, maxx, resolution), np.arange(miny, maxy, resolution)
163163

@@ -188,6 +188,7 @@ def CreateTileset(datasource: str = 'bdalti',
188188

189189
minx -= (resolution/2)
190190
miny -= (resolution/2)
191+
191192
maxx += (resolution/2)
192193
maxy += (resolution/2)
193194

fct/corridor/MedialAxis2.py

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,21 @@
2424
)
2525
from shapely.ops import linemerge
2626

27-
from ..config import (
27+
from fct.config import (
2828
config,
2929
LiteralParameter,
3030
DatasetParameter
3131
)
32-
from ..corridor.ValleyBottomFeatures import (
32+
from fct.corridor.ValleyBottomFeatures import (
3333
MASK_EXTERIOR,
3434
MASK_FLOOPLAIN_RELIEF,
3535
MASK_VALLEY_BOTTOM,
3636
MASK_TERRACE,
3737
MASK_SLOPE,
3838
MASK_HOLE
3939
)
40-
from ..simplify import simplify
41-
from .. import (
40+
from fct.simplify import simplify
41+
from fct import (
4242
transform,
4343
speedup
4444
)
@@ -334,8 +334,32 @@ def open_medialaxis_sink(output, crs, driver='ESRI Shapefile'):
334334
continue
335335

336336
# lines = list(medial_segments(voronoi, groups[axis]))
337-
lines, midpoints, distances = zip(*medial_segments(voronoi, groups[axis]))
338337

338+
try:
339+
tmp_lines, tmp_midpoints, tmp_distances = zip(*medial_segments(voronoi, groups[axis]))
340+
except:
341+
click.echo(f'Error with axis {axis}. skipping')
342+
continue
343+
344+
lines = list()
345+
midpoints = list()
346+
distances = list()
347+
348+
# 0. remove lines between two axes
349+
with rio.open(params.nearest.filename()) as ds:
350+
for line, midpoint, distance in zip(tmp_lines, tmp_midpoints, tmp_distances):
351+
line_coords = list(line.coords)
352+
nearest_values = np.array(list(map(int, ds.sample(line_coords, 1))))
353+
354+
if np.all(nearest_values == axis) or line.length < (2*params.swath_length):
355+
lines.append(line)
356+
midpoints.append(midpoint)
357+
distances.append(distance)
358+
359+
lines = tuple(lines)
360+
midpoints = tuple(midpoints)
361+
distances = tuple(distances)
362+
339363
# 1. compute medial axis
340364

341365
medialaxis = linemerge(lines)

fct/corridor/ValleyBottomLandcover.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import os
1717
from multiprocessing import Pool
1818
import click
19+
import cv2
1920
import rasterio as rio
2021
from ..config import DatasetParameter
2122
from ..cli import starcall
@@ -89,7 +90,14 @@ def ValleyBottomLandcoverTile(row, col, params):
8990
with rio.open(mask_tile) as ds:
9091

9192
mask = ds.read(1)
92-
data[mask == ds.nodata] = nodata
93+
94+
if mask.shape != data.shape:
95+
mask = cv2.resize(mask, dsize=(data.shape[1], data.shape[0]), interpolation=cv2.INTER_NEAREST)
96+
97+
if mask.shape == data.shape:
98+
data[mask == ds.nodata] = nodata
99+
else:
100+
print(f'unable to fit mask and {raster_tile}')
93101

94102
with rio.open(output, 'w', **profile) as dst:
95103
dst.write(data, 1)

fct/drainage/Accumulate.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ def CreateOutletsGraph(params, exterior='exterior-inlets', tileset='default'):
327327
# if exterior_flow and os.path.exists(exterior_flow):
328328
if not params.exterior_flow.none:
329329

330-
exterior_flow = params.exterior_flow.filename(tileset)
330+
exterior_flow = params.exterior_flow.filename()
331331

332332
with fiona.open(exterior_flow) as fs:
333333
for feature in fs:
@@ -337,6 +337,8 @@ def CreateOutletsGraph(params, exterior='exterior-inlets', tileset='default'):
337337
if not all([loci >= 0, loci < height, locj >= 0, locj < width]):
338338
continue
339339

340+
click.echo(f"exterior-inlet with {feature['properties']['AREAKM2']}km2 in tile {row}_{col}")
341+
340342
# connect exterior->inlet
341343

342344
i, j = dem.index(*feature['geometry']['coordinates'])

fct/drainage/Burn.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,14 @@
5050
# for feature in features:
5151
# fst.write(feature)
5252

53-
def BurnTile(params, row, col, burn_delta=0.0):
53+
def BurnTile(params, row, col, tileset='default'):
5454
"""
5555
DOCME
5656
"""
5757

58-
elevation_raster = params.elevations.tilename(row=row, col=col)
58+
elevation_raster = params.elevations.tilename(row=row, col=col, tileset=tileset)
5959
# config.tileset().tilename(dataset, row=row, col=col)
60-
hydrography = params.hydrography.tilename(row=row, col=col)
60+
hydrography = params.hydrography.tilename(row=row, col=col, tileset=tileset)
6161
# config.tileset().tilename('stream-network-draped', row=row, col=col)
6262

6363
with rio.open(elevation_raster) as ds:
@@ -76,7 +76,7 @@ def BurnTile(params, row, col, burn_delta=0.0):
7676
for a, b in zip(geom[:-1], geom[1:]):
7777
for px, py, z in rasterize_linestringz(a, b):
7878
if all([py >= 0, py < height, px >= 0, px < width, not np.isinf(z)]):
79-
elevations[py, px] = z - burn_delta
79+
elevations[py, px] = z - params.offset
8080
else:
8181

8282
click.secho('File not found: %s' % hydrography, fg='yellow')

fct/drainage/DepressionFill.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ def step(msg):
133133
if offset < 0:
134134
elevations = ds.read(1)
135135
else:
136-
elevations = BurnTile(params, row, col, offset)
136+
elevations = BurnTile(params, row, col, tileset=tileset)
137137

138138
step('Label flats')
139139

fct/drainage/Drape.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,8 @@ def DrapeNetworkAndAdjustElevations(params):
117117
# Clamp z to upstream elevation
118118
coordinates[k, 2] = zmin
119119

120-
fst.write(feature)
120+
if not np.isinf(feature['geometry']['coordinates']).any():
121+
fst.write(feature)
121122
progress.update(1)
122123

123124
nodez[b] = zmin
@@ -126,9 +127,9 @@ def DrapeNetworkAndAdjustElevations(params):
126127
if indegree[node] == 0:
127128
queue.append(node)
128129

129-
def SplitStreamNetworkIntoTiles(params):
130+
def SplitStreamNetworkIntoTiles(params, tileset='default'):
130131

131-
tileset = config.tileset()
132+
tileset_data = config.tileset(tileset)
132133
networkfile = params.draped.filename(tileset=None)
133134
# config.filename('stream-network-draped') # filename ok
134135

@@ -146,10 +147,10 @@ def SplitStreamNetworkIntoTiles(params):
146147

147148
options = dict(driver=fs.driver, crs=fs.crs, schema=schema)
148149

149-
with click.progressbar(tileset.tiles(), length=len(tileset)) as iterator:
150+
with click.progressbar(tileset_data.tiles(), length=len(tileset_data)) as iterator:
150151
for tile in iterator:
151152

152-
output = params.draped.tilename(row=tile.row, col=tile.col)
153+
output = params.draped.tilename(row=tile.row, col=tile.col, tileset=tileset)
153154
# config.tileset().tilename('stream-network-draped', row=tile.row, col=tile.col)
154155
with fiona.open(output, 'w', **options) as dst:
155156

@@ -161,7 +162,7 @@ def SplitStreamNetworkIntoTiles(params):
161162

162163
if intersection.geometryType() == 'LineString':
163164

164-
props = feature['properties'].copy()
165+
props = feature['properties']
165166
props.update(ROW=tile.row, COL=tile.col)
166167
dst.write({
167168
'geometry': intersection.__geo_interface__,
@@ -173,7 +174,7 @@ def SplitStreamNetworkIntoTiles(params):
173174
for geom in intersection.geoms:
174175
if geom.geometryType() == 'LineString':
175176

176-
props = feature['properties'].copy()
177+
props = feature['properties']
177178
props.update(ROW=tile.row, COL=tile.col)
178179
dst.write({
179180
'geometry': geom.__geo_interface__,

fct/drainage/FixNoFlow.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,12 @@ def write_tile(row, col): #pylint:disable=unused-argument
416416
x, y = ds.xy(i, j)
417417
# row, col = xy2tile(x, y)
418418
row, col = config.tileset(tileset1).index(x, y)
419-
read_tile(row, col)
419+
420+
try:
421+
read_tile(row, col)
422+
except rio.RasterioIOError:
423+
raise ValueError('No match for (%f, %f)' % (x0, y0))
424+
420425
i, j = ds.index(x, y)
421426

422427
# step3. walk downstream on drainage 2
@@ -440,7 +445,12 @@ def write_tile(row, col): #pylint:disable=unused-argument
440445
x, y = ds.xy(i, j)
441446
# row, col = xy2tile(x, y)
442447
row, col = config.tileset(tileset1).index(x, y)
443-
read_tile(row, col)
448+
449+
try:
450+
read_tile(row, col)
451+
except rio.RasterioIOError:
452+
raise ValueError('No match for (%f, %f)' % (x0, y0))
453+
444454
i, j = ds.index(x, y)
445455

446456
write_tile(row, col)

fct/drainage/IdentifyNetworkNodes.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,9 @@ def JoinSourcesAttributes(params, tileset='default'):
184184
schema = fs.schema
185185
crs = fiona.crs.from_epsg(config.srid)
186186
options = dict(driver=driver, crs=crs, schema=schema)
187+
188+
if not 'GID' in schema['properties'].keys():
189+
schema['properties']['GID'] = 'int:10'
187190

188191
with fiona.open(params.sources_identified.filename(tileset=tileset), 'w', **options) as dst:
189192

0 commit comments

Comments
 (0)