Openlayers View是否支持北美albers等面积圆锥项目(102008)?

时间:2019-06-26 16:11:49

标签: openlayers projection

当尝试在View中使用投影时(在没有它的情况下可以运行的hello world项目中),我得到以下堆栈跟踪:openlayers View中的“ EPSG:102008”:

View.js:1474 Uncaught TypeError: Cannot read property 'getExtent' of null
    at createResolutionConstraint (View.js:1474)
    at View.applyOptions_ (View.js:326)
    at new View (View.js:312)
    at Object.parcelRequire.index.js.ol/ol.css (index.js:43)
 view: new View({
    center: [-10997148, 4569099],
    zoom: 5,
    projection: "EPSG:102008"
  })

在没有投影的情况下,地图显示为带有空白的浏览器窗格和上述异常。

更新:

这些前两个答案帮助我使其正常运行。我无法使用transform(使我无法使用有限数),但只能使用proj4()投影原始点。如何以albers格式指定中心点?

proj4.defs('ESRI:102008', '+proj=aea +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs');
register(proj4);

const map = new Map({
  target: 'map',
  layers: [
    new TileLayer({
      source: new OSM()
    }),
    new TileLayer({
      source: new TileArcGISRest({
        url: esriUrl
      })
    })
  ],
  view: new View({
    center: proj4('EPSG:3857', 'ESRI:102008', [-10997148, 4569099]),
    // center: [-10997148, 4569099],
    zoom: 5,
    projection: 'ESRI:102008'
  })
});

更新更新:

还发现我可以这样做:

center:  proj4('EPSG:4326', 'ESRI:102008', [-79.995888, 40.440624]),

2 个答案:

答案 0 :(得分:1)

EPSG:102008不属于openlayers。您将必须添加它,即使用proj4。请参阅:[https://openlayers.org/en/latest/examples/sphere-mollweide.html?q=proj4 1

答案 1 :(得分:1)

代码为“ ESRI:102008”(不是EPSG)。有关proj4的定义,请参见https://epsg.io/102008。您的中心坐标似乎是网络墨卡托,需要进行转换。

proj4.defs("ESRI:102008","+proj=aea +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs");
ol.proj.proj4.register(proj4);

var map = new ol.Map({
  layers: [
    new ol.layer.Tile({
      source: new ol.source.OSM()
    })
  ],
  target: 'map',
  view: new ol.View({
    center: ol.proj.transform([-10997148, 4569099], "EPSG:3857", "ESRI:102008"),
    zoom: 5,
    projection: "ESRI:102008"
  })
});
html, body, .map {
    margin: 0;
    padding: 0;
    width: 100%;
    height: 100%;
}
<link href="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/css/ol.css" rel="stylesheet" />
<script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/build/ol.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.5.0/proj4.js"></script>
<div id="map" class="map"></div>