Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
8641280
Draft for completeness project.
Apr 10, 2020
b570db1
formatting convention added
TahiraU Apr 14, 2020
017df40
added urlB to build_area_tutorial and completeness tutorial generated
TahiraU Apr 14, 2020
500e8c4
test gitignore
TahiraU Apr 14, 2020
b015ace
test
TahiraU Apr 14, 2020
b38cee0
test2
TahiraU Apr 14, 2020
93ad32e
completeness tutorial added
TahiraU Apr 15, 2020
0b1a1e1
adjusted the tutorial for completeness project
TahiraU Apr 28, 2020
250f94b
adjusted create project for completeness project
TahiraU Apr 30, 2020
cee7169
fetch tileserverB if it's project type 4
TahiraU Apr 30, 2020
c2a14c7
build area modified for completeness
TahiraU May 7, 2020
875f2d1
renamed url to urlB
TahiraU May 7, 2020
453b2ee
simplify manager dashboard code #345
Hagellach37 May 7, 2020
6e3a3f8
set correct default view #345
Hagellach37 May 7, 2020
e0f2045
add .pre-commit config again
Hagellach37 May 7, 2020
e75bcd0
small fix
Hagellach37 May 7, 2020
0a9484f
changed default to TileServer and TileServerB for all project types
Hagellach37 May 7, 2020
3dabcb0
Merge pull request #346 from mapswipe/project_creation_form
Hagellach37 May 7, 2020
9b00129
move change detection projection creation into build_area project cre…
Hagellach37 May 8, 2020
bcf0a9a
add quadkey to aggregated results
Hagellach37 May 8, 2020
fa7d572
Merge pull request #347 from mapswipe/add_quadkey_to_agg_results
Hagellach37 May 8, 2020
c7c7c61
adjust group size based on project type #256
Hagellach37 May 8, 2020
5fac7c7
add basic user stats per project #335
Hagellach37 May 8, 2020
c9e4046
Merge pull request #353 from mapswipe/user_stats
Hagellach37 May 8, 2020
3f885ef
Add type hint
May 12, 2020
41cca1c
Run isort and black
May 12, 2020
566d744
Add information to logging message
May 12, 2020
e1702ac
Remove debugging print statements
May 13, 2020
93e07e7
Remove hardcoded API Keys
May 13, 2020
8ee0760
IMAGE URL modified local directory to input file removed, and moved t…
TahiraU May 14, 2020
20efb7a
create completness tutorial based on xMax=17
TahiraU May 20, 2020
25ff666
incorporate project types names and add class for tutorial
Hagellach37 May 21, 2020
c32514a
Revert "incorporate project types names and add class for tutorial"
May 24, 2020
dc677af
Merge branch 'dev' into completeness
May 24, 2020
a8811fe
add tutorial creation workflow
Hagellach37 May 26, 2020
b649ffd
fix imports for tests
Hagellach37 May 26, 2020
d8671c2
clean up and adjust tasks_to_geojson for multiple zoom levels
Hagellach37 May 26, 2020
3370513
delete file not used
Hagellach37 May 26, 2020
30d90ad
use TileServer class for project creation
Hagellach37 May 26, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -132,3 +132,4 @@ nginx.conf
*/.firebaserc

.DS_Store

241 changes: 77 additions & 164 deletions manager_dashboard/manager_dashboard/create.html

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions manager_dashboard/manager_dashboard/css/mapswipe.css
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@

#geometryMap { height: 300px; width: 100%}
#geometryChangeDetectionMap { height: 300px; width: 100%}
#geometryCompletenessMap { height: 300px; width: 100%}

div.project-data {
padding-bottom: 50px !important;
Expand Down
186 changes: 88 additions & 98 deletions manager_dashboard/manager_dashboard/js/forms.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,66 @@ function adjust_textarea(h) {
h.style.height = (h.scrollHeight)+"px";
}

function displayProjectTypeFormular(projectType) {
if (projectType == 1) {
document.getElementById("BuildAreaProjectFormular").style.display = "block";
document.getElementById("FootprintProjectFormular").style.display = "None",
document.getElementById("ChangeDetectionProjectFormular").style.display = "None";
document.getElementById("tileServerBuildArea").value = "bing";
displayTileServer ("bing", "BuildArea", "");
setTimeout(function(){ BuildAreaMap.invalidateSize()}, 400);
} else if (projectType == 2) {
document.getElementById("FootprintProjectFormular").style.display = "block";
document.getElementById("BuildAreaProjectFormular").style.display = "None";
document.getElementById("ChangeDetectionProjectFormular").style.display = "None";
document.getElementById("tileServerFootprint").value = "bing";
displayTileServer ("bing", "Footprint", "");
} else if (projectType == 3) {
document.getElementById("FootprintProjectFormular").style.display = "None"
document.getElementById("BuildAreaProjectFormular").style.display = "None";
document.getElementById("ChangeDetectionProjectFormular").style.display = "block";
document.getElementById("tileServerChangeDetectionA").value = "bing";
document.getElementById("tileServerChangeDetectionB").value = "bing";
displayTileServer ("bing", "ChangeDetectionA", "");
displayTileServer ("bing", "ChangeDetectionB", "");
setTimeout(function(){ ChangeDetectionMap.invalidateSize()}, 400);
function initForm() {
initMap();
displayProjectTypeForm("build_area")
}


function initMap() {
ProjectAoiMap = L.map('geometryMap').setView([0.0, 0.0], 4);
L.tileLayer( 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png', {
attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>',
subdomains: ['a','b','c']
}).addTo( ProjectAoiMap );
console.log('added map');
aoiLayer = L.geoJSON().addTo(ProjectAoiMap);
setTimeout(function(){ ProjectAoiMap.invalidateSize()}, 400);

}

function displayProjectTypeForm(projectType) {
document.getElementById("projectType").value = projectType;
switch (projectType) {
case "build_area":
displayTileServer("bing", "A");
document.getElementById("groupSize").value = 120;
document.getElementById("form_project_aoi_geometry").style.display = "block";
document.getElementById("form_project_task_geometry").style.display = "None";
document.getElementById("form_zoom_level").style.display = "block";
document.getElementById("form_tile_server_a").style.display = "block";
document.getElementById("form_tile_server_b").style.display = "None";
setTimeout(function(){ ProjectAoiMap.invalidateSize()}, 400);
break;
case "footprint":
displayTileServer("bing", "A");
document.getElementById("groupSize").value = 25;
document.getElementById("form_project_aoi_geometry").style.display = "None";
document.getElementById("form_project_task_geometry").style.display = "block";
document.getElementById("form_zoom_level").style.display = "None";
document.getElementById("form_tile_server_a").style.display = "block";
document.getElementById("form_tile_server_b").style.display = "None";
break;
case "change_detection":
case "completeness":
displayTileServer("bing", "A");
displayTileServer("bing", "B");
if (projectType == "change_detection") {
document.getElementById("groupSize").value = 25;
} else {
document.getElementById("groupSize").value = 80;
}
document.getElementById("form_project_aoi_geometry").style.display = "block";
document.getElementById("form_project_task_geometry").style.display = "None";
document.getElementById("form_zoom_level").style.display = "block";
document.getElementById("form_tile_server_a").style.display = "block";
document.getElementById("form_tile_server_b").style.display = "block";
setTimeout(function(){ ProjectAoiMap.invalidateSize()}, 400);
break;
}
}

function addTileServerCredits (tileServer, projectType, which) {
function addTileServerCredits (tileServerName, which) {
var credits = {
"bing": "© 2019 Microsoft Corporation, Earthstar Geographics SIO",
"maxar_premium": "© 2019 Maxar",
Expand All @@ -41,40 +74,35 @@ function addTileServerCredits (tileServer, projectType, which) {
"sinergise": "© 2019 Sinergise",
"custom": "Please add imagery credits here."
}

document.getElementById("tileServerCredits"+projectType+which).value = credits[tileServer]
document.getElementById("tileServer"+which+"Credits").value = credits[tileServerName]
}


function displayTileServer (t, projectType, which) {
tileServer = t.value
if (tileServer == "custom") {
document.getElementById("tileServerUrlField"+projectType+which).style.display = "block"
document.getElementById("tileServerLayerNameField"+projectType+which).style.display = "block";
} else if (tileServer == "sinergise") {
document.getElementById("tileServerUrlField"+projectType+which).style.display = "None";
document.getElementById("tileServerLayerNameField"+projectType+which).style.display = "block";
} else {
document.getElementById("tileServerUrlField"+projectType+which).style.display = "None";
document.getElementById("tileServerLayerNameField"+projectType+which).style.display = "None";
function displayTileServer (tileServerName, which) {
switch (tileServerName) {
case "custom":
document.getElementById("tileServer"+which+"UrlField").style.display = "block";
document.getElementById("tileServer"+which+"LayerNameField").style.display = "block";
break;
case "sinergise":
document.getElementById("tileServer"+which+"UrlField").style.display = "None";
document.getElementById("tileServer"+which+"LayerNameField").style.display = "block";
break;
default:
document.getElementById("tileServer"+which+"UrlField").style.display = "None";
document.getElementById("tileServer"+which+"LayerNameField").style.display = "None";
}
addTileServerCredits(tileServer, projectType, which)
addTileServerCredits(tileServerName, which)
}

function clear_fields() {
console.log('clear fields.')
document.getElementById('projectNumber').value = 1
document.getElementById('geometry').value = null
document.getElementById('inputAoi').value = null
document.getElementById('geometryInfo').innerHTML = ''
document.getElementById('geometryContent').innerHTML = ''
BuildAreaLayer.clearLayers()
document.getElementById('geometryChangeDetection').value = null
document.getElementById('geometryChangeDetectionInfo').innerHTML = ''
document.getElementById('geometryChangeDetectionContent').innerHTML = ''
ChangeDetectionLayer.clearLayers()
//document.getElementById('imageText').innerHTML = ''
//document.getElementById('imageFile').src = ''
displayProjectTypeFormular(1)
aoiLayer.clearLayers()
displayProjectTypeForm("build_area")
}

function displaySuccessMessage() {
Expand All @@ -89,30 +117,18 @@ function displayImportForm() {
function openFile(event) {
var input = event.target;

var info_element_id = event.target.id + 'Info'
var content_element_id = event.target.id + 'Content'
var map_element_id = event.target.id + 'Map'

var info_output = document.getElementById(info_element_id);
// clear info field
var info_output = document.getElementById("geometryInfo");
info_output.innerHTML = '';
info_output.style.display = 'block'

var content_output = document.getElementById(content_element_id);

if (event.target.id === 'geometry') {
var map = BuildAreaMap
var layer = BuildAreaLayer
var zoomLevel = parseInt(document.getElementById('zoomLevel').value)
} else {
var map = ChangeDetectionMap
var layer = ChangeDetectionLayer
var zoomLevel = parseInt(document.getElementById('zoomLevelChangeDetection').value)
}
// clear map layers
aoiLayer.clearLayers()

// Check file size before loading
var filesize = input.files[0].size;
if (filesize > 2.5 * 1024 * 1024) {
var err='filesize is too big (max 2.5MB): ' + filesize/(1000*1000)
if (filesize > 1 * 1024 * 1024) {
var err='filesize is too big (max 1MB): ' + filesize/(1000*1000)
info_output.innerHTML = '<b>Error reading GeoJSON file</b><br>' + err;
info_output.style.display = 'block'
} else {
Expand Down Expand Up @@ -145,8 +161,8 @@ function openFile(event) {
info_output.innerHTML += 'Feature Type: ' + type + '<br>';
info_output.style.display = 'block'

// check project size

// check project size, based on zoom level
var zoomLevel = parseInt(document.getElementById('zoomLevel').value);
area = turf.area(feature)/1000000 // area in square kilometers
maxArea = (23 - zoomLevel) * (23 - zoomLevel) * 200
console.log('project size: ' + area + ' sqkm')
Expand All @@ -157,21 +173,16 @@ function openFile(event) {
info_output.style.display = 'block'

// add feature to map
layer.clearLayers()
layer.addData(geojsonData);
map.fitBounds(layer.getBounds());
aoiLayer.addData(geojsonData);
ProjectAoiMap.fitBounds(aoiLayer.getBounds());
console.log('added input geojson feature')

// add text to html object
info_output.innerHTML += 'Project seems to be valid :)';
info_output.style.display = 'block'

if (event.target.id === 'geometry') {
BuildAreaGeometry = text
} else {
ChangeDetectionGeometry = text
}

// set project aoi geometry
projectAoiGeometry = text
}
catch(err) {
info_output.innerHTML = '<b>Error reading GeoJSON file</b><br>' + err;
Expand Down Expand Up @@ -202,30 +213,9 @@ function openImageFile(event) {
reader.readAsDataURL(input.files[0]);
};

function initMap() {
BuildAreaMap = L.map('geometryMap').setView([0.0, 0.0], 4);
L.tileLayer( 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png', {
attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>',
subdomains: ['a','b','c']
}).addTo( BuildAreaMap );
console.log('added map');
BuildAreaLayer = L.geoJSON().addTo(BuildAreaMap);
setTimeout(function(){ BuildAreaMap.invalidateSize()}, 400);

ChangeDetectionMap = L.map('geometryChangeDetectionMap').setView([0.0, 0.0], 4);
L.tileLayer( 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png', {
attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>',
subdomains: ['a','b','c']
}).addTo( ChangeDetectionMap );
console.log('added map');
ChangeDetectionLayer = L.geoJSON().addTo(ChangeDetectionMap);
setTimeout(function(){ ChangeDetectionMap.invalidateSize()}, 400);
}


function closeModal() {
var modal = document.getElementById("uploadModal");
modal.style.display = "none";
var modalSuccess = document.getElementById("modalSuccess");
modalSuccess.style.display = "none";
}
}
Loading