Страница 1 из 1
Mapserver WMS МСК в Leaflet
Добавлено: 29 апр 2016, 17:55
fynjy888
Доброго времени суток. Есть mapserver настроенный на WMS, в нём 2 слоя: растр + wld и shp. Всё это в координатах условной местной план схемы, то есть это плоская местная городская система координат, которая по сути не имеет никакого отношения к широте и долготе.
Собственно вопрос как WMS с такими координатами вывести в Leaflet?
QGIS выводил карту адекватно при EPSG:4326 и
Код: Выделить всё
"proj=latlong"
"ellps=WGS84"
"datum=WGS84"
в .map файле. С Leaflet такое не сработало. Попытка изменить EPSG на 3857 дала черные квадраты
Вопрос: Как вывести WMS в координатах с картинки в Leaflet?
Почитав "разное", пришел к выводу что нужно создать новую EPSG:99999 проекцию как в mapserver:
Добавить в /usr/local/share/proj/epsg
#MSK for N town
<99999> +proj=merc +x_0=-11.7050 +y_0=1968.2715 .. наверное что-то еще (в proj.4 мало что понимаю, как и в проекциях, как вы уже наверное поняли)
так и в Leaflet при помощи
Proj4Leaflet:
Код: Выделить всё
var crs = new L.Proj.CRS('+proj=merc +x_0=-11.7050 +y_0=1968.2715',
{
resolutions: [8192, 4096, 2048], // 3 example zoom level resolutions
}
);
P.S. Сильно не бейте, если пишу совсем идиотские вещи

Торжественно клянусь задонатить форуму
Re: Mapserver WMS МСК в Leaflet
Добавлено: 29 апр 2016, 18:25
Denis Rykov
Re: Mapserver WMS МСК в Leaflet
Добавлено: 29 апр 2016, 19:22
fynjy888
Это я читал, L.CRS.Simple по идее в документации да, служит как раз для плоских координат, но карту по прежнему не показывает. Плагин leaflet.wms выдаёт такую ошибку: WMS server error. Unsupported SRS namespace (only EPSG and AUTO currently supported).
Соответственно есть подозрения, что выход из ситуации EPSG
Re: Mapserver WMS МСК в Leaflet
Добавлено: 29 апр 2016, 19:49
Denis Rykov
Не понимаю зачем вообще вам понадобился WMS? Разрежьте картинку на тайлы и подключите в Leaflet как описано в статье.
Re: Mapserver WMS МСК в Leaflet
Добавлено: 29 апр 2016, 20:00
fynjy888
Denis Rykov писал(а):Не понимаю зачем вообще вам понадобился WMS? Разрежьте картинку на тайлы и подключите в Leaflet как описано в статье.
WMS понадобился в первую очередь для условных знаков, к тому же shp слоёв планируется очень много и растров тоже. В общем mapserver тут был идеальный вариант, кроме того, что WMS не хочет в Leaflet отображаться.
Разрезанную картинку на тайлы я подключал и L.CRS.Simple + L.Transformation работало как надо. В чем принципиальное отличие тайлов от WMS и почему L.CRS.Simple выдаёт ошибку понять не могу. Как я понимаю нужно создать свой EPSG с плоской местной системой координат. Но как это реализовать в Proj.4 не знаю
Re: Mapserver WMS МСК в Leaflet
Добавлено: 29 апр 2016, 20:15
Игорь Белов
fynjy888 писал(а):Как я понимаю нужно создать свой EPSG с плоской местной системой координат. Но как это реализовать в Proj.4 не знаю
Если не планируете использовать внешние данные в проекциях, отличных от городской, просто укажите EPSG:3857 или EPSG:3395 в качестве CRS.
Re: Mapserver WMS МСК в Leaflet
Добавлено: 29 апр 2016, 20:36
fynjy888
ErnieBoyd писал(а):fynjy888 писал(а):Как я понимаю нужно создать свой EPSG с плоской местной системой координат. Но как это реализовать в Proj.4 не знаю
Если не планируете использовать внешние данные в проекциях, отличных от городской, просто укажите EPSG:3857 или EPSG:3395 в качестве CRS.
Указывал L.CRS.EPSG3395 в Leaflet, указывал EPSG:3395 в *.map - не помогло, в разных вариациях выдаёт либо черные квадраты внизу, либо пустые тайлы внизу

Re: Mapserver WMS МСК в Leaflet
Добавлено: 07 май 2016, 20:05
fynjy888
Единственное что нашел по поводу REQUEST=GetMap запросов - это:
Код: Выделить всё
o.TileLayer.WMS=o.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1}
Не уверен, что это то, что нужно, но тут crs:null.
Ошибку в getfeatureinfo выводит такую: Requested layer(s) are not queryable
Любые идеи в какую сторону вообще копать, пожалуйста. Любые изменения map файла приводят к ошибке в QGIS "Не удалось рассчитать границы, недействительный WMS слой"

Re: Mapserver WMS МСК в Leaflet
Добавлено: 08 май 2016, 22:53
fynjy888
Еще раз суть проблемы:
Код: Выделить всё
MAP
NAME "WMS"
STATUS ON
IMAGETYPE PNG
SIZE 400 300
EXTENT -11.7050 1468.9700 363.7713 1968.2715
UNITS METERS
SHAPEPATH "/ms4w/apps/example/shp/"
IMAGECOLOR 255 255 255
WEB
TEMPLATE "./templates/template.html"
IMAGEPATH "/ms4w/tmp/ms_tmp/"
IMAGEURL "/ms_tmp/"
METADATA
wms_title "GIS-LAB Demo"
wms_abstract "This is the WMS demo from GIS-Lab"
wms_onlineresource "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&"
wms_srs "EPSG:3576"
wms_getfeatureinfo "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&"
wms_featureinfoformat "text/plain"
ows_enable_request "*"
END
END
PROJECTION
"init=epsg:3576"
END
LAYER # States polygon layer begins here
NAME veget
DATA vodoprovod
STATUS ON
TYPE LINE
CLASSITEM "TIP"
PROJECTION
"init=epsg:3576"
END
CLASS
NAME "Наземный"
EXPRESSION 'водопровод наземный' # Выражение, определяющее класс
STYLE
COLOR 12 20 120
END
END
CLASS
NAME "Подземный"
EXPRESSION 'водопровод подземный'
STYLE
COLOR 200 255 12
END
END
METADATA
wms_title "Countries 1"
wms_abstract "Countries 1 test"
wms_srs "EPSG:3576"
wms_include_items "all"
END
END
LAYER
NAME "mappers" # название слоя
DATA "nngasu.tif" # имя файла с расширением (пути прописываются относительно SHAPEPATH)
TYPE RASTER
STATUS ON
METADATA
wms_title "Countries 2"
wms_abstract "Countries 2 test"
wms_srs "EPSG:3576"
END
END
END
Кратко: ставлю везде проекцию EPSG:3576, в PROJECTION ставлю init=epsg:3576
В QGIS всё отлично подключается и открывает
Запрос типа
Код: Выделить всё
http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&LAYERS=mappers&STYLES=&SRS=EPSG:3576&BBOX=-11.7050,1468.9700,363.7713,1968.2715&WIDTH=400&HEIGHT=300&FORMAT=image/png
Выдаёт ошибку:
Код: Выделить всё
<?xml version='1.0' encoding="UTF-8" standalone="no" ?>
<!DOCTYPE ServiceExceptionReport SYSTEM "http://schemas.opengis.net/wms/1.1.1/exception_1_1_1.dtd">
<ServiceExceptionReport version="1.1.1">
<ServiceException code="InvalidSRS">
msWMSLoadGetMapParams(): WMS server error. Invalid SRS given : SRS must be valid for all requested layers.
</ServiceException>
</ServiceExceptionReport>
В Leaflet такой код:
Код: Выделить всё
var crs = new L.Proj.CRS('EPSG:3576',
'+proj=laea +lat_0=90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs',
{
resolutions: [
8192, 4096, 2048, 1024, 512, 256, 128,
64, 32, 16, 8, 4, 2, 1, 0.5
],
origin: [0, 0]
});
var map = L.map('map', {
crs: crs,
minZoom: 0,
maxZoom: 14,
continuousWorld: true,
worldCopyJump: false
}).setView([1668.9700,150.7050], 3);
//map.setMaxBounds(new L.LatLngBounds([1468.9700,-11.7050], [1968.2705,363.7705]));
var source = L.WMS.source("http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&", {
'transparent': true,
'tiled': true,
});
source.getLayer("veget").addTo(map);
source.getLayer("mappers").addTo(map);
Вопрос:
что я делаю не так?
Любые идеи в какую сторону вообще копать, пожалуйста.
P.S. А сообщения удалять нельзя? А то я тут кучу всякого понаписал

Re: Mapserver WMS МСК в Leaflet
Добавлено: 08 май 2016, 23:21
ericsson
А что вам выдает такой запрос:
Код: Выделить всё
http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetCapabilities
?
Проверка capabilities должна быть первым шагом после того, как вы не получили искомое в ответе.
Второй шаг (если какой-то криминал не обнаружится в ответе на GetCapabilities) в вашем случае - взять любой монитор трафика и посмотреть на HTTP-запрос, который отправляет QGIS и сравнить с тем, который вы отправляете вручную.
Re: Mapserver WMS МСК в Leaflet
Добавлено: 08 май 2016, 23:33
fynjy888
Код: Выделить всё
<?xml version='1.0' encoding="UTF-8" standalone="no" ?>
<!DOCTYPE WMT_MS_Capabilities SYSTEM "http://schemas.opengis.net/wms/1.1.1/WMS_MS_Capabilities.dtd"
[
<!ELEMENT VendorSpecificCapabilities EMPTY>
]> <!-- end of DOCTYPE declaration -->
<WMT_MS_Capabilities version="1.1.1">
<!-- MapServer version 7.0.1 (MS4W 3.1.3) OUTPUT=PNG OUTPUT=JPEG OUTPUT=KML SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=CAIRO SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=FASTCGI SUPPORTS=THREADS SUPPORTS=GEOS INPUT=JPEG INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE -->
<Service>
<Name>OGC:WMS</Name>
<Title>GIS-LAB Demo</Title>
<Abstract>This is the WMS demo from GIS-Lab</Abstract>
<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&"/>
<ContactInformation>
</ContactInformation>
</Service>
<Capability>
<Request>
<GetCapabilities>
<Format>application/vnd.ogc.wms_xml</Format>
<DCPType>
<HTTP>
<Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&"/></Get>
<Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&"/></Post>
</HTTP>
</DCPType>
</GetCapabilities>
<GetMap>
<Format>image/png</Format>
<Format>image/jpeg</Format>
<Format>image/png; mode=8bit</Format>
<Format>application/x-pdf</Format>
<Format>image/svg+xml</Format>
<Format>image/tiff</Format>
<Format>application/vnd.google-earth.kml+xml</Format>
<Format>application/vnd.google-earth.kmz</Format>
<DCPType>
<HTTP>
<Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&"/></Get>
<Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&"/></Post>
</HTTP>
</DCPType>
</GetMap>
<GetFeatureInfo>
<Format>text/plain</Format>
<Format>application/vnd.ogc.gml</Format>
<DCPType>
<HTTP>
<Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&"/></Get>
<Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&"/></Post>
</HTTP>
</DCPType>
</GetFeatureInfo>
<DescribeLayer>
<Format>text/xml</Format>
<DCPType>
<HTTP>
<Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&"/></Get>
<Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&"/></Post>
</HTTP>
</DCPType>
</DescribeLayer>
<GetLegendGraphic>
<Format>image/png</Format>
<Format>image/jpeg</Format>
<Format>image/png; mode=8bit</Format>
<DCPType>
<HTTP>
<Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&"/></Get>
<Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&"/></Post>
</HTTP>
</DCPType>
</GetLegendGraphic>
<GetStyles>
<Format>text/xml</Format>
<DCPType>
<HTTP>
<Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&"/></Get>
<Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&"/></Post>
</HTTP>
</DCPType>
</GetStyles>
</Request>
<Exception>
<Format>application/vnd.ogc.se_xml</Format>
<Format>application/vnd.ogc.se_inimage</Format>
<Format>application/vnd.ogc.se_blank</Format>
</Exception>
<VendorSpecificCapabilities />
<UserDefinedSymbolization SupportSLD="1" UserLayer="0" UserStyle="1" RemoteWFS="0"/>
<Layer>
<Name>WMS</Name>
<Title>GIS-LAB Demo</Title>
<Abstract>This is the WMS demo from GIS-Lab</Abstract>
<SRS>EPSG:3576</SRS>
<LatLonBoundingBox minx="-103.909" miny="89.9821" maxx="-89.5435" maxy="89.9868" />
<BoundingBox SRS="EPSG:3576"
minx="-11.705" miny="1468.97" maxx="363.771" maxy="1968.27" />
<Layer queryable="0" opaque="0" cascaded="0">
<Name>veget</Name>
<Title>Countries 1</Title>
<Abstract>Countries 1 test</Abstract>
<SRS>EPSG:3576</SRS>
<LatLonBoundingBox minx="260.799" miny="89.9831" maxx="268.862" maxy="89.9864" />
<BoundingBox SRS="EPSG:3576"
minx="37.2273" miny="1515.79" maxx="245.538" maxy="1874.86" />
<Style>
<Name>default</Name>
<Title>default</Title>
<LegendURL width="84" height="43">
<Format>image/png</Format>
<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&version=1.1.1&service=WMS&request=GetLegendGraphic&layer=veget&format=image/png&STYLE=default"/>
</LegendURL>
</Style>
</Layer>
<Layer queryable="0" opaque="0" cascaded="0">
<Name>mappers</Name>
<Title>Countries 2</Title>
<Abstract>Countries 2 test</Abstract>
<SRS>EPSG:3576</SRS>
<LatLonBoundingBox minx="-103.907" miny="89.9821" maxx="-89.5422" maxy="89.9868" />
<BoundingBox SRS="EPSG:3576"
minx="-11.7368" miny="1469" maxx="363.739" maxy="1968.3" />
</Layer>
</Layer>
</Capability>
</WMT_MS_Capabilities>
Криминала вроде нет

Re: Mapserver WMS МСК в Leaflet
Добавлено: 09 май 2016, 04:31
ericsson
Ну, для слоя mappers - вроде нет.
Хотя вот значения X для veget - какие-то адские.
Re: Mapserver WMS МСК в Leaflet
Добавлено: 09 май 2016, 12:27
trir
плоская местная городская система координат, которая по сути не имеет никакого отношения к широте и долготе.
не верно
Re: Mapserver WMS МСК в Leaflet
Добавлено: 09 май 2016, 17:36
ericsson
Из общих соображений (поправьте, кто лучше знаком с поведением Mapserver), если используется "подстановочная" плоская система координат, область значений координат наборов данных не должна выходить за пределы, определенные для этой СК и для географической СК. В противном случае поведение софта непредсказуемо (предсказуемо только при внимательном изучении исходников или есть это уже выяснено эмпирически).
Re: Mapserver WMS МСК в Leaflet
Добавлено: 10 май 2016, 08:23
fynjy888
Так в том и дело, что явно границы моего куска карты (-11.7050, 1468.97 - 363.7713, 1968.2715) - не выходят за пределы EPSG:3576 и уж тем более EPSG:3395. Однако есть подозрения, что в Leaflet по-прежнему, несмотря на мои изменения проекций, ограничение -180 180 по Х
