2011-04-30 10 views
6

J'ai deux coordonnées pour lesquelles je voudrais dessiner une ligne perpendiculaire de longueur égale. Y a-t-il un simple décalage google maps pour cela ou une approche javascript propre par laquelle je pourrais accomplir cela? Que serait-ce?tracer une ligne dans Google Maps perpendiculaire à deux points

Voici ce que j'ai jusqu'ici. Comme vous pouvez le voir, je trace les deux points en tant que marqueurs, puis j'essaie de tracer une ligne entre eux, sauf que j'ai besoin d'obtenir cette ligne perpendiculaire à la ligne entre les deux coordonnées.

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); 

Répondre

5

si vous avez deux points de coordonnées (x1,y1) et (x2, y2) et vous voulez dessiner un segment de droite dont la longueur est la distance entre eux, qui est la médiatrice du segment qui les relie, et qui est traversée par ladite segment?

Probablement la façon la plus simple est de mettre cx = (x1 + x2)/2, cy = (y1+y2)/2), dx = (x2-x1)/2, dy = (y2-y1)/2 puis tracer une ligne (cx-dy, cy+dx)-(cx+dy, cy-dx). Cela fonctionne parce que (cx, cy) est le milieu du segment que vous voulez, puis vous prenez simplement le vecteur de ce point milieu à (x2,y2) et le tournez de plus ou moins 90 degrés pour trouver les extrémités du segment que vous voulez dessiner.

+0

merci, c'est tout! – sudocity

3

J'ai essayé cette solution, le milieu du segment est OK MAIS il ne semble pas perpendiculaire sur google maps, je suppose en raison de la projection sphérique (non orthonormal).

Voici une solution qui fonctionne:

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 
    });  

Voici le violon connexe: http://jsfiddle.net/8m7vm650/15/

S'il vous plaît noter que vous devez utiliser une bibliothèque de cartes de google en option appelée géométrie qui se fait en ajoutant les bibliothèques = géométrie à la chaîne de requête lors du chargement des cartes: http://maps.googleapis.com/maps/api/js?libraries=geometry&sensor=false

Questions connexes