重写TiledServiceLayer实现Arcgis访问Mapabc地图服务

本文分享了如何将高德地图服务集成到ArcGIS中,包括代码实现及关键步骤,为开发者提供实用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前有一次用到过高德的地图,当时折腾了好几天才加到Arcgis中,这次把其中的代码分享出来,希望对正在研究这个的朋友们有些帮助
package com.baixin.main;
/**
 * 
 * @ClassName:   MapAbcToArcGISTLayer
 * @Description:    ArcGIS访问MapAbc地图服务
 * @author:        Zrd
 * @version:       v1.0  
 * @Date:          2012-8-11 上午10:18:17 
 */
import java.util.HashMap;
import com.esri.android.map.TiledServiceLayer;
import com.esri.core.geometry.Envelope;
import com.esri.core.geometry.Point;
import com.esri.core.geometry.SpatialReference;
import com.esri.core.internal.b.a.a;


public class MapAbcToArcGISTLayer extends TiledServiceLayer {
	private int WKID = 2436;
	private String layername = null;
    private String layerurl = null;
	private static final double[] c = { 896.0859375, 548.04296875,
			224.02148437, 112.0107421875, 56.00537109375, 28.002685546875,
			14.0013427734375, 7.00067138671875, 3.50033569335937,
			1.75016784667968, 0.875083923339843, 0.4375419616699215,
			0.2187709808349608 };
	private static final double[] d = { 3386781.496062992D, 1693390.748031496D,
			846695.374015748D, 423347.687007874D, 211673.843503937D,
			105836.92175196858D, 52918.46087598425D, 26459.23043799213D,
			13229.61521899604D, 6614.807609498003D, 3307.403804749013D,
			1653.701902374507D, 826.8509511872533D };
	private static final double[] res = { 0.0011159643937610616,
			0.0032319287875221232, 0.0044638575750442465, 0.008927715150088493,
			0.017855430300176986, 0.03571086060035397, 0.07142172120070794,
			0.1428434424014159, 0.2856868848028318, 0.5713737696056635,
			1.143547539211327, 2.287295078422654, 4.574490156845308 };
	public static final int initWithDpi = 96;
	public MapAbcToArcGISTLayer(String layerurl,String layername) {
		super(layerurl);
		this.layerurl = layerurl;
		this.layername = layername;
		initLayer();
	}
	protected void initLayer() {
		if(getID()==0){
			this.nativeHandle = create();
		}
		try {
			SpatialReference localSpatialReference = SpatialReference.create(WKID);
			setDefaultSpatialReference(localSpatialReference);
			Envelope localEnvelope = new Envelope(371987.18333999999D,
					252920.58593D, 624459.12035999994D, 423400.07714000001D);
			setFullExtent(localEnvelope);
			Point localPoint = new Point(0.0D, 458793.07714);
			double[] arrayOfDoublescale = d;
			double[] arrayOfDoubleres = c;
			int k = d.length;
			TiledServiceLayer.TileInfo localTileInfo = new TiledServiceLayer.TileInfo(
					localPoint, arrayOfDoublescale, arrayOfDoubleres, k, 96,
					256, 256);
			setTileInfo(localTileInfo);
			super.initLayer();
			return;
		} catch (Exception localException) {
			localException.printStackTrace();
		}
	}


	@Override
	protected byte[] getTile(int level, int col, int row) throws Exception {
		// TODO Auto-generated method stub
		int nrow  = (int) (Math.floor((458400.07714) * res[level] / 256) - row);
		String strUrl = layerurl + "x=" + col + "&y=" + nrow + "&z=" + level
				+ "&type=ic&layer="+layername+"";
		HashMap<String, String> localHashMap = new HashMap<String, String>();
		byte[] bytes = a.a(strUrl, localHashMap);
		return bytes;
	}
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值