Arcgis自带有很多的layer,一般来说,可以直接使用,但是在某些特殊的情况下,自带的就无法满足我们的需求了
下面是我最近所使用到的两种自定义layer的实现及使用
一、历史影像
继承的是ArcGISTiledMapServiceLayer
首先我们需要知道,继承layer需要实现哪些方法
第一个构造方法这个不用说
第二个getTile,这个方法是必须的,用于获取添加的图片文件或bundle文件的二进制数组
第三个可以选择,实现initLayer,用于初始化时进行的一些操作
先看一下整体代码
public class ArcGISTimeSpaceLayer extends ArcGISTiledMapServiceLayer {
private String mUrl = null;
private String mTime = null;
public ArcGISTimeSpaceLayer(String time, String url) {
super(url);
this.mTime = time;
this.mUrl = url;
this.init();
}
private void init() {
try {
getServiceExecutor().submit(new Runnable() {
public void run() {
ArcGISTimeSpaceLayer.this.initLayer();
}
});
} catch (RejectedExecutionException rejectedexecutionexception) {
Log.e("ArcGIS", "initialization of the layer failed.", rejectedexecutionexception);
}
}
@Override
protected byte[] getTile(int level, int col, int row) throws Exception {
byte[] result = null;
try {
URL url = new URL(mUrl + "/exts/TimeSpatialTileRestSOE/getTileOperation?" + "&time=" + mTime + "&level=" + level + "&row=" + row
+ "&col=" + col + "&f=png" + "&username=" + "&key=");
byte[] buf = new byte[1024];
HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();
httpConnection.connect();
BufferedInputStream is = new BufferedInputStream(httpConnection.getInputStream());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int temp = -1;
while ((temp = is.read(buf)) > 0) {
bos.write(buf, 0, temp);
}
is.close();
httpConnec