Страница 1 из 2
Смешения тайликов относительно векторной информации
Добавлено: 09 июл 2012, 20:49
out2002
Есть векторный слой рендрится mapserver'ом из postgis
Есть тайлики сделаные MapTiler
При отрисовке openlayer получается не стыковка векторного слоя и растровых тайлов, смешение. Подскажите куда смотреть?
Re: Смешения тайликов относительно векторной информации
Добавлено: 09 июл 2012, 22:04
Denis Rykov
А исходный растр (не тайлированный) совпадает с вектором?
Re: Смешения тайликов относительно векторной информации
Добавлено: 09 июл 2012, 22:10
out2002
В аркгисе смотрю все совпадает
[ Сообщение с мобильного устройства ]
Re: Смешения тайликов относительно векторной информации
Добавлено: 10 июл 2012, 05:13
Denis Rykov
Растр, который вы разбиваете на тайл - он в каком формате, где прописана привязка? Если можно - выложите куда-нибудь данные, а то так долго гадать можно.
Re: Смешения тайликов относительно векторной информации
Добавлено: 10 июл 2012, 07:13
out2002
Растр GeoTIFF, MapTiler определяет привязку правильно. файлики довольно таки огромные. постараюсь ужать и скинуть. Я так понимаю что проблема в maxExtent: OpenLayers.Bounds(). он был прописан для векторного слоя, а когда я подключаю растровый слой ему надо указать свою позицию что ли.
Код: Выделить всё
function overlay_getTileURL(bounds) {
var res = this.map.getResolution();
var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
var y = Math.round((bounds.bottom - this.maxExtent.bottom) / (res * this.tileSize.h));
var z = this.map.getZoom();
if (x >= 0 && y >= 0) {
return this.url + z + "/" + x + "/" + y + "." + this.type;
} else {
return "http://www.maptiler.org/img/none.png";
}
}
// avoid pink tiles
OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;
OpenLayers.Util.onImageLoadErrorColor = "transparent";
var map = new OpenLayers.Map({
div: "map",
maxExtent: new OpenLayers.Bounds(3268906.637700, 5371766.708000, 3319656.299400, 5414472.816700),
minResolution: "auto",
projection:"EPSG:1",
layers: [
new OpenLayers.Layer.TMS("TMS Layer",
"/test/",
{
url: '', serviceVersion: '.', layername: 'boundary', alpha: true,
type: 'png', getURL: overlay_getTileURL}
),
new OpenLayers.Layer.WMS("OSM (with buffer)",
"http://localhost/cgi-bin/mapserv.fcgi?",
{
layers : "boundary",
map : "/var/www/test.map",
format: 'png',
transparent: "true"
},
{
isBaseLayer: false
}
)
],
controls: [
new OpenLayers.Control.Navigation({
dragPanOptions: {
enableKinetic: true
}
}),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.Attribution(),
new OpenLayers.Control.MousePosition(),
new OpenLayers.Control.ScaleBar()
]
});
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.zoomToMaxExtent();
Re: Смешения тайликов относительно векторной информации
Добавлено: 10 июл 2012, 09:54
out2002
Вот как выглядит растрик в ArcGIS вот как выглядит этот же растрик потайленый в openlayers
Re: Смешения тайликов относительно векторной информации
Добавлено: 10 июл 2012, 11:21
Denis Rykov
Зачем вы пишете собственную функцию overlay_getTileURL?
Re: Смешения тайликов относительно векторной информации
Добавлено: 10 июл 2012, 11:26
out2002
Не знаю )) а как? я ее выцепил из того что сгенерил мне MapTiler. Я уже вижу что в ней проблема.
У меня тайлики просто на диске хранятся. я функцией формирую урл по которому беру с сервера тайлик.
Re: Смешения тайликов относительно векторной информации
Добавлено: 10 июл 2012, 11:48
Denis Rykov
В качестве предположения, попробуйте заменить OpenLayers.Layer.TMS на OpenLayers.Layer.XYZ.
Re: Смешения тайликов относительно векторной информации
Добавлено: 10 июл 2012, 11:55
out2002
Поменял, никаких изменений
Re: Смешения тайликов относительно векторной информации
Добавлено: 10 июл 2012, 11:58
Denis Rykov
Ну тогда остаётся вам скинуть мне данные, чтобы я сам посмотрел, похоже что-то не так с функцией getURL.
Re: Смешения тайликов относительно векторной информации
Добавлено: 10 июл 2012, 21:14
Denis Rykov
Получил ваши данные и сделал следующее:
1) Перепроецировал вектор и растр в EPSG:900913, чтобы можно было использовать совместно с каким-нибудь публичным сервисом, например, OSM;
2) На базе векторного слоя поднял WMS сервис (MapServer);
3) Растр опубликовал по протоколу TMS, используя
TileCache, скормив ему на входе tif-файл. То есть тайлы создаются на лету из растра и при этом кэшируются.
Результат можно посмотреть
здесь. Как видно, такого смещения, как в вашем примере, не наблюдается.
P.S. Попытки протайлировать растр с использованием gdal2tiles (бэкенд MapTiler-а) и подключить тайлы, используя OpenLayers.Layer.XYZ пока к результату не привели, будем продолжать разбираться.
Re: Смешения тайликов относительно векторной информации
Добавлено: 10 июл 2012, 22:17
out2002
А можно настройки перепроицирования. И всех конфигов. Я почту вам кину в личку. Доберусь до компа. Буду разбиратся. Спасибо огромное.
[ Сообщение с мобильного устройства ]
Re: Смешения тайликов относительно векторной информации
Добавлено: 12 июл 2012, 20:20
Denis Rykov
Ещё актуально? Есть подозрения, что в gdal2tiles закрался какой-то баг, который случается когда на вход подаётся растр в меркаторе, потому как у меня до разбивики на тайлы растр ложиться куда надо, а после тайлирования - улетает, причём это происходит не на всех растрах, разбираюсь. Перепроецировал растр к EPSG:4326 и потаилил - никаких проблем. Свой
пример обновил.
Re: Смешения тайликов относительно векторной информации
Добавлено: 15 июл 2012, 12:28
out2002
Denis Rykov писал(а):Перепроецировал растр к EPSG:4326.
Вот это интересует, как вы это сделали? )