Почему примеры не работают? (борьба с импортом) - PullRequest
0 голосов
/ 29 июня 2018

На странице https://openlayers.org/en/latest/examples/image-vector-layer.html Я скопировал HTML-код из-под карты в /tmp/a.html и запустил firefox /tmp/a.html.

Сначала оказалось, что две проблемы легко исправить:

  1. SyntaxError: объявления импорта могут появляться только на верхнем уровне модуля
  2. Кодировка символов документа HTML не была объявлена. Документ ...

Чтобы исправить это:

  1. заменить <script> на <script type="module">
  2. добавить <meta charset="UTF-8"> в <head></head>

Но что делать с третьей ошибкой?

TypeError: Error resolving module specifier: ol/Map.js

У меня Firefox 60.0.1.

Значит, HTML-коды в примерах предназначены для использования так же, как я, или я что-то неправильно понял?

А что мне нужно в моем коде для import Map from ol/Map.js?

(Я пытался переформулировать вопрос, но если я все еще заслуживаю отрицательного рейтинга, пожалуйста, объясните почему. Спасибо)

Ответы [ 3 ]

0 голосов
/ 27 марта 2019

была такая же проблема. openlayers выдающийся, v5 примеров нет: (

, например https://openlayers.org/en/latest/examples/animation.html

my fix for v5 (.3.0) примеры:

    <!-- ADD build-REFERENCE for v5(.3.0) // github.com/openlayers/openlayers/ -->
    <script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/build/ol.js"></script>

    <script>
    // CONVERT imports to var
    var Map                 = ol.Map;        //~ import Map from 'ol/Map.js';
    var View                = ol.View;       //~ import View from 'ol/View.js';
    var {easeIn, easeOut}   = ol.easing;     //~ import {easeIn, easeOut} from 'ol/easing.js';
    var TileLayer           = ol.layer.Tile; //~ import TileLayer from 'ol/layer/Tile.js';
    var {fromLonLat}        = ol.proj;       //~ import {fromLonLat} from 'ol/proj.js';
    var OSM                 = ol.source.OSM; //~ import OSM from 'ol/source/OSM.js';        
    // ...

процесс: используйте «копировать» на странице примера, «вставить» в новый HTML-файл. изменить, как указано выше. запустить в firefox.

0 голосов
/ 11 июня 2019

на основе ответа Лу, вот исправление, которое я только что сделал для примера анимации Marker :

<head>
<meta charset="UTF-8">
<title>Marker Animation</title>
<link rel="stylesheet" href="https://openlayers.org/en/v5.3.0/css/ol.css" type="text/css">

<!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->
<script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>

<script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/build/ol.js"></script>
</head>

<body>
<div id="map" class="map"></div>

<label for="speed">
  speed:&nbsp;
  <input id="speed" type="range" min="10" max="999" step="10" value="60">
</label>

<button id="start-animation">Start Animation</button>

<script>
  var Feature = ol.Feature; //import Feature from 'ol/Feature.js';
  var Map = ol.Map; //import Map from 'ol/Map.js';
  var View = ol.View; //import View from 'ol/View.js';
  var Polyline = ol.format.Polyline; //import Polyline from 'ol/format/Polyline.js';
  var Point = ol.geom.Point; //import Point from 'ol/geom/Point.js';
  var {Tile, Vector} = ol.layer; //import {Tile as TileLayer, Vector as VectorLayer} from 'ol/layer.js';
  var TileLayer = Tile;
  var VectorLayer = Vector;

  //var BingMaps = ol.source.BingMaps; //import BingMaps from 'ol/source/BingMaps.js';

  var VectorSource = ol.source.Vector; //import VectorSource from 'ol/source/Vector.js';
  var {Circle, Fill, Icon, Stroke, Style} = ol.style; //import {Circle as CircleStyle, Fill, Icon, Stroke, Style} from 'ol/style.js';
  var CircleStyle = Circle;

  // This long string is placed here due to jsFiddle limitations.
  // It is usually loaded with AJAX.
  var polyline = [ ...

и для использования спутниковой карты ESRI или OpenStreetMap (обычная) карта вместо Bing Maps одна (для которой требуется ключ), сделайте это дополнительное редактирование к примеру анимации маркера:

  var map = new Map({
    target: document.getElementById('map'),
    loadTilesWhileAnimating: true,
    view: new View({
      center: center,
      zoom: 10,
      minZoom: 2,
      maxZoom: 19
    }),
    layers: [
      new TileLayer({
        source:
            //new ol.source.OSM()

            new ol.source.XYZ({
              attributions: ['Powered by Esri',
                             'Source: Esri, DigitalGlobe, GeoEye, Earthstar Geographics, CNES/Airbus DS, USDA, USGS, AeroGRID, IGN, and the GIS User Community'],
              attributionsCollapsible: false,
              url: 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
              maxZoom: 23
            })

            /*
            new BingMaps({
              imagerySet: 'AerialWithLabels',
              key: 'Your Bing Maps Key from http://www.bingmapsportal.com/ here'
            })
            */
      }),
      vectorLayer
    ]
  });
0 голосов
/ 30 июня 2018

Это потому, что есть некоторые изменения из-за последней версии OpenLayers (V5.0). Теперь образцы основаны на модулях ES6, тогда как раньше был еще один способ сделать

Вы можете сравнить "простой" образец v4.6.5 с "простым" мастер-образцом

Использование <script type="module"> недостаточно, поскольку оно не решает зависимости при выполнении import Map from ol/Map.js

Есть как минимум 3 способа сделать:

  1. Обычным способом создания образца Openlayers с использованием версии 5.0.0 является использование таких пакетов, как Webpack или Parcel. Есть учебник для этого .

  2. Я также исследовал JSPM с этим образцом

  3. Вы всегда можете использовать старый способ, как в версии 4.6.5, используя этот другой официальный учебник без использования import.

Для решения 1 вы можете использовать codesandbox.io, чтобы избежать настройки локальной среды посылки / веб-пакета, как показано на примере этого твита .

Я знаю, что ведется работа по продвижению кода для образцов, и я также представил несколько предложений для codesandbox.io, например: https://github.com/openlayers/openlayers/issues/8324

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...