OpenLayers 与 OpenLayers 3 添加 MapServer 图层
OpenLayers vs. OpenLayers 3 adding MapServer Layers
我希望这个问题的答案很简单,我只是有一些简单的地方不合适。
在 OpenLayers 1 中,我添加了一个这样的层...
msSection = new OpenLayers.Layer.MapServer("Section",
MSBaseURL+"/MappingSection.map&",
{ layers: 'section', exceptions: "application/vnd.ogc.se_xml" },
{ isBaseLayer: false, opacity: 0.9 },
{ tileSize: new OpenLayers.Size(256, 256), buffer: 1 });
msSection.setVisibility(false);
地图文件看起来像这样...
MAP
IMAGETYPE PNG24
CONFIG "PROJ_LIB" "C:/Program Files/MapServer/projlib/"
SIZE 256 256
FONTSET "D:/RCIS/Web/MapServerDlls/content/fontset.txt"
IMAGECOLOR 255 255 255
TRANSPARENT ON
PROJECTION
"init=epsg:4326"
END
LAYER
NAME "section"
TYPE POLYGON
STATUS ON
LABELCACHE ON
PROCESSING 'LABEL_NO_CLIP=1'
CONNECTIONTYPE PLUGIN
PLUGIN "msplugin_mssql2008.dll"
MAXGEOWIDTH .08
CONNECTION "server=someserver,someport;uid=someuser;pwd=somepassword;Initial Catalog=NATIONALDB;Integrated Security=False"
DATA "shape(geography),SECTION from NATIONALDB.sde.SECTION USING INDEX SECTION_SIDX USING UNIQUE SECTION_ID USING SRID=4269"
LABELITEM "SECTION"
CLASS
STYLE
OUTLINECOLOR 255 000 000
WIDTH 3
END
LABEL
COLOR 255 000 000
TYPE TRUETYPE
FONT Arial
SIZE 12
ANTIALIAS TRUE
POSITION CL
PARTIALS FALSE
#MINDISTANCE 300
#BUFFER 15
END
END
PROJECTION
"init=epsg:4326"
END
END
END
...一切都很愉快并且正常...
我尝试在 OpenLayers 3 中添加它...
var Section = new ol.layer.Tile({
name: 'Section',
source: new ol.source.TileWMS({
url: 'http://localhost:8080/cgi-bin/mapserv.exe?map=D:/RCIS/Web/Mapfiles/MappingSection.map&',
params: { 'LAYERS': 'section' },
serverType: 'mapserver'
})
});
control.map.addLayer(Section);
...它在 chrome 开发工具中显示代码 200 OK 但不起作用,
当我将返回的其中一个图块放入地址栏时,出现此错误..
<ServiceException>
msWMSDispatch(): WMS server error. WMS request not enabled. Check wms/ows_enable_request settings.
</ServiceException>
我对此完全困惑,非常感谢任何帮助!!
OpenLayers.Layer.MapServer
使用 MapServer CGI Controls 来执行其请求,而不是 WMS。由于 MapServer 支持 WMS,因此 CGI 控件不再用于使用 MapServer 绘制地图图像。
在 OpenLayers 3 中,您使用的格式是 ol.source.TileWMS
,它会生成 WMS 请求。如果您检查发送的请求(在您的浏览器开发工具中使用 F12 键查看),您会看到发送以呈现图像的请求是 WMS 请求,即它们不使用 MapServer CGI 控件。
您需要做的是更改您的地图文件以使其支持 WMS。在这里查看它是如何完成的:http://mapserver.org/ogc/wms_server.html. More specifically, look at the Setup a Mapfile For your WMS 部分。
我希望这个问题的答案很简单,我只是有一些简单的地方不合适。
在 OpenLayers 1 中,我添加了一个这样的层...
msSection = new OpenLayers.Layer.MapServer("Section",
MSBaseURL+"/MappingSection.map&",
{ layers: 'section', exceptions: "application/vnd.ogc.se_xml" },
{ isBaseLayer: false, opacity: 0.9 },
{ tileSize: new OpenLayers.Size(256, 256), buffer: 1 });
msSection.setVisibility(false);
地图文件看起来像这样...
MAP
IMAGETYPE PNG24
CONFIG "PROJ_LIB" "C:/Program Files/MapServer/projlib/"
SIZE 256 256
FONTSET "D:/RCIS/Web/MapServerDlls/content/fontset.txt"
IMAGECOLOR 255 255 255
TRANSPARENT ON
PROJECTION
"init=epsg:4326"
END
LAYER
NAME "section"
TYPE POLYGON
STATUS ON
LABELCACHE ON
PROCESSING 'LABEL_NO_CLIP=1'
CONNECTIONTYPE PLUGIN
PLUGIN "msplugin_mssql2008.dll"
MAXGEOWIDTH .08
CONNECTION "server=someserver,someport;uid=someuser;pwd=somepassword;Initial Catalog=NATIONALDB;Integrated Security=False"
DATA "shape(geography),SECTION from NATIONALDB.sde.SECTION USING INDEX SECTION_SIDX USING UNIQUE SECTION_ID USING SRID=4269"
LABELITEM "SECTION"
CLASS
STYLE
OUTLINECOLOR 255 000 000
WIDTH 3
END
LABEL
COLOR 255 000 000
TYPE TRUETYPE
FONT Arial
SIZE 12
ANTIALIAS TRUE
POSITION CL
PARTIALS FALSE
#MINDISTANCE 300
#BUFFER 15
END
END
PROJECTION
"init=epsg:4326"
END
END
END
...一切都很愉快并且正常... 我尝试在 OpenLayers 3 中添加它...
var Section = new ol.layer.Tile({
name: 'Section',
source: new ol.source.TileWMS({
url: 'http://localhost:8080/cgi-bin/mapserv.exe?map=D:/RCIS/Web/Mapfiles/MappingSection.map&',
params: { 'LAYERS': 'section' },
serverType: 'mapserver'
})
});
control.map.addLayer(Section);
...它在 chrome 开发工具中显示代码 200 OK 但不起作用, 当我将返回的其中一个图块放入地址栏时,出现此错误..
<ServiceException>
msWMSDispatch(): WMS server error. WMS request not enabled. Check wms/ows_enable_request settings.
</ServiceException>
我对此完全困惑,非常感谢任何帮助!!
OpenLayers.Layer.MapServer
使用 MapServer CGI Controls 来执行其请求,而不是 WMS。由于 MapServer 支持 WMS,因此 CGI 控件不再用于使用 MapServer 绘制地图图像。
在 OpenLayers 3 中,您使用的格式是 ol.source.TileWMS
,它会生成 WMS 请求。如果您检查发送的请求(在您的浏览器开发工具中使用 F12 键查看),您会看到发送以呈现图像的请求是 WMS 请求,即它们不使用 MapServer CGI 控件。
您需要做的是更改您的地图文件以使其支持 WMS。在这里查看它是如何完成的:http://mapserver.org/ogc/wms_server.html. More specifically, look at the Setup a Mapfile For your WMS 部分。