Add new functionality for dzialki, dzialki2, lines, mpzp, osuwiska, position, section, and test modules with API integration and canvas drawing capabilities
This commit is contained in:
79
js/functions/position.js
Normal file
79
js/functions/position.js
Normal file
@@ -0,0 +1,79 @@
|
||||
let posStarted = -1;
|
||||
const posIcon = document.createElement("img");
|
||||
function getPos() {
|
||||
posStarted = -posStarted;
|
||||
|
||||
const canvas = document.getElementsByClassName("ol-unselectable")[0];
|
||||
|
||||
if (posStarted == 1) {
|
||||
posIcon.src = chrome.runtime.getURL("icons/position_alt.png");
|
||||
posButton.appendChild(posIcon);
|
||||
canvas.addEventListener("click", drawPos, true);
|
||||
} else {
|
||||
posIcon.src = chrome.runtime.getURL("icons/position.png");
|
||||
posButton.appendChild(posIcon);
|
||||
canvas.removeEventListener("click", drawPos, true);
|
||||
}
|
||||
}
|
||||
|
||||
function drawPos(event) {
|
||||
event.preventDefault();
|
||||
if (event.target.className == "ol-unselectable") {
|
||||
const bttm = document.getElementsByClassName("pl-2");
|
||||
const x = bttm[0].innerHTML;
|
||||
const y = bttm[1].innerHTML;
|
||||
const canvas = document.getElementsByClassName("ol-unselectable")[0];
|
||||
const ctx = canvas.getContext("2d");
|
||||
|
||||
const header = canvas.getBoundingClientRect().top;
|
||||
|
||||
ctx.beginPath();
|
||||
ctx.arc(event.clientX, event.clientY - header, 3, 0, Math.PI * 2, true);
|
||||
ctx.fill();
|
||||
|
||||
let URL = `https://epsg.io/trans?data=${x},${y}&s_srs=2177&t_srs=4326`;
|
||||
|
||||
fetch(URL, {
|
||||
method: "GET",
|
||||
})
|
||||
.then((response) => response.json())
|
||||
.then((data) => {
|
||||
const x = data.x; //E
|
||||
const y = data.y; //N
|
||||
|
||||
const degreesNorth = Math.floor(y);
|
||||
const degreesEast = Math.floor(x);
|
||||
|
||||
const minutesNorth = Math.floor((y - degreesNorth) * 60);
|
||||
const minutesEast = Math.floor((x - degreesEast) * 60);
|
||||
|
||||
const secondsNorth = Math.floor(
|
||||
((y - degreesNorth) * 60 - minutesNorth) * 60
|
||||
);
|
||||
const secondsEast = Math.floor(
|
||||
((x - degreesEast) * 60 - minutesEast) * 60
|
||||
);
|
||||
|
||||
const positionText =
|
||||
"" +
|
||||
degreesNorth +
|
||||
"°" +
|
||||
minutesNorth +
|
||||
"'" +
|
||||
secondsNorth +
|
||||
'"N ' +
|
||||
degreesEast +
|
||||
"°" +
|
||||
minutesEast +
|
||||
"'" +
|
||||
secondsEast +
|
||||
'"E';
|
||||
|
||||
//https://www.calculatorsoup.com/calculators/conversions/convert-decimal-degrees-to-degrees-minutes-seconds.php
|
||||
ctx.font = "20px Arial";
|
||||
ctx.fillText(positionText, event.clientX + 5, event.clientY - header);
|
||||
|
||||
navigator.clipboard.writeText(positionText);
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user