2011-04-30 21 views
6

Tengo dos coordenadas para las cuales me gustaría dibujar una línea perpendicular de igual longitud. ¿Hay una compensación de google maps simple para esto o un enfoque de JavaScript limpio por el cual podría lograr esto? ¿Qué sería eso?dibujando una línea en google maps perpendicular a dos puntos

Esto es lo que tengo hasta ahora. Como puede ver, dibujo los dos puntos como marcadores y luego trato de trazar una línea entre ellos, excepto que necesito obtener esa línea perpendicular a la línea entre las dos coordenadas.

var locations = [ 
    ['', position.coords.latitude, position.coords.longitude, 1], 
    ['', llat, llng, 2] 
]; 

    var marker, i; 

    for (var i = 0; i < locations.length; i++) 
    { 
     marker = new google.maps.Marker({ 
     position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
     map: map 
     }); 
    } 

    var borderPlanCoordinates = [ 
     new google.maps.LatLng(llat, position.coords.longitude), 
     new google.maps.LatLng(position.coords.latitude,llng) 
    ]; 

    var borderPath = new google.maps.Polyline({ 
     path: borderPlanCoordinates, 
     strokeColor: "#FF0000", 
     strokeOpacity: 1.0, 
     strokeWeight: 10, 
     map: map 
    }); 

    borderPath.setMap(map); 

Respuesta

5

lo que tiene dos puntos de coordenadas (x1,y1) y (x2, y2) y desea dibujar un segmento de línea cuya longitud es la distancia entre ellos, que es la mediatriz del segmento que conecta ellos, y lo que es atravesada por dicho ¿segmento?

Probablemente la forma más simple es fijar cx = (x1 + x2)/2, cy = (y1+y2)/2), dx = (x2-x1)/2, dy = (y2-y1)/2 y luego trazar una línea desde (cx-dy, cy+dx) a (cx+dy, cy-dx).

Esto funciona porque (cx, cy) es el punto medio del segmento que desea, y luego simplemente toma el vector de ese punto medio a (x2,y2) y lo gira más y menos 90 grados para encontrar los puntos finales del segmento que desea dibujar.

+0

gracias, eso es todo! – sudocity

3

Intenté esta solución, el centro del segmento está bien PERO no se ve perpendicular en los mapas de Google, sospecho que debido a la proyección esférica (no ortonormal).

Aquí es una solución que funciona:

spherical = google.maps.geometry.spherical; 
var F = new google.maps.LatLng(latF, longF); 
var T = new google.maps.LatLng(latT, longT); 
// M is the middle of [FT] 
var latM = (latF + latT)/2; 
var longM = (longF + longT)/2; 
var M = new google.maps.LatLng(latM, longM); 
// Get direction of the segment 
var heading = spherical.computeHeading(F, T); 
var dist = 200; // distance in meters 
// Place point A that is oriented at 90° in a distance of dist from M 
var A = spherical.computeOffset(M, dist, heading+90); 
var perpendicularCoordinates = [M, A ]; 
var perpendicular = new google.maps.Polyline({ 
    path: perpendicularCoordinates, 
    geodesic: true, 
    strokeColor: '#FF0000', 
    strokeOpacity: 1.0, 
    strokeWeight: 2, 
    map: map 
    });  

Aquí está el violín relacionada: http://jsfiddle.net/8m7vm650/15/

Tenga en cuenta que es necesario utilizar una biblioteca de Google mapas opcional llamado geometría que se realiza mediante la adición de bibliotecas = geometría para consultar la cadena al cargar mapas: http://maps.googleapis.com/maps/api/js?libraries=geometry&sensor=false

Cuestiones relacionadas