SuperMap/iClient-JavaScript

maplibre-gl-enhance 的style->sources->type: 'raster'设置tileSize: 512无效

Closed this issue · 9 comments

如题,在使用maplibre-gl-enhance,加载wtms服务时设置tileSize: 512,经验证设置为256或者不设置或者设置512,地图都只能加载256的wtms服务

谢谢你提的issue。
你是说OGC的WMTS服务吗?可以先确定下你的服务是否支持512的瓦片。
请提供下下你的代码和WMTS服务的能力文档,便于我们跟踪问题。

使用的标准的EPSG:4498坐标系,代码如下:

<script type="text/javascript"> var WKT = 'PROJCS["CGCS2000 / Gauss-Kruger zone 20",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China 2000",SPHEROID["CGCS2000", 6378137.0, 298.257222101, AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]],UNIT["degree", 0.017453292519943295],AXIS["Geodetic longitude", EAST],AXIS["Geodetic latitude", NORTH],AUTHORITY["EPSG","4490"]],PROJECTION["Transverse_Mercator", AUTHORITY["EPSG","9807"]],PARAMETER["central_meridian", 117.0],PARAMETER["latitude_of_origin", 0.0],PARAMETER["scale_factor", 1.0],PARAMETER["false_easting", 20500000.0],PARAMETER["false_northing", 0.0],UNIT["m", 1.0],AXIS["Easting", EAST], AXIS["Northing", NORTH],AUTHORITY["EPSG","4498"]]'; // var Proj4 =' +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000.0 +y_0=0 +ellps=GRS80 +units=m +no_defs +type=crs' var map = new maplibregl.Map({ container: 'map', style: { version: 8, sources: { bj_dist: { type: 'raster', tileSize: 512, tiles: [ "http://localhost:9090/geoserver/postgis/gwc/service/wmts?layer=postgis:bjcgcs20&style=&tilematrixset=EPSG:4498x2&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image/jpeg&TileMatrix=EPSG:4498x2:{z}&TileCol={x}&TileRow={y}", ], }, }, layers: [ { id: 'bj_dist', type: 'raster', source: 'bj_dist', minzoom: 0, maxzoom: 19 }, ] }, crs: new maplibregl.CRS('EPSG:4498', WKT, [20184047.248447325,2103881.962779923,20815952.751552675,5714206.250336334]), center: [116.5, 39.9], pitch: 45, zoom: 9, renderWorldCopies: false, }); map.addControl(new maplibregl.FullscreenControl()); map.addControl(new maplibregl.NavigationControl()); map.addControl(new maplibregl.ScaleControl()); </script>

你的wmts服务能出512的瓦片吗,通常情况下wmts都只是256的瓦片,请提供下你的wmts capabilities文档

Capabilities xmlns="http://www.opengis.net/wmts/1.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gml="http://www.opengis.net/gml" xsi:schemaLocation="http://www.opengis.net/wmts/1.0 http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd" version="1.0.0">
<script/>
ows:ServiceIdentification
ows:TitleGeoServer Web Map Tile Service</ows:Title>
ows:AbstractA compliant implementation of WMTS service.</ows:Abstract>
ows:Keywords
ows:KeywordWMTS</ows:Keyword>
</ows:Keywords>
ows:ServiceTypeOGC WMTS</ows:ServiceType>
ows:ServiceTypeVersion1.0.0</ows:ServiceTypeVersion>
ows:FeesNONE</ows:Fees>
ows:AccessConstraintsNONE</ows:AccessConstraints>
</ows:ServiceIdentification>
ows:ServiceProvider
ows:ProviderNamehttp://geoserver.org/com</ows:ProviderName>
<ows:ProviderSite xlink:href="http://geoserver.org"/>
ows:ServiceContact
ows:IndividualNameClaudius Ptolomaeus</ows:IndividualName>
ows:PositionNameChief Geographer</ows:PositionName>
ows:ContactInfo
ows:Address
ows:CityAlexandria</ows:City>
ows:CountryRoman Empire</ows:Country>
ows:ElectronicMailAddressclaudius.ptolomaeus@mercury.olympus.gov</ows:ElectronicMailAddress>
</ows:Address>
</ows:ContactInfo>
</ows:ServiceContact>
</ows:ServiceProvider>
ows:OperationsMetadata
<ows:Operation name="GetCapabilities">
ows:DCP
ows:HTTP
<ows:Get xlink:href="http://localhost:9090/geoserver/gwc/service/wmts?">
<ows:Constraint name="GetEncoding">
ows:AllowedValues
ows:ValueKVP</ows:Value>
</ows:AllowedValues>
</ows:Constraint>
</ows:Get>
</ows:HTTP>
</ows:DCP>
</ows:Operation>
<ows:Operation name="GetTile">
ows:DCP
ows:HTTP
<ows:Get xlink:href="http://localhost:9090/geoserver/gwc/service/wmts?">
<ows:Constraint name="GetEncoding">
ows:AllowedValues
ows:ValueKVP</ows:Value>
</ows:AllowedValues>
</ows:Constraint>
</ows:Get>
</ows:HTTP>
</ows:DCP>
</ows:Operation>
<ows:Operation name="GetFeatureInfo">
ows:DCP
ows:HTTP
<ows:Get xlink:href="http://localhost:9090/geoserver/gwc/service/wmts?">
<ows:Constraint name="GetEncoding">
ows:AllowedValues
ows:ValueKVP</ows:Value>
</ows:AllowedValues>
</ows:Constraint>
</ows:Get>
</ows:HTTP>
</ows:DCP>
</ows:Operation>
</ows:OperationsMetadata>


ows:Title北京地区</ows:Title>
ows:Identifierpostgis:bjcgcs20</ows:Identifier>
<Style isDefault="true">
ows:Identifierpolygon</ows:Identifier>

</Style>
application/vnd.mapbox-vector-tile
image/png
image/jpeg
text/plain
application/vnd.ogc.gml
text/xml
application/vnd.ogc.gml/3.1.1
text/xml
text/html
application/json

EPSG:4498x2


EPSG:4498x2:0
2
2
0
0


EPSG:4498x2:1
4
4
0
1


EPSG:4498x2:2
7
8
1
2


EPSG:4498x2:3
15
17
2
4


EPSG:4498x2:4
30
34
4
9


EPSG:4498x2:5
59
68
9
18


EPSG:4498x2:6
118
136
18
36


EPSG:4498x2:7
237
273
36
72


EPSG:4498x2:8
473
546
73
145


EPSG:4498x2:9
946
1092
146
290


EPSG:4498x2:10
1891
2183
292
580


EPSG:4498x2:11
3783
4366
585
1161


EPSG:4498x2:12
7565
8731
1171
2322


EPSG:4498x2:13
15129
17461
2342
4644


EPSG:4498x2:14
30258
34922
4685
9288


EPSG:4498x2:15
60515
69844
9370
18577


EPSG:4498x2:16
121030
139687
18741
37155


EPSG:4498x2:17
242060
279375
37482
74310


EPSG:4498x2:18
484121
558751
74965
148620


EPSG:4498x2:19
968243
1117502
149931
297240















ows:IdentifierEPSG:4498x2</ows:Identifier>
ows:SupportedCRSurn:ogc:def:crs:EPSG::4498</ows:SupportedCRS>

ows:IdentifierEPSG:4498x2:0</ows:Identifier>
4407822.984830845
5895315.0 2.0184047248447325E7
512
512
1
6


ows:IdentifierEPSG:4498x2:1</ows:Identifier>
2203911.4924154226
5895315.0 2.0184047248447325E7
512
512
2
12


ows:IdentifierEPSG:4498x2:2</ows:Identifier>
1101955.7462077113
5737339.0 2.0184047248447325E7
512
512
4
23


ows:IdentifierEPSG:4498x2:3</ows:Identifier>
550977.8731038556
5737339.0 2.0184047248447325E7
512
512
8
46


ows:IdentifierEPSG:4498x2:4</ows:Identifier>
275488.9365519278
5737339.0 2.0184047248447325E7
512
512
16
92


ows:IdentifierEPSG:4498x2:5</ows:Identifier>
137744.4682759639
5717592.0 2.0184047248447325E7
512
512
32
183


ows:IdentifierEPSG:4498x2:6</ows:Identifier>
68872.23413798196
5717592.0 2.0184047248447325E7
512
512
64
366


ows:IdentifierEPSG:4498x2:7</ows:Identifier>
34436.11706899098
5717592.0 2.0184047248447325E7
512
512
128
732


ows:IdentifierEPSG:4498x2:8</ows:Identifier>
17218.05853449549
5715123.0 2.0184047248447325E7
512
512
256
1463


ows:IdentifierEPSG:4498x2:9</ows:Identifier>
8609.029267247744
5715123.0 2.0184047248447325E7
512
512
512
2926


ows:IdentifierEPSG:4498x2:10</ows:Identifier>
4304.514633623872
5714506.0 2.0184047248447325E7
512
512
1024
5851


ows:IdentifierEPSG:4498x2:11</ows:Identifier>
2152.257316811936
5714506.0 2.0184047248447325E7
512
512
2048
11702


ows:IdentifierEPSG:4498x2:12</ows:Identifier>
1076.128658405968
5714352.0 2.0184047248447325E7
512
512
4096
23403


ows:IdentifierEPSG:4498x2:13</ows:Identifier>
538.064329202984
5714275.0 2.0184047248447325E7
512
512
8192
46805


ows:IdentifierEPSG:4498x2:14</ows:Identifier>
269.0321646014918
5714236.0 2.0184047248447325E7
512
512
16384
93609


ows:IdentifierEPSG:4498x2:15</ows:Identifier>
134.5160823007461
5714217.0 2.0184047248447325E7
512
512
32768
187217


ows:IdentifierEPSG:4498x2:16</ows:Identifier>
67.25804115037286
5714207.0 2.0184047248447325E7
512
512
65536
374433


ows:IdentifierEPSG:4498x2:17</ows:Identifier>
33.62902057518643
5714207.0 2.0184047248447325E7
512
512
131072
748866


ows:IdentifierEPSG:4498x2:18</ows:Identifier>
16.814510287593215
5714207.0 2.0184047248447325E7
512
512
262144
1497732


ows:IdentifierEPSG:4498x2:19</ows:Identifier>
8.407255143796787
5714207.0 2.0184047248447325E7
512
512
524288
2995464




这是geoserver中自定义网格集后geowebcache.xml中的

EPSG:4498x2

4498



2.0184047248447325E7
2103881.962779923
2.0815952751552675E7
5714206.250336334


false

1234.1904357526364
617.0952178763182
308.5476089381591
154.27380446907955
77.13690223453978
38.56845111726989
19.284225558634944
9.642112779317472
4.821056389658736
2.410528194829368
1.205264097414684
0.602632048707342
0.301316024353671
0.1506580121768355
0.0753290060884177
0.0376645030442089
0.0188322515221044
0.0094161257610522
0.0047080628805261
0.0023540314402631

1.0
2.8E-4

EPSG:4498x2:0
EPSG:4498x2:1
EPSG:4498x2:2
EPSG:4498x2:3
EPSG:4498x2:4
EPSG:4498x2:5
EPSG:4498x2:6
EPSG:4498x2:7
EPSG:4498x2:8
EPSG:4498x2:9
EPSG:4498x2:10
EPSG:4498x2:11
EPSG:4498x2:12
EPSG:4498x2:13
EPSG:4498x2:14
EPSG:4498x2:15
EPSG:4498x2:16
EPSG:4498x2:17
EPSG:4498x2:18
EPSG:4498x2:19

512
512
true

你现在得现象是什么,wmts getTile请求是否发出,回来得是否是512得瓦片?

能否提供在线的wmts服务地址

你现在得现象是什么,wmts getTile请求是否发出,回来得是否是512得瓦片?

返回的瓦片不在范围内,我们数据涉密,不能提供在线的

没有能调试的服务,我只能猜测下问题原因:

通过你设置的bounds :2.0184047248447325E7,2103881.962779923,2.0815952751552675E7,5714206.250336334 可得bounds宽度为631905.5031053498,高度为3610324.287556411。

maplibre-gl-enhance 内部的逻辑为,宽高的最大值/512为第0级的分辨率,即3610324.287556411/512=7051.414624133616。r然后用bounds的左上角和计算出的第0级分辨率,构建瓦片金字塔。

但是该WMTS服务的0级分辨率为1234.1904357526364。这可能就是无法请求到正确瓦片的原因,并不是去请求了256的瓦片 。

你提供的WMTS的Capabilities的内容格式错乱了,猜测其中的5714352.0 2.0184047248447325E7是TopLeftCorner,即该WMTS服务的瓦片左上角。根据前面提到的maplibre-gl-enhance 内部的逻辑,要让maplibre-gl-enhance内部的瓦片金字塔与你的WMTS服务的瓦片金字塔匹配,new CRS的bounds左上角需要是TopLeftCorner的值,即bounds应该调整为2.0184047248447325E7,2103881.962779923,2.0815952751552675E7,5714352.0

maplibre-gl-enhance目前不支持自定义级别对应的分辨率。所以为了能出图只有尝试修改new CRS的bounds,让mapboxgl-enhance内部计算的瓦片金字塔0级分辨率与WMTS的0级分辨率对应上。在左上角固定的前提下,WMTS服务的第0级分辨率为1234.1904357526364,可知bounds的最大宽高都应该为1234.1904357526364*512=631905.5031053498。那bounds应该调整为2.0184047248447325E7,5082446.49689465,20815952.751552675,5714352.0。

这个bounds和本身服务的bounds差别很大,需要确定是否能完全包含你的数据,如果没有完全包含的话,就会出现地图加载不完整的情况。

综上:如果根据我的解释计算出的bounds能概括你的数据范围,可以尝试加载。如果没有完全包含,那目前maplibre-gl-enhance无法加载你提供的这个服务。

maplibre-gl-enhance支持自定义级别对应的分辨率的功能我们正在规划中。

不知道我解释的清不清楚,如需更详细交流可以拨打我们的技术支持电话400-8900-866。我们的技术团队会在电话中为您提供一对一的服务,确保您的问题得到妥善解决。