2011-04-30 17 views
6

मेरे पास दो निर्देशांक हैं जिनके लिए मैं बराबर लंबाई की लंबवत रेखा खींचना चाहता हूं। क्या इसके लिए या तो एक साधारण Google मानचित्र ऑफ़सेट है या एक स्वच्छ जावास्क्रिप्ट दृष्टिकोण है जिसके द्वारा मैं इसे पूरा कर सकता हूं? वो क्या हो सकता है?Google नक्शे में एक रेखा को दो बिंदुओं पर लंबवत

यहां तक ​​कि मेरे पास अब तक है। जैसा कि आप देख सकते हैं, मैं दो बिंदुओं को मार्कर के रूप में प्लॉट करता हूं और फिर उनके बीच एक रेखा खींचने का प्रयास करता हूं, सिवाय इसके कि मुझे दो निर्देशांकों के बीच रेखा के लंबवत रेखा को प्राप्त करने की आवश्यकता है।

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

उत्तर

5

तो तुम निर्देशांक (x1,y1) और (x2, y2) साथ दो अंक है और आप एक रेखा खंड जिसकी लंबाई उनके बीच की दूरी है, जो उन्हें जोड़ने खंड के सीधा द्विभाजक है आकर्षित करने के लिए चाहते हैं, और जिसके द्वारा कहा विभाजित है खंड?

शायद सबसे आसान तरीका cx = (x1 + x2)/2, cy = (y1+y2)/2), dx = (x2-x1)/2, dy = (y2-y1)/2 स्थापित करने के लिए और फिर (cx-dy, cy+dx) से (cx+dy, cy-dx) को एक रेखा खींच है।

यह काम करता है क्योंकि (cx, cy) आपके इच्छित सेगमेंट का मध्यबिंदु है, और फिर आप उस मध्य बिंदु से वेक्टर को (x2,y2) पर ले जा रहे हैं और इसे सेगमेंट के अंतराल को खोजने के लिए 90 डिग्री सेल्सियस तक घुमा रहे हैं आकर्षित।

+0

धन्यवाद, यह है! – sudocity

3

मैंने इस समाधान की कोशिश की, सेगमेंट का मध्य ठीक है लेकिन यह Google मानचित्र पर लंबवत नहीं दिखता है, मुझे गोलाकार प्रक्षेपण (ऑर्थोनॉर्मल नहीं) के कारण संदेह है।

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

यहाँ संबंधित बेला है:

यहाँ एक समाधान है कि काम करता है http://jsfiddle.net/8m7vm650/15/

कृपया ध्यान दें कि आप एक वैकल्पिक गूगल मैप्स ज्यामिति जो पुस्तकालयों जोड़कर किया जाता है कहा जाता है पुस्तकालय उपयोग करने की आवश्यकता = नक्शा लोड करते समय स्ट्रिंग क्वेरी करने के लिए ज्यामिति: http://maps.googleapis.com/maps/api/js?libraries=geometry&sensor=false

संबंधित मुद्दे