OL-Cesium - Карта источников от services.arcgisonline.com - PullRequest
0 голосов
/ 07 января 2019

У меня есть простая двумерная карта в открытом слое (5.2.0), которая приходит с этого URL: https://services.arcgisonline.com/arcgis/rest/services/NatGeo_World_Map/MapServer. Когда я переключаюсь на ol-caesium, карта больше не отображается, я вижу только черный круг (земля). Вот код:

Отлично работает с OpenStreetMap, проблема в том, что когда я пытаюсь использовать карту с arcgisonline.com

<!doctype html>
<html lang="en">
<head>
<style>
.map {
	height: 400px;
	width: 400px;
}
</style>
<link type="text/css" rel="stylesheet" href="/csiaps/webjars/openlayers/5.2.0/ol.css" />
<link type="text/css" rel="stylesheet" href="/csiaps/js/olcesium/olcs.css" />
<script type="text/javascript" src="/csiaps/webjars/openlayers/5.2.0/ol.js"></script>
<script type="text/javascript" src="/csiaps/js/cesium/Build/CesiumUnminified/Cesium.js"></script>
<script type="text/javascript" src="/csiaps/js/olcesium/olcesium.js"></script>

<script>
	var ol3d = null;
	var baseLayerGroup;



	function createArcGISCacheLayer(name, url, layerInfoParam) {

		name = 'NatGeo_World_Map';
		url = 'https://services.arcgisonline.com/arcgis/rest/services/NatGeo_World_Map/MapServer';
		layerInfoParam = <NEVER MIND, not include for this post>;

		var wrapDateLineOption = true;

		var layer = new ol.layer.Image({
			visible : true,
			source : new ol.source.ImageArcGISRest({
				url : url,
				params : {
					"layerInfo" : layerInfoParam,
					"wrapDateLine" : wrapDateLineOption
				}
			})
		});

		layer.set('title', name);

		return layer;
	}
</script>

</head>
<body>
	<h2>My Map</h2>
	<div id="map" class="map"></div>
	<script type="text/javascript">
		var layer = createArcGISCacheLayer(null, null, null);

		var map = new ol.Map({
			target : 'map',
			layers : [ layer ],
			view : new ol.View({
				center : ol.proj.fromLonLat([ 37.41, 8.82 ]),
				zoom : 4
			})
		});

		function showHideMap() {
			if (!ol3d || !ol3d.getEnabled()){
				ol3d = new olcs.OLCesium({
					map : map,
				});
			}

			ol3d.setEnabled(!ol3d.getEnabled());
		}
	</script>

	<a href="javascript:showHideMap();">3d</a>

</body>
</html>

Я ожидаю, что ol-celium отформатирует уже загруженные 2d карты в 3d и покажет их вместо черной карты

1 Ответ

0 голосов
/ 08 января 2019

Это слой плитки

var layer = new ol.layer.Tile({
  source:  new ol.source.TileArcGISRest({
    url: 'https://services.arcgisonline.com/arcgis/rest/services/NatGeo_World_Map/MapServer'
  })
});

Поскольку это EPSG: 3857 и использует стандартную сетку, он также будет работать в качестве источника XYZ и будет быстрее открываться (обратите внимание, что x и y поменялись местами по сравнению с большинством источников XYZ)

var layer = new ol.layer.Tile({
  source:  new ol.source.XYZ({
    url: 'https://services.arcgisonline.com/arcgis/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}'
  })
});
...