我有一个应用程序,在其中使用mapbox.js加载某个位置的底图图块。然后,用户可以从WMS服务器加载大小为256X256的WMS切片,并将其加载到底图的顶部。
我正在使用mapbox和传单显示地图,如下所示:
window.map = L.map('map', { 'minZoom': minZoomLevel(), 'maxZoom': maxZoomLevel(), reuseTiles: true, unloadInvisibleTiles: true }).setView(["35.7804", "-78.6391"], 17)
然后我正在使用Leaflet,将请求发送到我的服务器,然后从那里将请求发送到WMS服务器,以使用以下方法加载图块:
wms = L.tileLayer.wms('/viewers/wms', {
minZoom: 12,
maxZoom: 25,
layers: 'some layer name',
format: 'image/png',
updateWhenIdle: false,
transparent: true,
reuseTiles: true,
showTheRasterReturned: true,
COVERAGE_CQL_FILTER: 'featureId=\'' + featureId + '\''
});
当请求到达我的服务器时,{@ {1}}属性由具有不同坐标(我认为它占据了完整视口)的传单自动添加,即
BBOX
动态添加传单的BBOX属性,如下所示
Started GET
"/viewers/wms?SERVICE=WMS&REQUEST=GetMap&VERSION=1.1.1&LAYERS=some
layer
name&STYLES=&FORMAT=image%2Fpng&TRANSPARENT=true&HEIGHT=256&WIDTH=256&REUSETILES=true&SHOWTHERASTERRETURNED=true&COVERAGE_CQL_FILTER=featureId%3D%279d3a23cba90680cecda337a926f563a6%27&SRS=EPSG%3A3857&**BBOX=-8755402.967897227,4285977.050006404,-8755097.219784087,4286282.798119542**" for 127.0.0.1 at 2018-06-27 16:51:01 -0400
不过,我只想获取这些坐标的图块:
BBOX=-8755402.967897227,4285977.050006404,-8755097.219784087,4286282.798119542"
在southWest ={lat: 35.77712238348847, lng: -78.64827990531921}
northEast {lat: 35.783693840245284, lng: -78.62991213798523}
内设置BBOX
选项也无济于事,因为L.tileLayer.wms
坐标是通过传单添加的。
答案 0 :(得分:1)
传单工作正常。
您只需要记住,尽管Leaflet对显示投影和L.LatLng
使用不同的坐标参考系统(CRS)。您在EPSG:4326(AKA equirectangular)中指定L.LatLng
(以及范围等),然后Leaflet会将所有内容转换为EPSG:3857(AKA Spherical Mercator)。
请注意,WMS请求的URL如何包含一个SRS=EPSG%3A3857
参数(这意味着SRS=EPSG:3857
一次URI-decoded)。这意味着Leaflet在EPSG:3857中提供坐标,并期望在EPSG:3857中投影图像。
如果看不到图像,则可能意味着您的WMS服务器不支持EPSG:3857。另外,我建议您通读Leaflet WMS/TMS tutorial,该书着重介绍了如何在WMS栅格源中使用不同的CRS。
尽管,我只想获取这些坐标的图块
然后使用bounds
option of L.TileLayer.WMS
。 (如果您在文档中没有看到此选项,请记住L.TileLayer.WMS
继承了L.TileLayer
的选项,而L.GridLayer
继承了wms = L.tileLayer.wms('/viewers/wms', {
minZoom: 12,
maxZoom: 25,
layers: 'some layer name',
format: 'image/png',
updateWhenIdle: false,
transparent: true,
reuseTiles: true,
showTheRasterReturned: true,
COVERAGE_CQL_FILTER: 'featureId=\'' + featureId + '\''
bounds: L.latLngBounds([[35.77, -78.65],[35.78, -78.63]])
});
的选项)
像这样:
SHOW PROCESSLIST;
| Id | User | Host | db | Command | Time | State | Info |
| 537478557 | root | localhost | my_DB | Query | 0 | Sending data | select * from my_DB.T_final where name in ('AB1234') |