Как корректно нагенерить mbtiles?

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
kliver
Участник
Сообщения: 83
Зарегистрирован: 19 мар 2011, 18:15
Репутация: 0

Как корректно нагенерить mbtiles?

Сообщение kliver » 30 дек 2016, 13:56

Есть у меня есть растры в некой местной ск.
Генерю из них виртуальный растр

Код: Выделить всё

"C:\Program Files\GDAL\gdalbuildvrt" -srcnodata "0 0 0" -vrtnodata "0 0 0" D:\VTagilOFP\projected\ekb.vrt D:\VTagilOFP\projected\*.tif
Далее открываю полученный файл в TileMill, выставляю границы, указываю параметры ск, и экспортирую как mbtiles.

Публикую на Geoserver, ск определяет по умолчанию как 3857. В просмоторщике слоев изображение есть, координаты конечно фиг пойми где.

И вот беда в qgis я не могу просмотреть этот слой с Geoserver. Пишет:
Недействительный слой: WMS provider Не удалось расчитать границы Raster layer Недействительный источник данных (источник: wms, URI: contextualWMSLegend=0&crs=EPSG:3857&dpiMode=7&featureCount=10&format=image/png&layers=cite:vtagil%20tilemill&styles=raster&url=http://localhost:8080/geoserver/ows?version%3D1.1.1%26
Сам файл могу открыть как растровый слой и ложится он куда нужно.

Что я упускаю из виду?
Может есть какой-то способ генерации Mbtiles именно в нужной ск (хотя вроде пишут что только в 3857 можно нагенерить)?

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Как корректно нагенерить mbtiles?

Сообщение ericsson » 30 дек 2016, 19:54

Согласно https://github.com/mapbox/mbtiles-spec/ ... .1/spec.md - границы должны быть определены в метаданных в WGS84, а тайлы нарезаны в соответствии со спецификацией TMS в Spherical Mercator. Так что не знаю, о какой местной СК вы ведете речь. Перепроецируйте данные и будет вам счастье.

kliver
Участник
Сообщения: 83
Зарегистрирован: 19 мар 2011, 18:15
Репутация: 0

Re: Как корректно нагенерить mbtiles?

Сообщение kliver » 09 янв 2017, 17:43

Окей, я пересчитал растры в epsg:3857(вроде это тот мертатор что нужен). Но результат прежний.

Вот мои шаги:
1 Записываю в растры ск

Код: Выделить всё

@echo off
set ext=.tif
set extout=.tif
FOR /f "tokens=*" %%G IN ('dir /b D:\ofp\*.tif') DO ("C:\Program Files\GDAL\gdalwarp" -s_srs "+proj=параметры моей ск"  -t_srs EPSG:3857  D:\ofp\%%~nG%ext% D:\ofp\proj_mercator\%%~nG%extout%)

2 Делаю виртуальный растр

Код: Выделить всё

"C:\Program Files\GDAL\gdalbuildvrt" -srcnodata "0 0 0" -vrtnodata "0 0 0" D:\ofp\proj_mercator\rastr.vrt D:\ofp\proj_mercator\*.tif
Далее я испробовал два пути это: нагенерить тайлы и нагенерить mbtiles
Оба способа дают одинаковый конечный результат поэтому опишу генерацию тайлов потому что их хотя бы гдал делает а mbtiles делает TileMill

Код: Выделить всё

"C:\Program Files\GDAL\gdal2tiles.py" -r near -a 0,0,0 -z 10-18 D:\ofp\proj_mercator\rastr.vrt D:\ofp\tms_mercator
Все далее я запускаю mapproxy с простым конфигом:

Код: Выделить всё

services:
  demo:
  wms:
    srs: ['EPSG:3857']
    image_formats: ['image/png']

layers:
   - name: tagil_mercator_layer
     title: WMS layer tagil mercator
     sources: [tagil_mercator_cache]
   - name: tagil_mbtiles_layer
     title: WMS layer tagil mbtiles
     sources: [tagil_mbtiles_cache]

caches:
  tagil_mercator_cache:
    sources: [tagil_mercator_source]
    grids: [GLOBAL_MERCATOR]
  tagil_mbtiles_cache:
    sources: []
    grids: [GLOBAL_MERCATOR]
    cache:
      type: mbtiles
      filename: D:/dev/mbtiles/export/tagil3857.mbtiles

sources:
   tagil_mercator_source:
     type: tile
     grid: GLOBAL_MERCATOR
     url: file:///D:/VTagilOFP/tms_mercator/%(z)s/%(x)s/%(y)s.png
     format: image/png

Что я упускаю?

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Как корректно нагенерить mbtiles?

Сообщение ericsson » 09 янв 2017, 19:07

Что пишет gdalinfo про любой из растров, который вы получаете после первого шага?

kliver
Участник
Сообщения: 83
Зарегистрирован: 19 мар 2011, 18:15
Репутация: 0

Re: Как корректно нагенерить mbtiles?

Сообщение kliver » 10 янв 2017, 00:20

Код: Выделить всё

D:\dev>"C:\Program Files\GDAL\gdalinfo.exe" D:\ofp\proj_mercator\ofp-246-2.tif
Driver: GTiff/GeoTIFF
Files: D:\ofp\proj_mercator\ofp-246-2.tif
Size is 10006, 10026
Coordinate System is:
PROJCS["WGS 84 / Pseudo-Mercator",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.257223563,
                AUTHORITY["EPSG","7030"]],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9122"]],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Mercator_1SP"],
    PARAMETER["central_meridian",0],
    PARAMETER["scale_factor",1],
    PARAMETER["false_easting",0],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AXIS["X",EAST],
    AXIS["Y",NORTH],
    EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +
x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs"],
    AUTHORITY["EPSG","3857"]]
Origin = (6671620.229734762600000,7839590.732170520400000)
Pixel Size = (0.185258113288467,-0.185258113288467)
Metadata:
  AREA_OR_POINT=Area
  TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch)
  TIFFTAG_XRESOLUTION=508
  TIFFTAG_YRESOLUTION=508
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  ( 6671620.230, 7839590.732) ( 59d55'55.86"E, 57d23'12.46"N)
Lower Left  ( 6671620.230, 7837733.334) ( 59d55'55.86"E, 57d22'40.09"N)
Upper Right ( 6673473.922, 7839590.732) ( 59d56'55.81"E, 57d23'12.46"N)
Lower Right ( 6673473.922, 7837733.334) ( 59d56'55.81"E, 57d22'40.09"N)
Center      ( 6672547.076, 7838662.033) ( 59d56'25.84"E, 57d22'56.28"N)
Band 1 Block=10006x1 Type=Byte, ColorInterp=Red
Band 2 Block=10006x1 Type=Byte, ColorInterp=Green
Band 3 Block=10006x1 Type=Byte, ColorInterp=Blue

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Как корректно нагенерить mbtiles?

Сообщение ericsson » 10 янв 2017, 01:51

Система координат похожа на правду. Углы тоже похожи (это вам виднее, конечно). Вероятно, первый шаг выполнен верно.
Проверяем второй. Что пишет тот же gdalinfo про ваш D:\ofp\proj_mercator\rastr.vrt ?
И что-то мне подозрителен синтаксис gdalbuildvrt - вы пишете

Код: Выделить всё

D:\ofp\proj_mercator\rastr.vrt D:\ofp\proj_mercator\*.tif
А я бы сначала сделал в каталоге с растрами

Код: Выделить всё

dir /b *.tif > tifflist.txt
а потом

Код: Выделить всё

C:\Program Files\GDAL\gdalbuildvrt" -srcnodata "0 0 0" -vrtnodata "0 0 0" -input_file_list D:\ofp\proj_mercator\tifflist.txt D:\ofp\proj_mercator\rastr.vrt
Чтобы уж в явном виде все было.

kliver
Участник
Сообщения: 83
Зарегистрирован: 19 мар 2011, 18:15
Репутация: 0

Re: Как корректно нагенерить mbtiles?

Сообщение kliver » 10 янв 2017, 09:59

Вроде то же самое что и у отдельного растра.

Код: Выделить всё

D:\dev>"C:\Program Files\GDAL\gdalinfo.exe" D:\VTagilOFP\proj_mercator\rasrt.vrt

Driver: VRT/Virtual Raster
Files: D:\VTagilOFP\proj_mercator\rasrt.vrt
       D:\VTagilOFP\proj_mercator\ofp-246-2.tif
       D:\VTagilOFP\proj_mercator\ofp-246-4.tif
       D:\VTagilOFP\proj_mercator\ofp-247-1.tif
       D:\VTagilOFP\proj_mercator\ofp-247-2.tif
       D:\VTagilOFP\proj_mercator\ofp-247-3.tif
       D:\VTagilOFP\proj_mercator\ofp-247-4.tif
Size is 29998, 20061
Coordinate System is:
PROJCS["WGS 84 / Pseudo-Mercator",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.257223563,
                AUTHORITY["EPSG","7030"]],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9122"]],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Mercator_1SP"],
    PARAMETER["central_meridian",0],
    PARAMETER["scale_factor",1],
    PARAMETER["false_easting",0],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AXIS["X",EAST],
    AXIS["Y",NORTH],
    EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +
x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs"],
    AUTHORITY["EPSG","3857"]]
Origin = (6671620.229734762600000,7839595.358218436100000)
Pixel Size = (0.185235703399780,-0.185235703399780)
Corner Coordinates:
Upper Left  ( 6671620.230, 7839595.358) ( 59d55'55.86"E, 57d23'12.54"N)
Lower Left  ( 6671620.230, 7835879.345) ( 59d55'55.86"E, 57d22' 7.76"N)
Upper Right ( 6677176.930, 7839595.358) ( 59d58'55.56"E, 57d23'12.54"N)
Lower Right ( 6677176.930, 7835879.345) ( 59d58'55.56"E, 57d22' 7.76"N)
Center      ( 6674398.580, 7837737.351) ( 59d57'25.71"E, 57d22'40.16"N)
Band 1 Block=128x128 Type=Byte, ColorInterp=Red
  NoData Value=0
Band 2 Block=128x128 Type=Byte, ColorInterp=Green
  NoData Value=0
Band 3 Block=128x128 Type=Byte, ColorInterp=Blue
  NoData Value=0

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Как корректно нагенерить mbtiles?

Сообщение ericsson » 10 янв 2017, 10:58

Прекрасно. Тайлы в TMS получаются не пустыми (проще смотреть на десятом уровне)?

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей