OGC wmts服务
注:
- 由于SDK限制,建议加载切片格式为png的wmts服务;
- SDK版本:com.esri.arcgisruntime:arcgis-android:100.9.0
加载代码如下:
import com.esri.arcgisruntime.arcgisservices.LevelOfDetail;
import com.esri.arcgisruntime.arcgisservices.TileInfo;
import com.esri.arcgisruntime.geometry.Envelope;
import com.esri.arcgisruntime.geometry.Point;
import com.esri.arcgisruntime.geometry.SpatialReference;
import com.esri.arcgisruntime.layers.WebTiledLayer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* ArcGIS Android加载标准OGC WMTS服务
*/
public class ArcGISAndroidWMTSLayerClass {
private static final int DPI = 96;
private static final int minZoomLevel = 0;// 地图服务最小层级
private static final int maxZoomLevel = 19;// 地图服务最大层级
private static final int tileWidth = 256;// 瓦片宽度
private static final int tileHeight = 256;// 瓦片高度
private static final SpatialReference SRID_2000 = SpatialReference.create(4490);// 4490坐标系 支持4326 3857坐标系
private static final double X_MIN_2000 = -180;//4490坐标系 4326 3857按实际情况配置
private static final double Y_MIN_2000 = -90;//4490坐标系 4326 3857按实际情况配置
private static final double X_MAX_2000 = 180;//4490坐标系 4326 3857按实际情况配置
private static final double Y_MAX_2000 = 90;//4490坐标系 4326 3857按实际情况配置
private static final Point ORIGIN_2000 = new Point(-180, 90, SRID_2000);//4490坐标系切片原点 4326 3857按实际情况配置
private static final Envelope ENVELOPE_2000 = new Envelope(X_MIN_2000,
Y_MIN_2000,
X_MAX_2000,
Y_MAX_2000,
SRID_2000);
private static final double[] SCALES = {
295497593.05875003, 147748796.52937502,
73874398.264687508, 36937199.132343754,
18468599.566171877, 9234299.7830859385,
4617149.8915429693, 2308574.9457714846,
1154287.4728857423, 577143.73644287116,
288571.86822143558, 144285.93411071779,
72142.967055358895, 36071.483527679447,
18035.741763839724, 9017.8708819198619,
4508.9354409599309, 2254.4677204799655,
1127.23386023998275, 563.616930119991375
};// 4490坐标系0-19层级比例尺 4326 3857按实际情况配置
private static final double[] RESOLUTIONS_2000 = {
0.7031249999891485, 0.35156249999999994,
0.17578124999999997, 0.08789062500000014,
0.04394531250000007, 0.021972656250000007,
0.01098632812500002, 0.00549316406250001,
0.0027465820312500017, 0.0013732910156250009,
0.000686645507812499, 0.0003433227539062495,
0.00017166137695312503, 0.00008583068847656251,
0.000042915344238281406, 0.000021457672119140645,
0.000010728836059570307, 0.000005364418029785169,
2.68220901489257815e-6, 1.341104507446289075e-6 };// 4490坐标系0-19层级分辨率 4326 3857按实际情况配置
public static WebTiledLayer CreateWMTSWebTiledLayer() {
String tilematrixset = "EPSG:4490";//4490坐标系 4326 3857按实际情况配置
String requestStyle = "getTile";
String format = "image/png";//由于SDK限制,建议加载png格式瓦片
WebTiledLayer webTiledLayer = null;
String mainUrl;
TileInfo mainTileInfo;
Envelope mainEnvelope;
try {
mainUrl = "http://{ip}:{port}/tilecache/wmts?layer=0A41D56096E24F2FB08F8A653D8B4CC9" + // 服务地址根据实际情况配置
"&service=wmts" +
"&request=" + requestStyle +
"&version=1.0.0" +
"&format=" + format +
"&STYLE=default" +
"&tilematrixset=" + tilematrixset +
"&tilecol={col}" +
"&tilerow={row}" +
"&tilematrix=" + tilematrixset + "{level}";
List<LevelOfDetail> mainLevelOfDetail = new ArrayList<LevelOfDetail>();
for (int i = minZoomLevel; i <= maxZoomLevel; i++) {
LevelOfDetail item = new LevelOfDetail(i, RESOLUTIONS_2000[i], SCALES[i]);
mainLevelOfDetail.add(item);
}
mainTileInfo = new TileInfo(
DPI,
TileInfo.ImageFormat.PNG,//由于SDK限制,建议加载png格式瓦片
mainLevelOfDetail,
ORIGIN_2000,
ORIGIN_2000.getSpatialReference(),
tileHeight,
tileWidth);
webTiledLayer = new WebTiledLayer(
mainUrl,
mainTileInfo,
ENVELOPE_2000);
webTiledLayer.setName("0A41D56096E24F2FB08F8A653D8B4CC9");// 名称 根据实际情况配置
webTiledLayer.loadAsync();
} catch (Exception e) {
e.getCause();
}
return webTiledLayer;
}
}