Ich habe eine Mapping-App in einem Browser ausgeführt, als zwischen Breitengrad Längengrad und MGRS konvertiert werden muss. Ich muss die Ladezeit der App schnell halten, damit ich keine Bibliotheken mit zusätzlichen Funktionen, die ich nicht benötige, aufnehmen möchte.Wie man zwischen Lat Long und MGRS mit Javascript ohne Abhängigkeit von Bibliotheken konvertiert
0
A
Antwort
0
Ich löste das, indem ich die folgenden zwei Funktionen entwickelte, die Bits von zwei primären Quellen plus anderen im Internet kombinieren. Ich habe sie für Geschwindigkeit optimiert, nicht zu verstehen!
Meine beiden Hauptquellen waren: http://www.movable-type.co.uk/scripts/latlong-utm-mgrs.html http://home.hiwaay.net/~taylorc/toolbox/geography/geoutm.html
Beispiel Nutzung: MGRSString (51,172, -1,779) liefert "30U WB 85358 69660"
function MGRSString (Lat, Long)
{
if (Lat < -80) return 'Too far South' ; if (Lat > 84) return 'Too far North' ;
var c = 1 + Math.floor ((Long+180)/6);
var e = c*6 - 183 ;
var k = Lat*Math.PI/180;
var l = Long*Math.PI/180;
var m = e*Math.PI/180;
var n = Math.cos (k);
var o = 0.006739496819936062*Math.pow (n,2);
var p = 40680631590769/(6356752.314*Math.sqrt(1 + o));
var q = Math.tan (k);
var r = q*q;
var s = (r*r*r) - Math.pow (q,6);
var t = l - m;
var u = 1.0 - r + o;
var v = 5.0 - r + 9*o + 4.0*(o*o);
var w = 5.0 - 18.0*r + (r*r) + 14.0*o - 58.0*r*o;
var x = 61.0 - 58.0*r + (r*r) + 270.0*o - 330.0*r*o;
var y = 61.0 - 479.0*r + 179.0*(r*r) - (r*r*r);
var z = 1385.0 - 3111.0*r + 543.0*(r*r) - (r*r*r);
var aa = p*n*t + (p/6.0*Math.pow (n,3)*u*Math.pow (t,3)) + (p/120.0*Math.pow (n,5)*w*Math.pow (t,5)) + (p/5040.0*Math.pow (n,7)*y*Math.pow (t,7));
var ab = 6367449.14570093*(k - (0.00251882794504*Math.sin (2*k)) + (0.00000264354112*Math.sin (4*k)) - (0.00000000345262*Math.sin (6*k)) + (0.000000000004892*Math.sin (8*k))) + (q/2.0*p*Math.pow (n,2)*Math.pow (t,2)) + (q/24.0*p*Math.pow (n,4)*v*Math.pow (t,4)) + (q/720.0*p*Math.pow (n,6)*x*Math.pow (t,6)) + (q/40320.0*p*Math.pow (n,8)*z*Math.pow (t,8));
aa = aa*0.9996 + 500000.0;
ab = ab*0.9996; if (ab < 0.0) ab += 10000000.0;
var ad = 'CDEFGHJKLMNPQRSTUVWXX'.charAt (Math.floor (Lat/8 + 10));
var ae = Math.floor (aa/100000);
var af = ['ABCDEFGH','JKLMNPQR','STUVWXYZ'][(c-1)%3].charAt (ae-1);
var ag = Math.floor (ab/100000)%20;
var ah = ['ABCDEFGHJKLMNPQRSTUV','FGHJKLMNPQRSTUVABCDE'][(c-1)%2].charAt (ag);
function pad (val) {if (val < 10) {val = '0000' + val} else if (val < 100) {val = '000' + val} else if (val < 1000) {val = '00' + val} else if (val < 10000) {val = '0' + val};return val};
aa = Math.floor (aa%100000); aa = pad (aa);
ab = Math.floor (ab%100000); ab = pad (ab);
return c + ad + ' ' + af + ah + ' ' + aa + ' ' + ab;
};
Um von mgrs zu konvertieren zurück zu lat lange benutzen Sie die folgende Funktion. Die Eingabezeichenfolge muss eine Beschleunigungs- und Hochauflösungs-Anzeige (d. H. 5-stellig) aufweisen und Leerzeichen aufweisen, die von der obigen Funktion ausgegeben werden.
function LatLongFromMGRSstring (a)
{
var b = a.trim();
b = b.match(/\S+/g);
if (b == null || b.length != 4) return [false,null,null];
var c = (b[0].length < 3) ? b[0][0] : b[0].slice(0,2);
var d = (b[0].length < 3) ? b[0][1] : b[0][2];
var e = (c*6-183)*Math.PI/180;
var f = ["ABCDEFGH","JKLMNPQR","STUVWXYZ"][(c-1) % 3].indexOf(b[1][0]) + 1;
var g = "CDEFGHJKLMNPQRSTUVWXX".indexOf(d);
var h = ["ABCDEFGHJKLMNPQRSTUV","FGHJKLMNPQRSTUVABCDE"][(c-1) % 2].indexOf(b[1][1]);
var i = [1.1,2.0,2.8,3.7,4.6,5.5,6.4,7.3,8.2,9.1,0,0.8,1.7,2.6,3.5,4.4,5.3,6.2,7.0,7.9];
var j = [0,2,2,2,4,4,6,6,8,8,0,0,0,2,2,4,4,6,6,6];
var k = i[g];
var l = Number(j[g]) + h/10;
if (l < k) l += 2;
var m = f*100000.0 + Number(b[2]);
var n = l*1000000 + Number(b[3]);
m -= 500000.0;
if (d < 'N') n -= 10000000.0;
m /= 0.9996; n /= 0.9996;
var o = n/6367449.14570093;
var p = o + (0.0025188266133249035*Math.sin(2.0*o)) + (0.0000037009491206268*Math.sin(4.0*o)) + (0.0000000074477705265*Math.sin(6.0*o)) + (0.0000000000170359940*Math.sin(8.0*o));
var q = Math.tan(p);
var r = q*q;
var s = r*r;
var t = Math.cos(p);
var u = 0.006739496819936062*Math.pow(t,2);
var v = 40680631590769/(6356752.314*Math.sqrt(1 + u));
var w = v;
var x = 1.0/(w*t); w *= v;
var y = q/(2.0*w); w *= v;
var z = 1.0/(6.0*w*t); w *= v;
var aa = q/(24.0*w); w *= v;
var ab = 1.0/(120.0*w*t); w *= v;
var ac = q/(720.0*w); w *= v;
var ad = 1.0/(5040.0*w*t); w *= v;
var ae = q/(40320.0*w);
var af = -1.0-u;
var ag = -1.0-2*r-u;
var ah = 5.0 + 3.0*r + 6.0*u-6.0*r*u-3.0*(u*u)-9.0*r*(u*u);
var ai = 5.0 + 28.0*r + 24.0*s + 6.0*u + 8.0*r*u;
var aj = -61.0-90.0*r-45.0*s-107.0*u + 162.0*r*u;
var ak = -61.0-662.0*r-1320.0*s-720.0*(s*r);
var al = 1385.0 + 3633.0*r + 4095.0*s + 1575*(s*r);
var lat = p + y*af*(m*m) + aa*ah*Math.pow(m,4) + ac*aj*Math.pow(m,6) + ae*al*Math.pow(m,8);
var lng = e + x*m + z*ag*Math.pow(m,3) + ab*ai*Math.pow(m,5) + ad*ak*Math.pow(m,7);
lat = lat*180/Math.PI;
lng = lng*180/Math.PI;
return [true,lat,lng];
}
Verwandte Themen
- 1. Wie konvertiert man WGS84 in Lat/Long mit R
- 2. Konvertieren Lat/Lon zu MGRS
- 3. Get Lat/Long mit Klick von Javascript
- 4. Entfernung zwischen lat-long in Punkten gespeichert
- 5. Wie bekomme ich Lat Long einer Adresse mit arcGis JavaScript
- 6. Konvertieren von Geometrie in Lat und Long
- 7. OpenLayers-Containerposition von lat/long
- 8. zeichnen lat/long Koordinaten auf Leinwand
- 9. Lat/Long zu UTM
- 10. Finde Zeitunterschied und Abstand zwischen zwei Lat-Long-Paaren
- 11. Gegeben ein lat/long, finde das nächste lat/long Paar aus einer Liste von lat/long in C#
- 12. In der Nähe von Ort mit Lat und Long
- 13. Konvertieren von Lat- und Long-Werten vom GPS-Tracker
- 14. Externe Bibliotheken als Abhängigkeit von lokalen Bibliotheken
- 15. Link zu Google Streetview mit Lat/Long
- 16. Extrahieren Lat Long von SQlite und Anzeige auf Webview
- 17. mapquest Drag Karte poi Markt und haben die Long/lat poipulate in long/lat Formularfeld
- 18. Lat Long in Samsung Handy
- 19. Falsches Lat Long aus Postleitzahl
- 20. Android GeoPoint mit lat/long Werte
- 21. Berechnen Sie den Abstand zwischen zwei long/lat
- 22. Wie erstellt und fragt man eine Tabelle mit lat/long mit PostGIS?
- 23. Wie man JSON vom FB Messenger aus anzeigt und wie man lat/long in vars speichert
- 24. Google Maps API - Punkte auf der Route zwischen lat/long
- 25. Den Abstand zwischen mehreren Punkten finden - Lat/Long
- 26. Falsches Long/Lat-Plotten mit ggplot
- 27. Konvertieren Lat-Long in PostGIS-Geometrie ohne Abfrage der Datenbank
- 28. Finden Sie Entfernung mit Lat und Long in Sql
- 29. Get TimeZone von Lat und Long in Android?
- 30. Wie konvertiert man eine jQuery-Methode in reines JavaScript, ohne hinzugefügte Bibliotheken?