我希望有人能指出我在正确的方向。
我有一个谷歌地图加载从XML文件中的标记,与其他各种地图元素一起的伟大工程。 不过,我现在需要覆盖一个PNG图像到地图上。
我已经尝试了好几个小时,以正确对齐PNG在网站的顶部,但就是无法找到确切的两个共同的坐标我需要(西南部和东北部)。 是否有这样的工具吗? 理想的情况下上传的图片,然后拖动角落,以适应,并输出需要两个坐标(纬度/经度)?
我已经使用这个工具尝试: http://overlay-tiler.googlecode.com/svn/trunk/upload.html -但它有三个接触点。
我已经使用这个工具也尝试: http://www.birdtheme.org/useful/customoverlay.html -但你不能调整一次上传到地图的形象和你点击西南部标记一次机会!
我也可以使用谷歌地球完全一致的PNG,但我看不到输出纬度/经度点的方式。
任何意见,将不胜感激。
继承人的安德烈·迪翁的解释工作的例子。
http://jsfiddle.net/4cWCW/3/
var overlay;
DebugOverlay.prototype = new google.maps.OverlayView();
function initialize() {
var mapOptions = {
zoom: 15,
center: new google.maps.LatLng(40.743388,-74.007592)
};
var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
var swBound = new google.maps.LatLng(40.73660837340877, -74.01852328);
var neBound = new google.maps.LatLng(40.75214181, -73.99661518216243);
var bounds = new google.maps.LatLngBounds(swBound, neBound);
console.log(map);
var srcImage = 'http://robincwillis.com/top/splash/04.jpg';
overlay = new DebugOverlay(bounds, srcImage, map);
var markerA = new google.maps.Marker({
position: swBound,
map: map,
draggable:true
});
var markerB = new google.maps.Marker({
position: neBound,
map: map,
draggable:true
});
google.maps.event.addListener(markerA,'drag',function(){
var newPointA = markerA.getPosition();
var newPointB = markerB.getPosition();
var newBounds = new google.maps.LatLngBounds(newPointA, newPointB);
overlay.updateBounds(newBounds);
});
google.maps.event.addListener(markerB,'drag',function(){
var newPointA = markerA.getPosition();
var newPointB = markerB.getPosition();
var newBounds = new google.maps.LatLngBounds(newPointA, newPointB);
overlay.updateBounds(newBounds);
});
google.maps.event.addListener(markerA, 'dragend', function () {
var newPointA = markerA.getPosition();
var newPointB = markerB.getPosition();
console.log("point1"+ newPointA);
console.log("point2"+ newPointB);
});
google.maps.event.addListener(markerB, 'dragend', function () {
var newPointA = markerA.getPosition();
var newPointB = markerB.getPosition();
console.log("point1"+ newPointA);
console.log("point2"+ newPointB);
});
}
function DebugOverlay(bounds, image, map) {
this.bounds_ = bounds;
this.image_ = image;
this.map_ = map;
this.div_ = null;
this.setMap(map);
}
DebugOverlay.prototype.onAdd = function() {
var div = document.createElement('div');
div.style.borderStyle = 'none';
div.style.borderWidth = '0px';
div.style.position = 'absolute';
var img = document.createElement('img');
img.src = this.image_;
img.style.width = '100%';
img.style.height = '100%';
img.style.opacity = '0.5';
img.style.position = 'absolute';
div.appendChild(img);
this.div_ = div;
var panes = this.getPanes();
panes.overlayLayer.appendChild(div);
};
DebugOverlay.prototype.draw = function() {
var overlayProjection = this.getProjection();
var sw = overlayProjection.fromLatLngToDivPixel(this.bounds_.getSouthWest());
var ne = overlayProjection.fromLatLngToDivPixel(this.bounds_.getNorthEast());
var div = this.div_;
div.style.left = sw.x + 'px';
div.style.top = ne.y + 'px';
div.style.width = (ne.x - sw.x) + 'px';
div.style.height = (sw.y - ne.y) + 'px';
};
DebugOverlay.prototype.updateBounds = function(bounds){
this.bounds_ = bounds;
this.draw();
};
DebugOverlay.prototype.onRemove = function() {
this.div_.parentNode.removeChild(this.div_);
this.div_ = null;
};
initialize();
我不久前到解决客户这一确切的问题。 我的解决办法是简单地创建两个标记; 一个在每个LatLng
用于叠加的LatLngBounds
的是,在移动时,将更新覆盖并记录LatLndBounds
到console
让我参考一下。 我还添加拖动标记时,所以这是更容易地将覆盖在视觉上定位被示手提袋(垂直和水平线)。
我不能分享你的解决方案的代码,但它涉及到与工作OverlayView
,以转化LatLng
坐标,并通过从像素MapCanvasProjection
。
和你一样,我们并不需要此功能,最终用户,所以我说的是真实提供了一个切换一个“创作模式” debug
参数解决方案的查询字符串。
尝试使用该工具。 只需双击第一个点在地图上。 会出现一个可调整大小rectagular框。 它跨越到终点并获得你所需要的的LatLngBounds。
jsfiddle.net/yV6xv/16/embedded/result/
http://jsfiddle.net/yV6xv/16/embedded/result/
我喜欢用一个设在这里:
http://googlemapsapi.blogspot.com/2007/05/v280-making-image-overlays-easy-with.html
这是很不理想,并生成谷歌地图API第2版的代码,但你仍然可以使用logitude /纬度坐标。