Forráskód Böngészése

Fix GeoLocation issue with W GPS coordinates

isundil 1 éve
szülő
commit
0f2124e657
3 módosított fájl, 16 hozzáadás és 9 törlés
  1. 1 1
      package.json
  2. 2 2
      src/filetype/imagemagick.js
  3. 13 6
      src/filetype/metaStruct.js

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "photochamber-webserver",
-  "version": "20240909",
+  "version": "20241007",
   "description": "Photochamber services",
   "main": "index.js",
   "scripts": {

+ 2 - 2
src/filetype/imagemagick.js

@@ -110,8 +110,8 @@ module.exports.parse = async (fileObj, data) => {
         result.compression = imdata.compression || undefined;
         result.orientation = imdata.orientation || undefined;
         try {
-            result.setGPSInfo(imdata.gPSLatitude.split(',').map(eval), data.gPSLatitudeRef,
-                imdata.gPSLongitude.split(',').map(eval), data.gPSLongitudeRef);
+            await result.setGPSInfo(imdata.gPSLatitude.split(',').map(eval), imdata.gPSLatitudeRef,
+                imdata.gPSLongitude.split(',').map(eval), imdata.gPSLongitudeRef);
         }
         catch (err) {}
         result.tags = readTags(imdata);

+ 13 - 6
src/filetype/metaStruct.js

@@ -6,14 +6,21 @@ function ExifGps(lat, latRef, lon, lonRef) {
     this.lat = null;
     this.lon = null;
 
+    let latSign = 1;
+    let lonSign = 1;
+
     if (!lat || !lon)
         return;
-    if (latRef && latRef !== 'N' && lat >= 0)
-        lat[0] *= -1;
-    if (lonRef && lonRef !== 'E' && lon[0] >= 0)
-        lon[0] *= -1;
-    this.lat = lat[0] + lat[1] / 60 + lat[2]/3600;
-    this.lon = lon[0] + lon[1] / 60 + lon[2]/3600;
+    if ((latRef && latRef !== 'N') || lat < 0) {
+        lat[0] = Math.abs(lat[0]);
+        latSign = -1;
+    }
+    if ((lonRef && lonRef !== 'E') || lon[0] < 0) {
+        lon[0] = Math.abs(lon[0]);
+        lonSign = -1;
+    }
+    this.lat = (lat[0] + lat[1] / 60 + lat[2]/3600) * latSign;
+    this.lon = (lon[0] + lon[1] / 60 + lon[2]/3600) * lonSign;
     if (!this.lat || isNaN(this.lat) || !this.lon || isNaN(this.lon))
         this.lat = this.lon = null;
 }