OSM ベースのレイヤーを Google マップに配置しようとしています。プロジェクト名はopenseamapです。これまでのところ、ズーム 8 まで正常に動作します。しかし、ズーム 8 の後、「400: タイル インデックスの X、Y 値が {120.99999999902559、155.83725643764348} と計算され、{121, 156 に丸める必要がありました」という 400 エラーが発生します。 } であり、10% のしきい値を超えています。クライアントが間違ったオリジンを使用している可能性がありますか?"
var gebcoLayer =
new google.maps.ImageMapType(
{
getTileUrl: function (coord, zoom) {
// Compose URL for overlay tile
var tilesPerGlobe = 1 << zoom;
var x = coord.x % tilesPerGlobe;
if (x < 0) {
x = tilesPerGlobe + x;
}
var s = Math.pow(2, zoom);
var twidth = 256;
var theight = 256;
var gBl = map.getProjection().fromPointToLatLng(new google.maps.Point(x * twidth / s, (coord.y + 1) * theight / s)); // bottom left / SW
var gTr = map.getProjection().fromPointToLatLng(new google.maps.Point((x + 1) * twidth / s, coord.y * theight / s)); // top right / NE
var mercator1 = Conv.ll2m(gBl.lng(), gBl.lat());
var mercator2 = Conv.ll2m(gTr.lng(), gTr.lat());
var bbox2 = mercator1.x + "," + mercator1.y + "," + mercator2.x + "," + mercator2.y;
var url = "http://osm.franken.de:8080/geoserver/gwc/service/wms?LAYERS=gebco_2014&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&SRS=EPSG%3A900913&BBOX=" + bbox2 + "&WIDTH=256&HEIGHT=256";
return url;
},
tileSize: new google.maps.Size(256, 256),
name: "Gebco",
isPng: true,
//maxZoom: 18,
opacity: 0.3,
});
map.overlayMapTypes.insertAt(0, gebcoLayer);
ここにコード全体を入力する代わりに、フィドルを作成しました。 これが私のフィドルです!
フィドルでわかるように、ズーム値が 8 より小さい場合は問題なく動作します。このエラーの原因がわかりませんでした。OSMとGoogleのズームレベルの違いを想定していますか? またはbbox値を計算する方法は?