File size: 2,969 Bytes
9ad0e2d
 
 
 
 
 
 
 
 
 
 
 
 
 
a22204c
f2cf4fa
9ad0e2d
 
 
 
 
 
a22204c
9ad0e2d
 
 
 
 
 
 
 
51aba01
9ad0e2d
 
 
 
51aba01
 
 
 
9ad0e2d
 
 
 
51aba01
 
 
9ad0e2d
51aba01
9ad0e2d
51aba01
9ad0e2d
 
 
 
 
 
 
51aba01
9ad0e2d
 
51aba01
 
 
9ad0e2d
51aba01
 
 
 
9ad0e2d
 
 
 
51aba01
 
9ad0e2d
51aba01
9ad0e2d
 
 
 
51aba01
 
9ad0e2d
51aba01
9ad0e2d
 
 
51aba01
9ad0e2d
51aba01
9ad0e2d
 
 
 
51aba01
9ad0e2d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import ee
import geemap.foliumap as geemap
import geopandas as gpd
import streamlit as st

st.set_page_config(layout="wide")


def ee_authenticate(token_name="EARTHENGINE_TOKEN"):
    geemap.ee_initialize(token_name=token_name)


st.sidebar.info(
    """
    - Web App URL: <https://streamlit.gishub.org>
    - GitHub repository: <https://github.com/giswqs/streamlit-geospatial>
    """
)

st.sidebar.title("Contact")
st.sidebar.info(
    """
    Qiusheng Wu at [wetlands.io](https://wetlands.io) | [GitHub](https://github.com/giswqs) | [Twitter](https://twitter.com/giswqs) | [YouTube](https://www.youtube.com/c/QiushengWu) | [LinkedIn](https://www.linkedin.com/in/qiushengwu)
    """
)

st.title("Global Building Footprints")

col1, col2 = st.columns([8, 2])


@st.cache_data
def read_data(url):
    return gpd.read_file(url)


countries = (
    "https://github.com/giswqs/geemap/raw/master/examples/data/countries.geojson"
)
states = "https://github.com/giswqs/geemap/raw/master/examples/data/us_states.json"

countries_gdf = read_data(countries)
states_gdf = read_data(states)

country_names = countries_gdf["NAME"].values.tolist()
country_names.remove("United States of America")
country_names.append("USA")
country_names.sort()
country_names = [name.replace(".", "").replace(" ", "_") for name in country_names]

state_names = states_gdf["name"].values.tolist()

basemaps = list(geemap.basemaps)

Map = geemap.Map()

with col2:

    basemap = st.selectbox("Select a basemap", basemaps, index=basemaps.index("HYBRID"))
    Map.add_basemap(basemap)

    country = st.selectbox(
        "Select a country", country_names, index=country_names.index("USA")
    )

    if country == "USA":
        state = st.selectbox(
            "Select a state", state_names, index=state_names.index("Florida")
        )
        layer_name = state

        try:
            fc = ee.FeatureCollection(
                f"projects/sat-io/open-datasets/MSBuildings/US/{state}"
            )
        except:
            st.error("No data available for the selected state.")

    else:
        try:
            fc = ee.FeatureCollection(
                f"projects/sat-io/open-datasets/MSBuildings/{country}"
            )
        except:
            st.error("No data available for the selected country.")

        layer_name = country

    color = st.color_picker("Select a color", "#FF5500")

    style = {"fillColor": "00000000", "color": color}

    split = st.checkbox("Split-panel map")

    if split:
        left = geemap.ee_tile_layer(fc.style(**style), {}, "Left")
        right = left
        Map.split_map(left, right)
    else:
        Map.addLayer(fc.style(**style), {}, layer_name)

    Map.centerObject(fc.first(), zoom=16)

    with st.expander("Data Sources"):
        st.info(
            """
            [Microsoft Building Footprints](https://gee-community-catalog.org/projects/msbuildings/)
            """
        )


with col1:

    Map.to_streamlit(height=1000)