谷歌地图工具,精确定位图像叠加? [关闭](Google Maps tool for accur

2019-09-01 20:30发布

我希望有人能指出我在正确的方向。

我有一个谷歌地图加载从XML文件中的标记,与其他各种地图元素一起的伟大工程。 不过,我现在需要覆盖一个PNG图像到地图上。

我已经尝试了好几个小时,以正确对齐PNG在网站的顶部,但就是无法找到确切的两个共同的坐标我需要(西南部和东北部)。 是否有这样的工具吗? 理想的情况下上传的图片,然后拖动角落,以适应,并输出需要两个坐标(纬度/经度)?

我已经使用这个工具尝试: http://overlay-tiler.googlecode.com/svn/trunk/upload.html -但它有三个接触点。

我已经使用这个工具也尝试: http://www.birdtheme.org/useful/customoverlay.html -但你不能调整一次上传到地图的形象和你点击西南部标记一次机会!

我也可以使用谷歌地球完全一致的PNG,但我看不到输出纬度/经度点的方式。

任何意见,将不胜感激。

Answer 1:

继承人的安德烈·迪翁的解释工作的例子。

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


Answer 2:

我不久前到解决客户这一确切的问题。 我的解决办法是简单地创建两个标记; 一个在每个LatLng用于叠加的LatLngBounds的是,在移动时,将更新覆盖并记录LatLndBoundsconsole让我参考一下。 我还添加拖动标记时,所以这是更容易地将覆盖在视觉上定位被示手提袋(垂直和水平线)。

我不能分享你的解决方案的代码,但它涉及到与工作OverlayView ,以转化LatLng坐标,并通过从像素MapCanvasProjection

和你一样,我们并不需要此功能,最终用户,所以我说的是真实提供了一个切换一个“创作模式” debug参数解决方案的查询字符串。



Answer 3:

尝试使用该工具。 只需双击第一个点在地图上。 会出现一个可调整大小rectagular框。 它跨越到终点并获得你所需要的的LatLngBounds。

jsfiddle.net/yV6xv/16/embedded/result/

http://jsfiddle.net/yV6xv/16/embedded/result/



Answer 4:

我喜欢用一个设在这里:

http://googlemapsapi.blogspot.com/2007/05/v280-making-image-overlays-easy-with.html

这是很不理想,并生成谷歌地图API第2版的代码,但你仍然可以使用logitude /纬度坐标。



文章来源: Google Maps tool for accurately positioning image overlay? [closed]