Natural Constraints Post Processing#

import geolime as geo
from pyproj import CRS, Transformer
import numpy as np
import osmnx as ox
import json
from folium.plugins import SideBySideLayers
import folium
from branca.element import Figure
geo.Project().set_crs(CRS('EPSG:20350'))
bm_smu = geo.read_file("../data/block_model_smu.geo")
dh = geo.read_file("../data/domained_drillholes.geo")
bm_fe_map = geo.plot_2d(bm_smu, 'Fe_kriged', 'mean')
bm_fe_map

Road Filtering#

centroid = np.mean(bm_smu.bounds(), axis=0)
transform = Transformer.from_crs(geo.Project().crs.to_epsg(), CRS("epsg:4326")) 
lat, lon = transform.transform(centroid[0], centroid[1])
road_gdf = ox.features_from_point(
    (lat, lon), 
    dist=np.max(np.diff(bm_smu.bounds(), axis=0)) / 2, 
    tags={'highway': ['secondary', 'track']} 
)
road_buff = road_gdf.to_crs(CRS('EPSG:20350')).buffer(100)
road_buff = geo.GISObject('road_buffer', road_buff)
road_buff.plot(interactive_map=True)
Make this Notebook Trusted to load map: File -> Trust Notebook
geo.select_points_inside_polygon(road_buff, None, bm_smu, 'in_road')
bm_smu.delete_cells('in_road')
geo.plot_2d(bm_smu, 'Fe_kriged', 'mean')

River Filtering#

river_gdf = ox.features_from_point(
    (lat, lon), 
    dist=np.max(np.diff(bm_smu.bounds(), axis=0)) / 2, 
    tags={'water': True} 
)
river_buff = river_gdf.to_crs(CRS('EPSG:20350')).buffer(100)
river_buff = geo.GISObject('river_buffer', river_buff)
river_buff.plot(interactive_map=True)
Make this Notebook Trusted to load map: File -> Trust Notebook
geo.select_points_inside_polygon(river_buff, None, bm_smu, 'in_river')
bm_smu.delete_cells('in_river')
geo.plot_2d(bm_smu, 'Fe_kriged', 'mean')

Lonely Blocks Removal#

bm_smu.delete_cells('Y < 7473193')
river_line_gdf = ox.features_from_point(
    (lat, lon), 
    dist=np.max(np.diff(bm_smu.bounds(), axis=0)) / 2, 
    tags={'waterway': True} 
)
river_line_buff = river_line_gdf.to_crs(CRS('EPSG:20350')).buffer(2000, single_sided=True)
river_line_buff = geo.GISObject('river_line_buffer', river_line_buff)
river_line_buff.plot(interactive_map=True)
Make this Notebook Trusted to load map: File -> Trust Notebook
geo.select_points_inside_polygon(river_line_buff, None, bm_smu, 'in_extended_river')
bm_smu.delete_cells('in_extended_river')

Create Global Map with every objects#

bm_fe_map = geo.plot_2d(bm_smu, 'Fe_kriged', 'mean')
bm_fe_map
bm_fe_map.add_choroplethmapbox(
    geojson=json.loads(river_buff._geometry._data.to_crs("EPSG:4326").to_json()), 
    locations=river_buff._geometry._data.index, 
    marker_line_width=0, 
    z=river_buff._geometry._data.index, 
    colorscale='Pubu'
)
bm_fe_map.add_choroplethmapbox(
    geojson=json.loads(road_buff._geometry._data.to_crs("EPSG:4326").to_json()), 
    locations=road_buff._geometry._data.index, 
    marker_line_width=0, 
    z=road_buff._geometry._data.index, 
    colorscale='Brwnyl'
)
bm_fe_map.update_layout(mapbox_style='white-bg')

bm_fe_map.update_traces(showscale=False)
bm_smu.keep_only_cells('channel_hg')
m = bm_smu.plot_2d("Fe_kriged", "mean", interactive_map=True, zoom_start = 14)
layer_left = folium.TileLayer(
        tiles = 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}',
        attr = 'Esri',
        name = 'Esri Map',
        overlay = False,
        control = True
       )
layer_right = folium.TileLayer(
        tiles = 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
        attr = 'Esri',
        name = 'Esri Satellite',
        overlay = False,
        control = True
       )

sbs = SideBySideLayers(layer_left=layer_right, layer_right=layer_left)

layer_left.add_to(m)
layer_right.add_to(m)
sbs.add_to(m)
<folium.plugins.side_by_side.SideBySideLayers at 0x7f4b08624b50>
fig = Figure(width=800, height=700)
fig.add_child(m)