Viac

Prečo je moja krivka na nesprávnom ložisku?


Snažím sa pomocou javascriptu prekryť duplicitné segmenty kriviek na mape. Odtiaľ používam súbory latlon.js a geo.js

Ide o to, že používateľ môže zadať prejdenú vzdialenosť a keď sa mapa obnoví, pridá sa druhá multipolyline. Na výpočet bodu, ktorý predstavuje miesto, kde sa používateľ aktuálne nachádza, používam známe predchádzajúce umiestnenie a známe „ďalšie miesto“ na výpočet ložiska medzi týmito dvoma ložiskami a potom použitie tohto ložiska v kombinácii so vzdialenosťou, ktorú používateľ prešiel, aby vypočítal, kde teraz sú, než konečne vytvoria novú krivku na základe týchto údajov.

Problém je v tom, že táto nová krivka je na mojej mape nakreslená nesprávne a ja nechápem prečo. Problém môžete vidieť na [odstránené]. Prihláste sa ako User2/pass2 a potom na navigačnej lište vyberte „výzvy“. Nasleduje najrelevantnejší kód z mapy.js. Používam letákové mapy.

var userDistance = GymloopChallenge.user_distance; var lastPoint; var porovnanieArr = []; // používa sa na výpočet ložiska if (userDistance <= dist1) {ComparArr = [rioLL, laLL]; distToAdd = Math.abs (userDistance); userPoly = []; lastPoint = rioLL; console.log ('if 1'); } else if (userDistance> = dist1 && userDistance <= dist2) {comparisonArr = [laLL, nyLL]; distToAdd = Math.abs (dist2 - userDistance); userPoly = [riadok5]; lastPoint = laLL; console.log ('if 2'); } else if (userDistance> dist2 && userDistance <= dist3) {comparisonArr = [nyLL, lonLL]; distToAdd = Math.abs (userDistance - dist3); userPoly = [riadok5, riadok1]; lastPoint = nyLL; console.log ('if 3'); } else if (userDistance> dist3 && userDistance <= dist4) {comparisonArr = [lonLL, sydLL]; distToAdd = Math.abs (userDistance - dist4); userPoly = [riadok5, riadok1, riadok2]; lastPoint = lonLL; console.log ('if 4'); } else if (userDistance> dist4 && userDistance <= dist5) {comparisonArr = [sydLL, tokLL]; distToAdd = Math.abs (userDistance - dist5); userPoly = [riadok5, riadok1, riadok2, riadok3]; lastPoint = sydLL; console.log ('if 5'); } console.log ("Vzdialenosť na pridanie:"+ distToAdd) //console.log("COmparison array: "+ comparisonArr); var ložisko = porovnanieArr [0] .finalBearingTo (porovnanieArr [1]); var userLocation = lastPoint.destinationPoint (bearing, distToAdd); //console.log(userLocation); userLineStartPoint = nový L.LatLng (lastPoint._lat, lastPoint._lon); userLocationMapPoint = nový L.LatLng (userLocation._lat, userLocation._lon); userPoly.push (nové pole (userLineStartPoint, userLocationMapPoint)); console.log (userPoly); var userPolyline = new L.MultiPolyline (userPoly, {color: 'red', id: 'poly2', weight: 3, opacity: 0.8}); map.addLayer (userPolyline);

Zdá sa, že v súbore latlon.js používate nesprávne funkcie, pretože vaša mapa je v projekcii Mercator.

Pri tomto type projekcie sa rovné čiary konštantného ložiska nazývajú loxodrómy alebo loxodrómy. Tieto čiary sú skvelé na navigáciu, pretože nastavíte smer a smer v tomto smere, ale nie je to najkratšia cesta. Na to potrebujete veľký kruh, ktorý bude na projekcii Mercatoru zakrivený (myslite na dráhy rakiet vo filme Vojnové hry).

Pretože sa zaoberáte iba jednoduchým znázornením cesty medzi svetovými mestami a rovné čiary sa dajú ľahko nakresliť, musíte použiť loxodromické výpočty. Našťastie latlon.js poskytuje iba funkcie, ktoré potrebujete:rhumbDistanceTo (),rhumbBearingTo ()arhumbDestinationPoint (), ktoré by malo byť náhradou za funkcie, ktoré už používate.

Ak ste chceli vzdialenosti vo veľkom kruhu, pozrite sa na kód pre prvý príklad na stránke Pohyblivý typ. Ale tvrdil by som, že je to pre vášho priemerného používateľa ťažšie pochopiteľné, pretože skutočné vzdialenosti nemajú lineárny vzťah k predpokladaným vzdialenostiam.


Pozri si video: ČZ 250485 časť 4. - VKLADANIE LOŽÍSK (Október 2021).