3

switch2osm.orgのガイドに従って、独自の OSM タイル サーバーを実行することができました。

webbrowser を使用して、OSM タイル サーバーの状態を確認しました。たとえば、http://localhost/osm_tiles/0/0/0.pngでは、世界の小さな画像が表示されます。Evertthing はサーバー側で動作しているようです。

マップのオンライン ソースに接続されたセシウムも正常に動作します。

Cesium をローカル OSM サーバーに接続しようとすると、問題が発生します。Firefox コンソールで、次のエラーが表示されます。

「「」でエラーが発生しました: イメージ タイルの取得に失敗しました X: 1 Y: 1 レベル: 1.」Cesium.js:381:25514 「""でエラーが発生しました: イメージ タイルの取得に失敗しました X: 1 Y: 0 レベル: 1." Cesium.js:381:25514 「""でエラーが発生しました: イメージ タイルの取得に失敗しました X: 0 Y: 0 レベル: 1." Cesium.js:381:25514 「""でエラーが発生しました: 画像タイルの取得に失敗しました X: 0 Y: 1 レベル: 1." セシウム.js:381:25514

私はこの問題で数日間立ち往生しています。Web を検索しても、有用な手がかりは得られませんでした。

Cesiumを実行しているWebページのソースコードは次のとおりです。

<!DOCTYPE html>
<html lang="en">
<head>
<!-- Use correct character set. -->
<meta charset="utf-8">
<!-- Tell IE to use the latest, best version (or Chrome Frame if pre-IE11). -->
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<!-- Make the application on mobile take up the full browser screen and disable user scaling. -->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<title>Hello World!</title>
<script src="../Build/Cesium/Cesium.js"></script>
<style>
  @import url(../Build/Cesium/Widgets/widgets.css);
  html, body, #cesiumContainer {
      width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden;
  }
</style>
</head>
<body>
<div id="cesiumContainer"></div>
<script>

//Initialize the viewer widget with several custom options and mixins.
var viewer = new Cesium.Viewer('cesiumContainer', {
//Hide the base layer picker
baseLayerPicker : false,
//Use OpenStreetMaps
imageryProvider : new Cesium.OpenStreetMapImageryProvider({
    url : 'http://localhost/osm_tiles/'
  //url : '//a.tile.openstreetmap.org/'
}),

// Show Columbus View map with Web Mercator projection
//    mapProjection : new Cesium.WebMercatorProjection()
});

//Add basic drag and drop functionality
viewer.extend(Cesium.viewerDragDropMixin);

//Show a pop-up alert if we encounter an error when processing a dropped file
viewer.dropError.addEventListener(function(dropHandler, name, error) {
console.log(error);
window.alert(error);
});
</script>
</body>
</html>
4

2 に答える 2

0

私はまだこの問題に遭遇しており (同じ問題がCesium メーリング リストで報告されています)、Python の SimpleHTTPServer を使用してタイルを提供していました。CORS 対応の Web サーバーに切り替えたところ、問題はなくなりました。

本当に紛らわしいのは、バニラの SimpleHTTPServer (非 CORS) が Cesium からのリクエストを HTTP 200 成功コードで出力していたため、Cesium のリクエストを処理しているように見えたのに、Cesium が見つけたエラーを報告したことです。CORS への切り替えが解決策のままでした。

于 2015-11-29T14:47:24.147 に答える