MapCanvasProjection 对象规范
覆盖物容器的相对像素坐标与经纬度坐标之间的转换。
方法
方法 | 返回值 | 说明 |
---|---|---|
fromContainerPixelToLatLng() | LatLng | 根据地图外部容器左上角的相对像素坐标计算经纬度坐标。 |
fromDivPixelToLatLng() | LatLng | 根据地图内部容器左上角的相对像素坐标计算经纬度坐标。 |
fromLatLngToContainerPixel() | Point | 根据经纬度坐标计算相对于地图外部容器左上角的相对像素坐标。 |
fromLatLngToDivPixel() | Point | 根据经纬度坐标计算相对于地图内部容器左上角的相对像素坐标。 |
实例
本示例中,介绍创建简单的自定义覆盖物并设置覆盖物层级
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>自定义Overlay</title>
<style type="text/css">
* {
margin: 0px;
padding: 0px;
}
body,
button,
input,
select,
textarea {
font: 12px/16px Verdana, Helvetica, Arial, sans-serif;
}
#info {
width: 603px;
padding-top: 3px;
overflow: hidden;
}
.btn {
width: 190px;
}
</style>
<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77"></script>
</head>
<body onload="init()">
<script>
function init() {
var center = new qq.maps.LatLng(39.982163, 116.306070);
var map = new qq.maps.Map(document.getElementById("container"), {
center: center,
zoom: 14
});
var Label = function(opts) {
qq.maps.Overlay.call(this, opts);
}
//继承Overlay基类
Label.prototype = new qq.maps.Overlay();
//定义construct,实现这个接口来初始化自定义的Dom元素
Label.prototype.construct = function() {
this.dom = document.createElement('div');
this.dom.style.cssText =
'background:#0f0;color:white;position:absolute;' +
'text-align:center;width:100px;height:30px';
this.dom.innerHTML = 'Hello world';
//将dom添加到覆盖物层,overlayLayer的顺序为容器 1,此容器中包含Polyline、Polygon、GroundOverlay等
this.getPanes().overlayLayer.appendChild(this.dom);
}
//绘制和更新自定义的dom元素
Label.prototype.draw = function() {
//获取地理经纬度坐标
var position = this.get('position');
if (position) {
//根据经纬度坐标计算相对于地图外部容器左上角的相对像素坐标
//var pixel = this.getProjection().fromLatLngToContainerPixel(position);
//根据经纬度坐标计算相对于地图内部容器原点的相对像素坐标
var pixel = this.getProjection().fromLatLngToDivPixel(position);
this.dom.style.left = pixel.getX() + 'px';
this.dom.style.top = pixel.getY() + 'px';
}
}
Label.prototype.destroy = function() {
//移除dom
this.dom.parentNode.removeChild(this.dom);
}
var label = new Label({
map: map,
position: center
});
}
</script>
<div style="width:603px;height:300px" id="container"></div>
<div id="info">通过继承Overlay实现一个自定义的文本标记,设置自定义覆盖物位置。</div>
</body>
</html>
这篇文章对您解决问题是否有帮助?
已解决
未解决