<script type="text/javascript">
var src = [40.6976, -74.2598];
function convertToDMS(src) {
function toDMS(n) {
n = Math.abs(n);
var d = Math.floor(n);
n = n - d;
n *= 60;
var m = Math.floor(n);
n = n - m;
n *= 60;
var s = Math.floor(n);
return "" d " " m " " s;
}
var dir0 = src[0] > 0 ? "N" : "S";
var dir1 = src[1] > 0 ? "E" : "W";
console.log(toDMS(src[0]) dir0);
console.log(toDMS(src[1]) dir1);
}
convertToDMS(src);
</script>
<div id="locationdiv">[40.6976,-74.2598]</div>
Using the script above I am able to get degree, minute and second like 40°41'46.0"N 74°18'08.0"W
However if instead of using
var src = [40.6976,-74.2598];
I use
var src = document.getElementById("locationdiv").innerHTML;
the script does not work with no error in console. How do I convert the innerHTML which comes as a string to the form [40.6976,-74.2598] which can be used.
CodePudding user response:
Check for typeof
is "string"
If true — convert the argument value to Object using JSON.parse
function toDMS(n) {
n = Math.abs(n);
const d = Math.floor(n);
n = n - d;
n *= 60;
const m = Math.floor(n);
n = n - m;
n *= 60;
const s = Math.floor(n);
return `${d}° ${m}' ${s}"`;
}
function convertToDMS(latLng) {
if (typeof latLng === "string") latLng = JSON.parse(latLng);
const [lat, lng] = latLng;
const dirLat = lat > 0 ? "N" : "S";
const dirLng = lng > 0 ? "E" : "W";
console.log(`${toDMS(lat)} ${dirLat}`);
console.log(`${toDMS(lng)} ${dirLng}`);
}
convertToDMS([40.6976, -74.2598]);
convertToDMS(document.querySelector("#locationdiv").textContent);
<div id="locationdiv">[40.6976,-74.2598]</div>