Skip to content

Commit aa70c31

Browse files
authored
Merge pull request #244 from mapswipe/dev
WIP: New Release 2.1.6
2 parents 855359d + d3beb0a commit aa70c31

22 files changed

+459
-1313
lines changed

manager_dashboard/manager_dashboard/create.html

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -189,11 +189,15 @@ <h3>Project Type Specific Information</h3>
189189
<label for="tileServerBuildArea">Tile Server Name</label>
190190
<select name="tileServerBuildArea" id="tileServerBuildArea" onchange="displayTileServer(this, 'BuildArea', '')">
191191
<option value="bing">Bing</option>
192-
<option value="digital_globe">Digital Globe</option>
192+
<option value="mapbox">MapBox</option>
193+
<option value="maxar_standard">Maxar Standard</option>
194+
<option value="maxar_premium">Maxar Premium</option>
195+
<option value="esri">Esri World Imagery</option>
196+
<option value="esri_beta">Esri World Imagery (Clarity) Beta</option>
193197
<option value="sinergise">Sinergise</option>
194198
<option value="custom">Custom</option>
195199
</select>
196-
<span>Select the tile server providing satellite imagery tiles for your project. Make sure you have permission. Google hasn't given permission yet and won't work until a proper API key is given.</span>
200+
<span>Select the tile server providing satellite imagery tiles for your project. Make sure you have permission.</span>
197201
</li>
198202
<li style="display:None" id="tileServerUrlFieldBuildArea">
199203
<label for="tileServerUrlBuildArea">Custom Tile Server URL</label>
@@ -208,7 +212,7 @@ <h3>Project Type Specific Information</h3>
208212
<li id="tileServerCreditsFieldBuildArea">
209213
<label for="tileServerCreditsFieldBuildArea">Imagery Credits</label>
210214
<input type="text" name="tileServerCreditsBuildArea" id="tileServerCreditsBuildArea" value="© 2019 Microsoft Corporation, Earthstar Geographics SIO">
211-
<span>Insert appropriate imagery credits. E.g. for Bing: "© 2019 Microsoft Corporation, Earthstar Geographics SIO"</span>
215+
<span>Insert appropriate imagery credits if you are using a custom tile server. For other tile server use the default credits.</span>
212216
</li>
213217
<li>
214218
<input type="button" style="" id="submit" value="Submit" onClick="submitInfo()">
@@ -227,11 +231,15 @@ <h3>Project Type Specific Information</h3>
227231
<label for="tileServerFootprint">Tile Server Name</label>
228232
<select name="tileServerFootprint" id="tileServerFootprint" onchange="displayTileServer(this, 'Footprint', '')">
229233
<option value="bing">Bing</option>
230-
<option value="digital_globe">Digital Globe</option>
234+
<option value="mapbox">MapBox</option>
235+
<option value="maxar_standard">Maxar Standard</option>
236+
<option value="maxar_premium">Maxar Premium</option>
237+
<option value="esri">Esri World Imagery</option>
238+
<option value="esri_beta">Esri World Imagery (Clarity) Beta</option>
231239
<option value="sinergise">Sinergise</option>
232240
<option value="custom">Custom</option>
233241
</select>
234-
<span>Select the tile server providing satellite imagery tiles for your project. Make sure you have permission. Google hasn't given permission yet and won't work until a proper API key is given.</span>
242+
<span>Select the tile server providing satellite imagery tiles for your project. Make sure you have permission.</span>
235243
</li>
236244
<li style="display:None" id="tileServerUrlFieldFootprint">
237245
<label for="tileServerUrlFootprint">Custom Tile Server URL</label>
@@ -256,7 +264,7 @@ <h3>Project Type Specific Information</h3>
256264
<li id="tileServerCreditsFieldFootprint">
257265
<label for="tileServerCreditsFieldFootprint">Imagery Credits</label>
258266
<input type="text" name="tileServerCreditsFootprint" id="tileServerCreditsFootprint" value="© 2019 Microsoft Corporation, Earthstar Geographics SIO">
259-
<span>Insert appropriate imagery credits. E.g. for Bing: "© 2019 Microsoft Corporation, Earthstar Geographics SIO"</span>
267+
<span>Insert appropriate imagery credits if you are using a custom tile server. For other tile server use the default credits.</span>
260268
</li>
261269
<li>
262270
<input type="button" style="" id="submit" value="Submit" onClick="submitInfo()">
@@ -285,11 +293,15 @@ <h4>Tile Server A</h4>
285293
<label for="tileServerChangeDetectionA">Tile Server Name</label>
286294
<select name="tileServerChangeDetectionA" id="tileServerChangeDetectionA" onchange="displayTileServer(this, 'ChangeDetection', 'A')">
287295
<option value="bing">Bing</option>
288-
<option value="digital_globe">Digital Globe</option>
296+
<option value="mapbox">MapBox</option>
297+
<option value="maxar_standard">Maxar Standard</option>
298+
<option value="maxar_premium">Maxar Premium</option>
299+
<option value="esri">Esri World Imagery</option>
300+
<option value="esri_beta">Esri World Imagery (Clarity) Beta</option>
289301
<option value="sinergise">Sinergise</option>
290302
<option value="custom">Custom</option>
291303
</select>
292-
<span>Select the tile server providing satellite imagery tiles for your project. Make sure you have permission. Google hasn't given permission yet and won't work until a proper API key is given.</span>
304+
<span>Select the tile server providing satellite imagery tiles for your project. Make sure you have permission.</span>
293305
</li>
294306
<li style="display:None" id="tileServerUrlFieldChangeDetectionA">
295307
<label for="tileServerUrlChangeDetectionA">Custom Tile Server URL</label>
@@ -313,19 +325,23 @@ <h4>Tile Server A</h4>
313325
</li>
314326
<li id="tileServerCreditsFieldChangeDetectionA">
315327
<label for="tileServerCreditsFieldChangeDetectionA">Imagery Credits</label>
316-
<input type="text" name="tileServerCreditsChangeDetectionA" id="tileServerCreditsChangeDetectionA">
317-
<span>Insert appropriate imagery credits. E.g. for Bing: "© 2019 Microsoft Corporation, Earthstar Geographics SIO"</span>
328+
<input type="text" name="tileServerCreditsChangeDetectionA" id="tileServerCreditsChangeDetectionA" value="© 2019 Microsoft Corporation, Earthstar Geographics SIO">
329+
<span>Insert appropriate imagery credits if you are using a custom tile server. For other tile server use the default credits.</span>
318330
</li>
319331
<h4>Tile Server B</h4>
320332
<li>
321333
<label for="tileServerChangeDetectionB">Tile Server Name</label>
322334
<select name="tileServerChangeDetectionB" id="tileServerChangeDetectionB" onchange="displayTileServer(this, 'ChangeDetection', 'B')">
323335
<option value="bing">Bing</option>
324-
<option value="digital_globe">Digital Globe</option>
336+
<option value="mapbox">MapBox</option>
337+
<option value="maxar_standard">Maxar Standard</option>
338+
<option value="maxar_premium">Maxar Premium</option>
339+
<option value="esri">Esri World Imagery</option>
340+
<option value="esri_beta">Esri World Imagery (Clarity) Beta</option>
325341
<option value="sinergise">Sinergise</option>
326342
<option value="custom">Custom</option>
327343
</select>
328-
<span>Select the tile server providing satellite imagery tiles for your project. Make sure you have permission. Google hasn't given permission yet and won't work until a proper API key is given.</span>
344+
<span>Select the tile server providing satellite imagery tiles for your project. Make sure you have permission.</span>
329345
</li>
330346
<li style="display:None" id="tileServerUrlFieldChangeDetectionB">
331347
<label for="tileServerUrlChangeDetectionB">Custom Tile Server URL</label>
@@ -349,8 +365,8 @@ <h4>Tile Server B</h4>
349365
</li>
350366
<li id="tileServerCreditsFieldChangeDetectionB">
351367
<label for="tileServerCreditsFieldChangeDetectionB">Imagery Credits</label>
352-
<input type="text" name="tileServerCreditsChangeDetectionB" id="tileServerCreditsChangeDetectionB">
353-
<span>Insert appropriate imagery credits. E.g. for Bing: "© 2019 Microsoft Corporation, Earthstar Geographics SIO"</span>
368+
<input type="text" name="tileServerCreditsChangeDetectionB" id="tileServerCreditsChangeDetectionB" value="© 2019 Microsoft Corporation, Earthstar Geographics SIO">
369+
<span>Insert appropriate imagery credits if you are using a custom tile server. For other tile server use the default credits.</span>
354370
</li>
355371
<li>
356372
<input type="button" style="" id="submit" value="Submit" onClick="submitInfo()">

manager_dashboard/manager_dashboard/js/forms.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,22 @@ function displayProjectTypeFormular(projectType) {
3030
}
3131
}
3232

33+
function addTileServerCredits (tileServer, projectType, which) {
34+
var credits = {
35+
"bing": "© 2019 Microsoft Corporation, Earthstar Geographics SIO",
36+
"maxar_premium": "© 2019 Maxar",
37+
"maxar_standard": "© 2019 Maxar",
38+
"esri": "© 2019 ESRI",
39+
"esri_beta": "© 2019 ESRI",
40+
"mapbox": "© 2019 MapBox",
41+
"sinergise": "© 2019 Sinergise",
42+
"custom": "Please add imagery credits here."
43+
}
44+
45+
document.getElementById("tileServerCredits"+projectType+which).value = credits[tileServer]
46+
}
47+
48+
3349
function displayTileServer (t, projectType, which) {
3450
tileServer = t.value
3551
if (tileServer == "custom") {
@@ -42,6 +58,7 @@ function displayTileServer (t, projectType, which) {
4258
document.getElementById("tileServerUrlField"+projectType+which).style.display = "None";
4359
document.getElementById("tileServerLayerNameField"+projectType+which).style.display = "None";
4460
}
61+
addTileServerCredits(tileServer, projectType, which)
4562
}
4663

4764
function clear_all_fields() {

mapswipe_workers/.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ repos:
77
rev: 3.7.9
88
hooks:
99
- id: flake8
10-
args: ["--ignore=E501"]
10+
args: ["--ignore=E501,W503"]

mapswipe_workers/mapswipe_workers/generate_stats/generate_stats.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ def generate_stats(project_id_list: list):
4141
logger.info(f"project {project_id} does not exist. skip this one.")
4242
continue
4343

44+
project_info = projects_df.loc[projects_df["project_id"] == project_id]
45+
4446
logger.info(f"start generate stats for project: {project_id}")
4547
idx = projects_dynamic_df.index[
4648
projects_dynamic_df["project_id"] == project_id
@@ -49,7 +51,9 @@ def generate_stats(project_id_list: list):
4951
projects_dynamic_df.drop([idx[0]], inplace=True)
5052

5153
# aggregate results and get per project statistics
52-
project_stats_dict = project_stats.get_per_project_statistics(project_id)
54+
project_stats_dict = project_stats.get_per_project_statistics(
55+
project_id, project_info
56+
)
5357
if project_stats_dict:
5458
projects_dynamic_df = projects_dynamic_df.append(
5559
project_stats_dict, ignore_index=True
@@ -63,7 +67,9 @@ def generate_stats(project_id_list: list):
6367
if len(project_id_list) > 0:
6468
# merge static info and dynamic info and save
6569
projects_filename = f"{DATA_PATH}/api-data/projects/projects.csv"
66-
projects_df = overall_stats.save_projects(projects_filename, projects_df, projects_dynamic_df)
70+
projects_df = overall_stats.save_projects(
71+
projects_filename, projects_df, projects_dynamic_df
72+
)
6773

6874
# generate overall stats for active, inactive, finished projects
6975
overall_stats_filename = f"{DATA_PATH}/api-data/stats.csv"

mapswipe_workers/mapswipe_workers/generate_stats/overall_stats.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,20 @@ def get_overall_stats(projects_df: pd.DataFrame, filename: str) -> pd.DataFrame:
1818
filename: str
1919
"""
2020

21-
overall_stats_df = projects_df.groupby(['status']).agg(
22-
count_projects=pd.NamedAgg(column='project_id', aggfunc='count'),
23-
area_sqkm=pd.NamedAgg(column='area_sqkm', aggfunc='sum'),
24-
number_of_results=pd.NamedAgg(column='number_of_results', aggfunc='sum'),
25-
number_of_results_progress=pd.NamedAgg(column='number_of_results_progress', aggfunc='sum'),
26-
average_number_of_users_per_project=pd.NamedAgg(column='number_of_users', aggfunc='mean')
21+
overall_stats_df = projects_df.groupby(["status"]).agg(
22+
count_projects=pd.NamedAgg(column="project_id", aggfunc="count"),
23+
area_sqkm=pd.NamedAgg(column="area_sqkm", aggfunc="sum"),
24+
number_of_results=pd.NamedAgg(column="number_of_results", aggfunc="sum"),
25+
number_of_results_progress=pd.NamedAgg(
26+
column="number_of_results_progress", aggfunc="sum"
27+
),
28+
average_number_of_users_per_project=pd.NamedAgg(
29+
column="number_of_users", aggfunc="mean"
30+
),
2731
)
2832

2933
overall_stats_df.to_csv(filename, index_label="status")
30-
logger.info(f'saved overall stats to {filename}')
34+
logger.info(f"saved overall stats to {filename}")
3135

3236
return overall_stats_df
3337

@@ -49,12 +53,17 @@ def get_project_static_info(filename: str) -> pd.DataFrame:
4953
# make sure to replace newline characters here
5054
sql_query = """
5155
COPY (
52-
SELECT
56+
SELECT
5357
project_id
5458
,regexp_replace(name, E'[\\n\\r]+', ' ', 'g' ) as name
5559
,regexp_replace(project_details, E'[\\n\\r]+', ' ', 'g' ) as project_details
5660
,regexp_replace(look_for, E'[\\n\\r]+', ' ', 'g' ) as look_for
5761
,project_type
62+
-- add an array of the tile server names
63+
,CASE
64+
WHEN project_type_specifics->'tileServer'->'name' IS NOT NULL THEN Array[project_type_specifics->'tileServer'->>'name']
65+
ELSE Array[project_type_specifics->'tileServerA'->>'name', project_type_specifics->'tileServerB'->>'name']
66+
END as tile_server_names
5867
,regexp_replace(status, E'[\\n\\r]+', ' ', 'g' ) as status
5968
,ST_Area(geom::geography)/1000000 as area_sqkm
6069
,ST_AsText(geom) as geom
@@ -101,7 +110,9 @@ def load_project_info_dynamic(filename: str) -> pd.DataFrame:
101110
return df
102111

103112

104-
def save_projects(filename: str, df: pd.DataFrame, df_dynamic: pd.DataFrame) -> pd.DataFrame:
113+
def save_projects(
114+
filename: str, df: pd.DataFrame, df_dynamic: pd.DataFrame
115+
) -> pd.DataFrame:
105116
"""
106117
The function merges the dataframes for static and dynamic project information
107118
and then save the result as csv file.
@@ -119,7 +130,7 @@ def save_projects(filename: str, df: pd.DataFrame, df_dynamic: pd.DataFrame) ->
119130
projects_df = df.merge(
120131
df_dynamic, left_on="project_id", right_on="project_id", how="left"
121132
)
122-
projects_df.to_csv(filename, index_label="idx", line_terminator='\n')
133+
projects_df.to_csv(filename, index_label="idx", line_terminator="\n")
123134
logger.info(f"saved projects: {filename}")
124135
geojson_functions.csv_to_geojson(filename, "geom")
125136
geojson_functions.csv_to_geojson(filename, "centroid")

mapswipe_workers/mapswipe_workers/generate_stats/project_stats.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,17 @@
99
from mapswipe_workers.generate_stats import project_stats_by_date
1010

1111

12+
def add_metadata_to_csv(filename: str):
13+
"""
14+
Append a metadata line to the csv file about intended data usage.
15+
"""
16+
17+
with open(filename, "a") as fd:
18+
fd.write("# This data can only be used for editing in OpenStreetMap.")
19+
20+
logger.info(f"added metadata to {filename}.")
21+
22+
1223
def write_sql_to_csv(filename: str, sql_query: sql.SQL):
1324
"""
1425
Use the copy statement to write data from postgres to a csv file.
@@ -290,7 +301,7 @@ def get_agg_results_by_task_id(
290301
return agg_results_df
291302

292303

293-
def get_per_project_statistics(project_id: str) -> dict:
304+
def get_per_project_statistics(project_id: str, project_info: pd.Series) -> dict:
294305
"""
295306
The function calculates all project related statistics.
296307
Always save results to csv file.
@@ -329,6 +340,10 @@ def get_per_project_statistics(project_id: str) -> dict:
329340
logger.info(f"saved agg results for {project_id}: {agg_results_filename}")
330341
geojson_functions.csv_to_geojson(agg_results_filename, "geom")
331342

343+
if any("maxar" in s for s in project_info["tile_server_names"]):
344+
add_metadata_to_csv(agg_results_filename)
345+
geojson_functions.add_metadata_to_geojson(agg_results_filename)
346+
332347
project_stats_by_date_df = project_stats_by_date.get_project_history(
333348
results_df, groups_df
334349
)

0 commit comments

Comments
 (0)