161 lines
4.6 KiB
JavaScript
Executable File
161 lines
4.6 KiB
JavaScript
Executable File
|
|
class PolyLineObj {
|
|
constructor(path) {
|
|
this.path = path;
|
|
this.graphic = null;
|
|
}
|
|
}
|
|
|
|
var parser, xmlDoc;
|
|
var parser = new DOMParser();
|
|
var graphicLayer = null;
|
|
var color = null;
|
|
var x = 1;
|
|
|
|
window.onload = function () {
|
|
document.getElementById('PathUpload').addEventListener('change', pathXml, false);
|
|
generateMap();
|
|
}
|
|
|
|
function generateMap() {
|
|
require([
|
|
"esri/Map",
|
|
"esri/views/SceneView",
|
|
"esri/layers/TileLayer",
|
|
"esri/layers/SceneLayer",
|
|
"esri/layers/GraphicsLayer",
|
|
"dojo/domReady!",
|
|
],
|
|
function (
|
|
Map,
|
|
SceneView,
|
|
TileLayer,
|
|
SceneLayer,
|
|
GraphicsLayer,
|
|
) {
|
|
map = new Map({
|
|
// basemap: "topo"
|
|
});
|
|
view = new SceneView({
|
|
container: "mapDiv",
|
|
map: map,
|
|
scale: 1000,
|
|
camera: {
|
|
position: {
|
|
x: 8.896638,
|
|
y: 53.054441,
|
|
z: 40
|
|
}
|
|
}
|
|
});
|
|
tile = new TileLayer({
|
|
url: "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Bremen/Hemelingen_TIF_WebMerc/MapServer",
|
|
})
|
|
feature = new SceneLayer({
|
|
url: "http://excgeo21.sl.defence-elec.de/arcgis/rest/services/Hosted/BT56_rev576/SceneServer",
|
|
});
|
|
map.add(feature);
|
|
map.add(tile);
|
|
graphicLayer = new GraphicsLayer();
|
|
map.add(graphicLayer);
|
|
view.on("click", eventHandler);
|
|
function eventHandler(event) {
|
|
view.hitTest(event).then(getGraphics);
|
|
function getGraphics(response) {
|
|
selected = response.results[0].graphic.__accessor__.store._values.attributes.name;
|
|
}
|
|
};
|
|
view.popup.on("trigger-action", function (event) {
|
|
if (event.action.id === "highlight") {
|
|
PolyObjArray.forEach(polyObj => {
|
|
if (polyObj.name == selected) {
|
|
var newGraphic = polyObj.graphic.clone();
|
|
newGraphic.symbol = alternativeSymbol;
|
|
graphicLayer.remove(polyObj.graphic);
|
|
polyObj.alternativGraphic = newGraphic;
|
|
graphicLayer.add(polyObj.alternativGraphic);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function pathXml(event) {
|
|
event.preventDefault();
|
|
var XMLFile = event.target.files[0];
|
|
var r = Math.floor(Math.random() * 255);
|
|
var g = Math.floor(Math.random() * 255);
|
|
var b = Math.floor(Math.random() * 255);
|
|
color = { r: r, g: g, b: b };
|
|
parseXML(XMLFile);
|
|
}
|
|
|
|
function parseXML(XMLFile) {
|
|
var file = XMLFile;
|
|
var reader = new FileReader();
|
|
reader.onload = function (event) {
|
|
readXML = event.target.result;
|
|
xmlDoc = parser.parseFromString(readXML, "application/xml");
|
|
createPath();
|
|
}
|
|
reader.readAsText(file);
|
|
}
|
|
|
|
|
|
function createPath() {
|
|
var points = [];
|
|
var pathArray = [];
|
|
points = Array.from(xmlDoc.getElementsByTagName("trkpt"));
|
|
points.forEach(point => {
|
|
var pathpoint = [parseFloat(point.attributes[1].value), parseFloat(point.attributes[0].value), parseFloat(point.children[0].textContent) / 100];
|
|
pathArray.push(pathpoint);
|
|
});
|
|
var polyline_ = new PolyLineObj(pathArray);
|
|
createPolyLineGraphic(polyline_);
|
|
}
|
|
|
|
|
|
function getWkid() {
|
|
var wkid = view.spatialReference.__accessor__.store._values.wkid;
|
|
return (wkid);
|
|
}
|
|
function getSpatialRefOut() {
|
|
var spatialOut = view.spatialReference;
|
|
return spatialOut;
|
|
}
|
|
function createPolyLineGraphic(polyline_) {
|
|
require([
|
|
"esri/Graphic",
|
|
],
|
|
function (
|
|
Graphic
|
|
) {
|
|
var polyline = {
|
|
type: "polyline",
|
|
paths: polyline_.path,
|
|
}
|
|
var lineSymbol = {
|
|
type: "simple-line", // autocasts as SimpleLineSymbol()
|
|
color: [color.r, color.g, color.b],
|
|
width: 4
|
|
};
|
|
var polylineGraphic = new Graphic({
|
|
geometry: polyline,
|
|
symbol: lineSymbol
|
|
});
|
|
|
|
polyline_.graphic = polylineGraphic;
|
|
console.log(polyline_);
|
|
graphicLayer.add(polyline_.graphic);
|
|
})
|
|
}
|
|
|
|
function toggleBuildings() {
|
|
x++;
|
|
if (x % 2 == 0) map.remove(feature)
|
|
else map.add(feature);
|
|
}
|
|
|
|
|