Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Openlayers 3 OpenLayer3-如何获取视口的坐标_Openlayers 3 - Fatal编程技术网

Openlayers 3 OpenLayer3-如何获取视口的坐标

Openlayers 3 OpenLayer3-如何获取视口的坐标,openlayers-3,Openlayers 3,我用OpenLayer3显示了一个MapQuest。我想获得视口的坐标(当前仅显示地图区域)。对于整个地图,应该是这样的:(180,90)x(-180,-90) 但我得到了: 右上经度:37570328.14272983 右上纬度:18941707.105292957 左下经度:-37570328.14272983 左下纬度:-18941707.105292957 我有一个JSFIDLE: (单击“获取视口坐标”div以获取当前地图的坐标) 我用于获取坐标的命令是: var extent=map

我用OpenLayer3显示了一个MapQuest。我想获得视口的坐标(当前仅显示地图区域)。对于整个地图,应该是这样的:(180,90)x(-180,-90)

但我得到了: 右上经度:37570328.14272983 右上纬度:18941707.105292957 左下经度:-37570328.14272983 左下纬度:-18941707.105292957

我有一个JSFIDLE:

(单击“获取视口坐标”div以获取当前地图的坐标)

我用于获取坐标的命令是: var extent=map.getView().calculateExtent(map.getSize())

为什么这些结果不是以度为单位?如何获得cordinates学位?

JS代码:

$(document).ready(function(){
    object = new QuestMapWrapper();    
    object.openMap();
    object.getViewportCords();      
});

function QuestMapWrapper()
{
  //private var
  var map;
  var view;

  //public var
  this.wrapperName="QuestMapWrapper";

  //methods
  this.openMap = function() {

    //$('#ol-viewport').show();
    //$('#gmap').hide();


    //set layers of one
    var layers = [
    new ol.layer.Tile({
      style: 'Road',
      source: new ol.source.MapQuest({layer: 'osm'})
    })]

    view = new ol.View({
    //center: ol.proj.transform([20, 52.702222], 'EPSG:4326', 'EPSG:3857'),
    center: ol.proj.transform([0., 0.0], 'EPSG:4326', 'EPSG:3857'),
    //center: [-73.979378, 40.702222],
    zoom: 1
    });

    map = new ol.Map({
      layers: layers,
      //renderer: exampleNS.getRendererFromQueryString(),
      target: 'map',
      view: view
    });

  }; 

  /** Set viewport details  */
  this.getViewportCords = function() {

    //var extent = view.calculateExtent( map.getSize() );   
    var extent = map.getView().calculateExtent(map.getSize());

    //var extent = map.getExtent().transform(map.projection, map.displayProjection)

    var factor = 1; // coordinates must be devided by 100000 to get real coord

    $('#tr-lon').text(extent[2] / factor);
    $('#tr-lat').text(extent[3] / factor);    
    $('#dl-lon').text(extent[0] / factor);
    $('#dl-lat').text(extent[1] / factor);    
  } 
}
你就快到了

var extent = map.getView().calculateExtent(map.getSize());
这条线是正确的,但是您得到的坐标位于地图使用的投影中(EPSG:3857),您需要将其转换回正常的lon/lat(WGS84/EPSG:4326)

将以下行置于转换范围之后:

extent = ol.proj.transformExtent(extent, 'EPSG:3857', 'EPSG:4326');
正如您在创建视图时所看到的,使用变换函数将中心坐标转换为EPSG:3857,这是地图可以理解的格式。无论何时将坐标发送到视图中,都需要在该投影中发送坐标。无论何时从视图中读取,都需要将其转换回使用的投影,在本例中为EPSG:4326