var map;
var infowindow = new google.maps.InfoWindow();
var bisectLine = null;
var bisectMark = null;
var centerMark = null;
var angle1marker = null;
var angle2marker = null;
function initialize() {
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(-34.397, 150.644);
var mapOptions = {
zoom: 15,
center: latlng
}
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
centerMark = new google.maps.Marker({
map: map,
position: map.getCenter()
});
angle1marker = new google.maps.Marker({
map: map,
draggable: true,
position: google.maps.geometry.spherical.computeOffset(map.getCenter(), 1000, 45)
});
google.maps.event.addListener(angle1marker, 'dragend', bisectAngle);
angle2marker = new google.maps.Marker({
map: map,
draggable: true,
position: google.maps.geometry.spherical.computeOffset(map.getCenter(), 1000, 30)
});
google.maps.event.addListener(angle2marker, 'dragend', bisectAngle);
var poly1 = new google.maps.Polyline({
path: [centerMark.getPosition(), angle1marker.getPosition()],
map: map
});
poly1.binder = new MVCArrayBinder(poly1.getPath());
angle1marker.bindTo('position', poly1.binder, '1');
var poly2 = new google.maps.Polyline({
path: [centerMark.getPosition(), angle2marker.getPosition()],
map: map
});
poly2.binder = new MVCArrayBinder(poly2.getPath());
angle2marker.bindTo('position', poly2.binder, '1');
var bounds = new google.maps.LatLngBounds();
bounds.extend(centerMark);
bounds.extend(angle1marker);
bounds.extend(angle2marker);
map.fitBounds(bounds);
}
google.maps.event.addDomListener(window, 'load', initialize);
function bisectAngle() {
var hdg1 = google.maps.geometry.spherical.computeHeading(centerMark.getPosition(), angle1marker.getPosition());
var hdg2 = google.maps.geometry.spherical.computeHeading(centerMark.getPosition(), angle2marker.getPosition());
if (hdg1 > 180) hdg1 -= 360;
if (hdg1 <= -180) hdg1 += 360;
if (hdg2 > 180) hdg2 -= 360;
if (hdg2 <= -180) hdg2 += 306;
var deltaHdg = (hdg1 - hdg2);
if (deltaHdg > 180) deltaHdg -= 360;
if (deltaHdg <= -180) deltaHdg += 360;
var bisectHdg = deltaHdg/2 + hdg2;
document.getElementById('info').innerHTML = "a1=" + hdg1.toFixed(2) + ", a2=" + hdg2.toFixed(2) + ", bA=" + bisectHdg.toFixed(2);
var bisectPosn = google.maps.geometry.spherical.computeOffset(centerMark.getPosition(), 1000, bisectHdg);
if (bisectMark && bisectMark.setMap) {
// bisectMark.setMap(null);
bisectMark.setPosition(bisectPosn);
} else {
bisectMark = new google.maps.Marker({
position: bisectPosn,
map: map
});
}
if (bisectLine && bisectLine.setMap) {
// bisectLine.setMap(null);
bisectLine.setPath([centerMark.getPosition(), bisectPosn]);
} else {
bisectLine = new google.maps.Polyline({
path: [centerMark.getPosition(), bisectPosn],
map: map
});
}
}
/*
* Use bindTo to allow dynamic drag of markers to refresh poly.
*/
function MVCArrayBinder(mvcArray) {
this.array_ = mvcArray;
}
MVCArrayBinder.prototype = new google.maps.MVCObject();
MVCArrayBinder.prototype.get = function(key) {
if (!isNaN(parseInt(key))) {
return this.array_.getAt(parseInt(key));
} else {
this.array_.get(key);
}
}
MVCArrayBinder.prototype.set = function(key, val) {
if (!isNaN(parseInt(key))) {
this.array_.setAt(parseInt(key), val);
} else {
this.array_.set(key, val);
}
}
html,
body,
#map-canvas {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=geometry&ext=.js"></script>
<div id="info"></div>
<div id="map-canvas"></div>
什麼是你的代碼是什麼樣子? – geocodezip 2014-10-29 22:33:28
[如何計算谷歌地圖上兩條路徑線之間使用經緯度座標的角度]的可能重複(http://stackoverflow.com/questions/24045510/how-to-calculate-angle-between-two-path-lines -on-google-map-using-lat-long-coord) – 2014-10-29 22:36:41
爲什麼第二個角度50?它不應該是40嗎? – geocodezip 2014-10-29 22:47:24