我的JavaScript代码有问题。
它基本上由一个脚本组成,该脚本访问照片的exif,然后将其显示在HTML页面上,更具体地说是它的纬度和经度。
这个想法是,然后在Google Maps iframe上同时使用纬度和经度,然后显示拍摄照片的位置。但这是后来的事情,因为这只是我用来完善其工作原理的测试页。
问题是,在使用纬度和经度之前,必须将其转换为同一iframe可以识别的格式:
EX:“ latitude = EXIF.getTag(this,“ GPSLatitude”)”的输出为:
41,23.0692,0
它必须是这样的:
41.38448666666667
我有一个函数可以做到这一点,如果我做这样的事情,它就可以工作:
var toDecimal = function (number) {
var d = Math.floor(number[0]);
var m = Math.floor(number[1]);
var s = ((number[1]%1)*60);
var dms = d+(m/60)+(s/3600);
return dms
};
var latitude_teste="41,23.0692,0";
var latitude_array = latitude_teste.split(',');
var latitude_final = toDecimal(latitude_array);
var local_lat_final = document.getElementById("local_lat_final");
local_lat_final.innerHTML = `${latitude_final}`;
但是,如果我尝试像上面那样使用此方法(纬度是getExif()函数的变量):
var latitude_teste=latitude;
var latitude_array = latitude_teste.split(',');
var latitude_final = toDecimal(latitude_array);
var local_lat_final = document.getElementById("local_lat_final");
local_lat_final.innerHTML = `${latitude_final}`;
对于纬度根本没有任何价值...
为什么会有这个问题?这是语法错误吗?
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>EXIF</title>
<style>
img{
width: 500px;
max-height: auto;
}
</style>
</head>
<body>
<img src="https://c1.staticflickr.com/5/4867/30883801817_bf122bc498_o.jpg" id="img1" />
<h1>Latitude Exif</h1>
<p id="local_lat"></p>
<h1>Longitude Exif</h1>
<p id="local_lon"></p>
<h1>Latitude Final</h1>
<p id="local_lat_final"></p>
<h1>Longitude Final</h1>
<p id="local_lon_final"></p>
<script src="exif.js"></script>
<script>
window.onload=getExif;
function getExif() {
var img1 = document.getElementById("img1");
EXIF.getData(img1, function() {
latitude = EXIF.getTag(this, "GPSLatitude");
var longitude = EXIF.getTag(this, "GPSLongitude");
var local_lat = document.getElementById("local_lat");
var local_lon = document.getElementById("local_lon");
local_lat.innerHTML = `${latitude}`;
local_lon.innerHTML = `${longitude}`;
});
}
/*função para converter latitude e longitude do exif.js
em graus decimais, legíveis pelo google maps*/
var toDecimal = function (number) {
var d = Math.floor(number[0]);
var m = Math.floor(number[1]);
var s = ((number[1]%1)*60);
var dms= d+(m/60)+(s/3600);
return dms
};
var latitude_teste="41,23.0692,0";
var latitude_array = latitude_teste.split(',');
var latitude_final = toDecimal(latitude_array);
var local_lat_final = document.getElementById("local_lat_final");
local_lat_final.innerHTML = `${latitude_final}`;
/*THIS PIECE OF CODE BELOW WON'T WORK if used to replace the one above*/
/*
var latitude_teste=latitude;
var latitude_array = latitude_teste.split(',');
var latitude_final = toDecimal(latitude_array);
var local_lat_final = document.getElementById("local_lat_final");
local_lat_final.innerHTML = `${latitude_final}`;
*/
var longitude_teste="2,6.4013,0";
var longitude_array = longitude_teste.split(',');
var longitude_final = toDecimal(longitude_array);
var local_lon_final = document.getElementById("local_lon_final");
local_lon_final.innerHTML = `${longitude_final}`;
</script>
</body>
</html>
答案 0 :(得分:1)
从libssl-dev
获得的latitude
已经是一个数组。只是因为您将其输出为字符串,才看到逗号分隔的字符串,但这实际上是一个数组。
因此,在您的代码中,您不应该执行EXIF.getTag()
:
split()
相反,要做:
var latitude_teste=latitude;
var latitude_array = latitude_teste.split(',');
var latitude_final = toDecimal(latitude_array);
附录:您应将此代码放在必须var latitude_final = toDecimal(latitude);
的回调中。您尝试访问其中的EXIF.getTag()
和latitude
的外部是重复/关闭的原因。
答案 1 :(得分:-1)
我认为这个问题与将值的数组插入函数有关,请尝试为函数提供多个参数或在函数中对其进行迭代。 在我看来,参数是更简洁的选择
var x = function(x,y,z){
// do stuff
return result;
}