无法访问函数[JavaScript]

时间:2018-12-27 17:51:23

标签: javascript html function variables exif-js

我的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>

2 个答案:

答案 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;
}