• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

186
Views
Leaflet.js envuelve las posiciones LatLng de la línea a la línea más cercana

Quiero que el usuario haga clic en dos posiciones y luego dibuje una línea entre ellas. Esto es totalmente funcional y fácil. Y también funciona si el clic está fuera del rango de -180;180.

 createPolyLine(outside2, userLocation); //draw polyline function createPolyLine(loc1, loc2) { var latlongs = [loc1, loc2]; console.log(loc1); var polyline = new L.Polyline(latlongs, { color: 'white', opacity: 1, weight: 1, clickable: false }).addTo(map); }

Ahora, si un usuario hace clic en la longitud de -600, quiero que se ajuste automáticamente al área de -180; 180, pero solo si es la ruta más cercana. Si está más cerca de mantener el clic en el área -360:-180, entonces debería ajustarse al área -360;-180. Lo mismo para el otro lado en dirección positiva, por supuesto. Imagen de ejemplo de lo que quiero decir:

Ejemplo de cuándo está más cerca de usar la región -360;-180 y no envolverla en -180;180

Ejemplo de cuando está más cerca de usar -180;180 y estaría mal ahora

Basado en el segundo ejemplo pero envuelto correctamente ahora

¿Cuál sería la forma más eficiente de lograr este ajuste automático en -360;-180 / -180;180 / 180;360 dependiendo de dónde estaría la línea más cercana entre dos puntos?

about 3 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Gracias a la respuesta de Corey Alix, se me ocurrió una solución que se siente un poco sucia, pero funciona para todos los casos de prueba que probé. En mi escenario, un punto siempre está en el rango de -180;180.

 // a is always in -180;180 function getPositions(a, b) { b.lng %= 360; let abs = Math.abs(a.lng - b.lng); let absWrap = Math.abs(a.lng - b.wrap().lng); if(absWrap < abs) { b = b.wrap(); abs = absWrap; } let left = new L.LatLng(b.lat, b.lng - 360); let right = new L.LatLng(b.lat, b.lng + 360); let leftAbs = Math.abs(a.lng - left.lng); if(leftAbs < abs) { b = left; abs = leftAbs; } if(Math.abs(a.lng - right.lng) < abs) { b = right; } return [a, b]; } //draw polyline function createPolyLine(loc1, loc2) { var latlongs = getPositions(loc2, loc1); polyline = new L.Polyline(latlongs, { color: 'white', opacity: 1, weight: 1, clickable: false }).addTo(map); }
about 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error