Cesiumロード座標系4490 arcgis瓦片図
4826 ワード
arcgis for server 10.2で公開されたwkid 4490の瓦図をロードする必要がある.
Cesiumバージョン番号:1.58
1.cesiumロードarcgis瓦片図フロー
1)ArcGisMapServer ImageryProviderインスタンスの作成
ArcGisMapServer ImageryProviderの_useTilesプロパティはtrueに初期化されます.
2)jsonインタフェースによるサービス情報の取得
インタフェース呼び出しに成功したら、metadataSuccess(data)内部メソッドを呼び出します.タイル図 であるか否かを判断する.タイル図の場合、座標系がスライススキームを作成すると判断することにより、G e o g raphicTilingSchemeまたはW e b M e r catorTilingScheme が作成される.判断座標系:wgs 84でないとエラーになるので4490に対してはここで修正 を行う.
3)buildImageResourceメソッドスライス情報の作成
4)_取得するスライスのx,y,levelを計算する
2.ArcGisMapServerImageryProvider転送dataInfoの変更
3.G e ographicTilingSchemeを修正スライスマトリクスを使用してx,yを計算する
3.4490楕円体およびスライススキームの作成
これでいい
Cesiumバージョン番号:1.58
1.cesiumロードarcgis瓦片図フロー
1)ArcGisMapServer ImageryProviderインスタンスの作成
ArcGisMapServer ImageryProviderの_useTilesプロパティはtrueに初期化されます.
2)jsonインタフェースによるサービス情報の取得
インタフェース呼び出しに成功したら、metadataSuccess(data)内部メソッドを呼び出します.
if (tileInfo.spatialReference.wkid === 102100 ||
tileInfo.spatialReference.wkid === 102113) {
that._tilingScheme = new WebMercatorTilingScheme({ ellipsoid : options.ellipsoid });
} else if (data.tileInfo.spatialReference.wkid === 4326) {
that._tilingScheme = new GeographicTilingScheme({ ellipsoid : options.ellipsoid });
} else if(data.fullExtent.spatialReference.wkid === 4490){
that._tilingScheme = new GeographicTilingScheme({
ellipsoid : options.ellipsoid,
tileInfo:data.tileInfo
});
}
3)buildImageResourceメソッドスライス情報の作成
4)_取得するスライスのx,y,levelを計算する
2.ArcGisMapServerImageryProvider転送dataInfoの変更
function metadataSuccess(data) {
var tileInfo = data.tileInfo;
if (!defined(tileInfo)) {
that._useTiles = false;
} else {
that._tileWidth = tileInfo.rows;
that._tileHeight = tileInfo.cols;
if (tileInfo.spatialReference.wkid === 102100 ||
tileInfo.spatialReference.wkid === 102113) {
that._tilingScheme = new WebMercatorTilingScheme({ ellipsoid : options.ellipsoid });
} else if (data.tileInfo.spatialReference.wkid === 4326) {
that._tilingScheme = new GeographicTilingScheme({ ellipsoid : options.ellipsoid });
} else if(data.fullExtent.spatialReference.wkid === 4490){
that._tilingScheme = new GeographicTilingScheme({
ellipsoid : options.ellipsoid,
tileInfo:data.tileInfo // tileInfo, GeographicTilingScheme
});
}
3.G e ographicTilingSchemeを修正スライスマトリクスを使用してx,yを計算する
GeographicTilingScheme.prototype.getNumberOfXTilesAtLevel = function(level) {
if (!defined(this._tileInfo)) {
return this._numberOfLevelZeroTilesX << level
} else { //
var currentMatrix = this._tileInfo.lods.filter(function(item) {
return item.level === level
})
var currentResolution = currentMatrix[0].resolution
return Math.round(360 / (this._tileInfo.rows * currentResolution))
}
}
/**
* Gets the total number of tiles in the Y direction at a specified level-of-detail.
*
* @param {Number} level The level-of-detail.
* @returns {Number} The number of tiles in the Y direction at the given level.
*/
GeographicTilingScheme.prototype.getNumberOfYTilesAtLevel = function(level) {
if (!defined(this._tileInfo)) {
return this._numberOfLevelZeroTilesY << level
} else { //
var currentMatrix = this._tileInfo.lods.filter(function(item) {
return item.level === level
})
var currentResolution = currentMatrix[0].resolution
return Math.round(180 / (this._tileInfo.cols * currentResolution))
}
}
3.4490楕円体およびスライススキームの作成
var cgs2000Ellipsolid = new Cesium.Ellipsoid(6378137.0, 6378137.0, 6356752.31414035585)
var myGeographicTilingScheme = new Cesium.GeographicTilingScheme({
ellipsoid: cgs2000Ellipsolid,
rectangle: Cesium.Rectangle.fromDegrees(-180, -90, 180, 90),
numberOfLevelZeroTilesX: 4,
numberOfLevelZeroTilesY: 2
})
var esriWMTS = new Cesium.ArcGisMapServerImageryProvider({
url: 'http://Ip:6080/arcgis/rest/services/jssl_vector_L3_L17/MapServer',
layer: 'jssl_vector_L3_L17',
tilingScheme: myGeographicTilingScheme,
rectangle: myRectangle,
minimumLevel: 0,
ellipsoid: cgs2000Ellipsolid,
maximumLevel: 14
})
var cgs2000GeographicProj = new Cesium.GeographicProjection(cgs2000Ellipsolid)
var viewer = new Cesium.Viewer('cesiumContainer', {
animation: false,
geocoder: false,
timeline: false,
navigationHelpButton: false,
baseLayerPicker: false,
mapProjection: cgs2000GeographicProj,
imageryProvider: esriWMTS
})
viewer.camera.flyTo({
destination: Cesium.Cartesian3.fromDegrees(119.56156642831284, 32.419457329767326, 272683)
})
これでいい