JavaScript-使用谷歌地图折线绘制贝塞尔曲线
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JavaScript-使用谷歌地图折线绘制贝塞尔曲线,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2335字,纯文字阅读大概需要4分钟。
内容图文
![JavaScript-使用谷歌地图折线绘制贝塞尔曲线](/upload/InfoBanner/zyjiaocheng/681/3b922378595f4629ab31a400ae6b33ad.jpg)
我正在尝试通过在折线中使用SVG路径在Google地图中绘制贝塞尔曲线.最初,我使用类似于Curved line between two near points in google maps的Marker,它给出了我想要的结果.但是,由于无法将地图拖到标记下,因此无法使用此方法.
所以我改用折线而不是标记.现在,当我缩小时,我会得到相同的好结果,但是当我放大时,曲线会“被裁剪”.
这是代码:
function initialize() {
var mapOptions = {
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
var coord1 = new google.maps.LatLng(49.165876, -123.152446);
var coord2 = new google.maps.LatLng(25.786328, -80.193694);
var bounds = new google.maps.LatLngBounds();
bounds.extend(coord1);
bounds.extend(coord2);
map.fitBounds(bounds);
pLineOpt = {
path: [coord1, coord2],
strokeWeight: 4,
strokeOpacity: 0,
map: map,
}
pLine = new google.maps.Polyline(pLineOpt);
var markers = [
new google.maps.Marker({
position: coord1,
map: map
}),
new google.maps.Marker({
position: coord2,
map: map
})
];
google.maps.event.addListener(map, 'zoom_changed', function () {
//points
var p1 = map.getProjection().fromLatLngToPoint(coord1);
var p2 = map.getProjection().fromLatLngToPoint(coord2);
//distance between points
var d = new google.maps.Point(p2.x - p1.x, p2.y - p1.y);
var lengthSqr = d.x * d.x + d.y * d.y;
//middle point
var m = new google.maps.Point(d.x / 2, d.y / 2);
//slope of perpendicular line
var perpK = -d.x / d.y;
//distance to control point
var ratioDistanceControlLengthSqr = 9;
var controlDSqr = lengthSqr / ratioDistanceControlLengthSqr;
var p3dX = Math.sqrt(controlDSqr / (Math.pow(perpK, 2) + 1));
var p3dY = perpK * p3dX;
//control point
var p3 = new google.maps.Point(m.x - p3dX, m.y - p3dY);
//curve path
var path = "M 0 0 q " + p3.x + " " + p3.y + " " + d.x + " " + d.y;
//calc scale
var zoom = map.getZoom();
var scale = 1 / (Math.pow(2, -zoom));
var icon = {
path: path,
scale: scale,
strokeWeight: 3,
strokeOpacity: 1,
};
pLineOpt.icons = [{
fixedRotation: true,
icon: icon,
offset: '0'
}];
pLine.setOptions(pLineOpt);
});
}
google.maps.event.addDomListener(window, 'load', initialize);
我用以下代码制作了一个jsfiddle:http://jsfiddle.net/s7djLzyd/3/
有谁知道为什么缩放时折线会被裁剪,以及是否有解决方法?
谢谢
解决方法:
您需要修复折线选项:
pLineOpt = {
path: [coord1, coord2],
geodesic: true,
strokeColor: '#000',
strokeOpacity: 1.0,
strokeWeight: 4
}
请尝试以下代码片段:可能就是您想要的…
内容总结
以上是互联网集市为您收集整理的JavaScript-使用谷歌地图折线绘制贝塞尔曲线全部内容,希望文章能够帮你解决JavaScript-使用谷歌地图折线绘制贝塞尔曲线所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。