Поддерживает ли openlayers проект по созданию равных площадей для североамериканских альберов (102008)? - PullRequest
0 голосов
/ 26 июня 2019

Я получаю следующую трассировку стека при попытке использовать проекцию в View (в проекте hello world, который работает иначе без него): «EPSG: 102008» в openlayers View:

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"
  })

без проекции на карте отображается пустая панель браузера и приведенное выше исключение.

update:

Эти первые два ответа помогли мне заставить его работать.Я не мог использовать преобразование (продолжал давать мне исключение об использовании конечных чисел), но просто использовал proj4 () для проецирования исходной точки.Как мне указать центральную точку в формате Альберса?

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 ]

1 голос
/ 26 июня 2019

Код «ESRI: 102008» (не EPSG).См. https://epsg.io/102008 для определения proj4.Координаты вашего центра, по-видимому, являются веб-меркаторами и должны быть преобразованы.

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>
1 голос
/ 26 июня 2019

EPSG: 102008 не является частью открытых слоев. Вы должны будете добавить это, то есть с proj4. Пожалуйста, смотрите: [https://openlayers.org/en/latest/examples/sphere-mollweide.html?q=proj4 1

...