Commit 213236e1 authored by Eric Duminil's avatar Eric Duminil
Browse files

RegionChooser: Trying to group features by project.

parent 698470f3
......@@ -11,11 +11,13 @@ proj4.defs("EPSG:2263", "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.6666666666
proj4.defs("EPSG:25832", "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs "); // http://spatialreference.org/ref/epsg/etrs89-utm-zone-32n/proj4/
proj4.defs("EPSG:28992", "+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.999908 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +towgs84=565.2369,50.0087,465.658,-0.406857330322398,0.350732676542563,-1.8703473836068,4.0812 +no_defs <>"); //
var regionChooser = (function(){
//var regionChooser = (function(){
var publicScope = {};
var fromJavaFX = navigator.userAgent.indexOf('JavaFX') !== -1;
var dataPanel = $('#dataPanel');
var wgs84Sphere = new ol.Sphere(6378137);
var gmlId = 0;
var novaFactoryId = 0;
if (fromJavaFX){
$("html").addClass("wait");
......@@ -72,6 +74,7 @@ var regionChooser = (function(){
publicScope.addCityGmlHull = function(kmlString) {
options = {featureProjection: ol.proj.get('EPSG:3857')};
feature = kmlFormat.readFeature(kmlString, options);
feature.setId(gmlId++);
kml_source.addFeature(feature);
dataPanel.append('.');
srsName = feature.get("srsName") || "EPSG:31467";
......@@ -90,8 +93,10 @@ var regionChooser = (function(){
});
feature["geoJSON"] = geoJsonFormat.writeFeatureObject(feature);
feature["area"] = feature.getGeometry().getArea();
feature["description"] = "novaFACTORY>" + name;
feature["project"] = "novaFACTORY";
feature["name"] = name;
feature["source"] = "NovaFACTORY";
feature.setId(novaFactoryId++);
novafactory_vectors.addFeature(feature);
};
......@@ -122,7 +127,8 @@ var regionChooser = (function(){
feature["area"] = feature.getGeometry().getArea();
var project = feature.get("project");
var name = feature.get("name");
feature["description"] = project + ">" + name;
feature["project"] = project;
feature["name"] = name;
feature["source"] = "CityGML";
});
}
......@@ -189,13 +195,12 @@ var regionChooser = (function(){
var intersection_found = false;
intersections.clear();
//TODO: Refactor. Smaller functions
//TODO: No global i. feature["id"]
function findIntersection(feature) {
try {
var jsonIntersection = turf.intersect(poly1, feature["geoJSON"]);
if (undefined !== jsonIntersection) {
if (!intersection_found) {
dataPanel.append("Intersection found with :<br/>\n");
//dataPanel.append("Intersection found with :<br/>\n");
intersection_found = true;
}
var intersection = geoJsonFormat.readFeature(jsonIntersection);
......@@ -204,13 +209,11 @@ var regionChooser = (function(){
var sketch_percentage = Math.round(intersectionArea / sketch_area * 100);
intersections.addFeature(intersection);
var link = '<li>'
var description;
if (fromJavaFX) {
link += "<a href=\"#\" onclick=\"regionChooser.downloadRegionFrom" + feature["source"] + "(" + i
+ ");return false;\">" + feature["description"] + "</a>";
link += "<a href=\"#\" onclick=\"regionChooser.downloadRegionFrom" + feature["source"] + "(" + feature.getId()
+ ");return false;\">" + feature["name"] + "</a>";
} else {
link += feature['description'];
link += feature['name'];
}
link += " (" + citygml_percentage + "%";
......@@ -221,14 +224,20 @@ var regionChooser = (function(){
}
} catch (err) {
console.log(feature.get('description') + " - " + err);
console.log(feature.get('name') + " - " + err);
}
i++;
}
var i = 0;
features_by_project = groupBy(kml_source.getFeatures(), "project");
Object.keys(features_by_project).forEach(function(project) {
dataPanel.append("<h2>" + project);
features = features_by_project[project];
for (var i = 0; i < features.length; i++) {
findIntersection(features[i]);
}
});
dataPanel.append("<h2>" + "NovaFactory");
novafactory_vectors.forEachFeature(findIntersection);
i = 0;
kml_source.forEachFeature(findIntersection);
// kml_source.forEachFeature(findIntersection);
if (!intersection_found) {
dataPanel.append("No intersection found with any CityGML or NovaFactory product<br/>\n");
}
......@@ -241,7 +250,7 @@ var regionChooser = (function(){
publicScope.downloadRegionFromCityGML = function(i) {
// TODO: Disable all links
// TODO: DRY
var feature = kml_source.getFeatures()[i];
var feature = kml_source.getFeatureById(i);
// Waiting 100ms in order to let the cursor change
setTimeout(function() {
var start = new Date().getTime();
......@@ -252,7 +261,7 @@ var regionChooser = (function(){
fxapp.downloadRegionFromCityGML(sketchAsWKT(srsName), feature.get("project"), feature.get("name"), srsName);
var end = new Date().getTime();
var time = end - start;
console.log('DL Execution time: ' + time);
console.log('Download Execution time: ' + (time/1000.0).toFixed(3) + 's');
setTimeout(function() {
$("html").removeClass("wait");
dataPanel.append("Done<br/>\n");
......@@ -340,7 +349,7 @@ var regionChooser = (function(){
publicScope.downloadRegionFromNovaFACTORY = function(i) {
$("html").addClass("wait");
var feature = novafactory_vectors.getFeatures()[i];
var feature = novafactory_vectors.getFeatureById(i);
// Waiting 100ms in order to let the cursor change
setTimeout(function() {
fxapp.downloadRegion(sketchAsWKT(), feature.get('name'), novafactory_layer);
......@@ -374,6 +383,13 @@ var regionChooser = (function(){
}
}
groupBy = function(xs, key) {
return xs.reduce(function(rv, x) {
(rv[x[key]] = rv[x[key]] || []).push(x);
return rv;
}, {});
};
function displayHelp(){
dataPanel.empty();
dataPanel.append("Welcome to Region Chooser!<br><br>\n");
......@@ -393,6 +409,6 @@ var regionChooser = (function(){
}
focusOnMap();
//var regionChooser = publicScope; //NOTE: In order to open closure. For debugging
return publicScope;
})();
\ No newline at end of file
var regionChooser = publicScope; //NOTE: In order to open closure. For debugging
// return publicScope;
//})();
\ No newline at end of file
......@@ -117,8 +117,11 @@ div#dataPanel{
word-wrap: break-word;
}
div#dataPanel h2 {
font-size: 16px;
}
div#dataPanel li {
list-style-type: none;
padding: 2px 0 0 0;
margin: 5px 0;
line-height: 1;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment