Veel

Miks on mu polüliin vale laagri peal?

Miks on mu polüliin vale laagri peal?


Proovin javascripti kaudu katta kaardil polüliinide duplikaatsegmente. Ma kasutan siit latlon.js ja geo.js

Idee on selles, et kasutaja saab sisestada läbitud vahemaa ja kui kaarti värskendatakse, lisatakse teine ​​mitmerealine. Punkti arvutamiseks, mis tähistab kasutaja praegust asukohta, kasutan nende vahelise suuna arvutamiseks teadaolevat varasemat asukohta ja teadaolevat järgmist asukohta ning seejärel kasutan seda laagrit koos vahemaaga, mille kasutaja on läbinud, et arvutada, kus nad on nüüd, enne kui lõpuks nende andmete põhjal uue polüliini loovad.

Probleem on selles, et see uus hulkjoon on minu kaardile valesti joonistatud ja ma ei saa aru, miks. Probleemi näete aadressil [eemaldatud]. Logige sisse kui User2/pass2 ja seejärel valige navigeerimisribalt väljakutsed. Järgneb kõige asjakohasem kood saidilt map.js. Ma kasutan voldikute kaarte.

var userDistance = GymloopChallenge.user_distance; var lastPoint; var võrdlusArr = []; // kasutatakse laagri arvutamiseks, kui (userDistance <= dist1) {võrdlusArr = [rioLL, laLL]; distToAdd = Math.abs (userDistance); userPoly = []; lastPoint = rioLL; console.log ('kui 1'); } else if (userDistance> = dist1 && userDistance <= dist2) {võrdlusArr = [laLL, nyLL]; distToAdd = Math.abs (dist2 - userDistance); userPoly = [rida5]; lastPoint = laLL; console.log ('kui 2'); } else if (userDistance> dist2 && userDistance <= dist3) {võrdlusArr = [nyLL, lonLL]; distToAdd = Math.abs (userDistance - dist3); userPoly = [rida5, rida1]; lastPoint = nyLL; console.log ('kui 3'); } else if (userDistance> dist3 && userDistance <= dist4) {võrdlusArr = [lonLL, sydLL]; distToAdd = Math.abs (userDistance - dist4); userPoly = [rida5, rida1, rida2]; lastPoint = lonLL; console.log ('kui 4'); } else if (userDistance> dist4 && userDistance <= dist5) {võrdlusArr = [sydLL, tokLL]; distToAdd = Math.abs (userDistance - dist5); userPoly = [rida5, rida1, rida2, rida3]; lastPoint = sydLL; console.log ('kui 5'); } console.log ("Lisamise kaugus:"+ distToAdd) //console.log("COmparison array: "+ võrdlusArr); var kandev = võrdlusArr [0] .finalBearingTo (võrdlusArr [1]); var userLocation = lastPoint.destinationPoint (laager, distToAdd); //console.log(userLocation); userLineStartPoint = uus L.LatLng (lastPoint._lat, lastPoint._lon); userLocationMapPoint = uus L.LatLng (userLocation._lat, userLocation._lon); userPoly.push (uus massiiv (userLineStartPoint, userLocationMapPoint)); console.log (userPoly); var userPolyline = uus L.MultiPolyline (userPoly, {värv: 'punane', id: 'poly2', kaal: 3, läbipaistmatus: 0,8}); map.addLayer (userPolyline);

Näib, et kasutate saidis latlon.js valesid funktsioone, kuna teie kaart on Mercatori projektsioonis.

Sellise projektsiooni korral nimetatakse konstantse laagri sirgjooni rhumbliinideks või loksodroomideks. Need liinid on suurepärased navigeerimiseks, kuna määrate suuna ja suundute selles suunas, kuid see pole lühim tee. Selleks vajate suurepärast ringi, mis tundub Mercatori projektsioonil kõver (mõelge raketijälgedele filmis Sõjamängud).

Kuna tegelete ainult maailma linnade vahelise teekonna lihtsa kujutisega ja sirgeid on lihtne joonistada, peate kasutama loksodroomseid arvutusi. Õnneks pakub latlon.js just teile vajalikke funktsioone:rhumbDistanceTo (),rhumbBearingTo ()jarhumbDestinationPoint (), mis peaksid olema juba kasutatavate funktsioonide asendused.

Kui soovite suure ringiga vahemaid, vaadake liikuva tüübi lehe esimese näite koodi. Kuid ma väidan, et teie tavakasutajal on seda raskem mõista, kuna tegelikel vahemaadel pole lineaarset seost prognoositud vahemaadega.