Arcgis for android 如何重写TiledServiceLayer 实现谷歌地图的访问 你好,你解决这个问题了没有,我也在做这一块的APP但也不能接到天地图 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我已经实现了,呵呵~要重写他的gettile方法,定义一些常规的变量值 @Override protected byte[] getTile(int level, int col, int row) throws Exception { return com.esri.core.internal.b.a.a.a(this.getTianDiMapUrl(level, col, row), null,d()); } private com.esri.core.internal.b.a.i d() { // TODO Auto-generated method stub return null; } 10.1.1版本没有com.esri.core.internal.b这个包了。 转:[GoogleMapLayerTypes .java]package com.test;public interface GoogleMapLayerTypes { /** * 谷歌矢量地图服务 ======市政图*/ final int VECTOR_GOOGLE_MAP = 1; /** * 谷歌影像地图服务 ====== 卫星图 */ final int IMAGE_GOOGLE_MAP = 2; /** * 谷歌地形地图服务=======地形图 */ final int TERRAIN_GOOGLE_MAP = 3; /** * 谷歌道路等POI地图服务 ====纯道路图 */ final int ANNOTATION_GOOGLE_MAP = 4; }[GoogleMapLayer.java]package com.test;import java.util.Map;import java.util.concurrent.RejectedExecutionException;import android.util.Log;import com.esri.android.map.TiledServiceLayer;import com.esri.core.geometry.Envelope;import com.esri.core.geometry.Point;import com.esri.core.geometry.SpatialReference;public class GoogleMapLayer extends TiledServiceLayer { private int minLevel = 0; private int maxLevel = 19; private double[] scales = new double[] { 591657527.591555, 295828763.79577702, 147914381.89788899, 73957190.948944002, 36978595.474472001, 18489297.737236001, 9244648.8686180003, 4622324.4343090001, 2311162.217155, 1155581.108577, 577790.554289, 288895.277144, 144447.638572, 72223.819286, 36111.909643, 18055.954822, 9027.9774109999998, 4513.9887049999998, 2256.994353, 1128.4971760000001 }; private double[] resolutions = new double[] { 156543.03392800014, 78271.516963999937, 39135.758482000092, 19567.879240999919, 9783.9396204999593, 4891.9698102499797, 2445.9849051249898, 1222.9924525624949, 611.49622628138, 305.748113140558, 152.874056570411, 76.4370282850732, 38.2185141425366, 19.1092570712683, 9.55462853563415, 4.7773142679493699, 2.3886571339746849, 1.1943285668550503, 0.59716428355981721, 0.29858214164761665 }; private Point origin = new Point(-20037508.342787, 20037508.342787); private int dpi = 96; private int tileWidth = 256; private int tileHeight = 256; private int GoogleMapLayerType; public GoogleMapLayer(int layerType) { super(true); this.GoogleMapLayerType = layerType; this.init(); } private void init() { try { getServiceExecutor().submit(new Runnable() { public void run() { GoogleMapLayer.this.initLayer(); } }); } catch(RejectedExecutionException rejectedexecutionexception) { Log.e("Google Map Layer", "initialization of the layer failed.", rejectedexecutionexception); } } @Override protected byte[] getTile(int level, int col, int row) throws Exception { // TODO Auto-generated method stub // Log.v(GoogleMapLayer.class.getName(), "level:"+level+" col:"+col+" row:"+row); if (level > maxLevel || level < minLevel) { return new byte[0]; } String s = "Galileo".substring(0, ((3 * col + row) % 8)); String url = ""; switch (GoogleMapLayerType) { case GoogleMapLayerTypes.IMAGE_GOOGLE_MAP: url = "http://mt" + (col % 4) + ".google.com/vt/lyrs=s&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&" + "s=" + s; break; case GoogleMapLayerTypes.VECTOR_GOOGLE_MAP: url = "http://mt" + (col % 4) + ".google.com/vt/lyrs=m@158000000&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&" + "s=" + s; break; case GoogleMapLayerTypes.TERRAIN_GOOGLE_MAP: url = "http://mt" + (col % 4) + ".google.cn/vt/lyrs=t@131,r@227000000&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&" + "s=" + s; break; case GoogleMapLayerTypes.ANNOTATION_GOOGLE_MAP: url = "http://mt" + (col % 4) + ".google.com/vt/imgtp=png32&lyrs=h@169000000&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&" + "s=" + s; // url = "http://mt"+ (col % 4) +".google.cn/vt/lyrs=m@256000000&hl=zh-CN&gl=CN&src=app&x=" + col + "&y=" + row + "&z=" + level + "&s=" + s; break; } Log.v(GoogleMapLayer.class.getName(), "url:"+url); Map<String, String> map = null; return com.esri.core.internal.io.handler.a.a(url, map); } protected void initLayer() { if (getID() == 0L) { nativeHandle = create(); changeStatus(com.esri.android.map.event.OnStatusChangedListener.STATUS .fromInt(-1000)); } else { this.setDefaultSpatialReference(SpatialReference.create(102113)); this.setFullExtent(new Envelope(-22041257.773878, -32673939.6727517, 22041257.773878, 20851350.0432886)); this.setTileInfo(new TileInfo(origin, scales, resolutions, scales.length, dpi, tileWidth, tileHeight)); super.initLayer(); } }}==============================...GoogleMapLayer GOOGLE_VECTOR_Layer = new GoogleMapLayer(GoogleMapLayerTypes.VECTOR_GOOGLE_MAP);map.addLayer(GOOGLE_VECTOR_Layer);....==============================<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />arcgis for android 10.1.1通过 若急用,可以先调用这个接口。 http://www.haoservice.com/docs/20 谁能给个安卓avd完整的下载地址 模拟器间歇性断网 achartengine柱状图中的点击 android一个activity如何通过判定跳转到另外的activity 如何删除监听器 市面上那么多推送平台,为什么大部分开发者都选择华为推送呢? android 世界时区api cocos2dx 程序转换到 eclipse 的 android 报错 intent问题 android 文件流 android 浮层效果 随手指左右拖动显示隐藏层 关于EditView的问题
protected byte[] getTile(int level, int col, int row) throws Exception {
return com.esri.core.internal.b.a.a.a(this.getTianDiMapUrl(level, col, row), null,d());
}
private com.esri.core.internal.b.a.i d() {
// TODO Auto-generated method stub
return null;
}
[GoogleMapLayerTypes .java]
package com.test;public interface GoogleMapLayerTypes { /** * 谷歌矢量地图服务 ======市政图*/
final int VECTOR_GOOGLE_MAP = 1;
/** * 谷歌影像地图服务 ====== 卫星图 */
final int IMAGE_GOOGLE_MAP = 2;
/** * 谷歌地形地图服务=======地形图 */
final int TERRAIN_GOOGLE_MAP = 3;
/** * 谷歌道路等POI地图服务 ====纯道路图 */
final int ANNOTATION_GOOGLE_MAP = 4;
}[GoogleMapLayer.java]
package com.test;import java.util.Map;
import java.util.concurrent.RejectedExecutionException;import android.util.Log;import com.esri.android.map.TiledServiceLayer;
import com.esri.core.geometry.Envelope;
import com.esri.core.geometry.Point;
import com.esri.core.geometry.SpatialReference;public class GoogleMapLayer extends TiledServiceLayer { private int minLevel = 0;
private int maxLevel = 19;
private double[] scales = new double[] { 591657527.591555, 295828763.79577702, 147914381.89788899, 73957190.948944002, 36978595.474472001, 18489297.737236001, 9244648.8686180003, 4622324.4343090001, 2311162.217155, 1155581.108577, 577790.554289, 288895.277144, 144447.638572, 72223.819286, 36111.909643, 18055.954822, 9027.9774109999998, 4513.9887049999998, 2256.994353, 1128.4971760000001 }; private double[] resolutions = new double[] { 156543.03392800014, 78271.516963999937, 39135.758482000092, 19567.879240999919, 9783.9396204999593, 4891.9698102499797, 2445.9849051249898, 1222.9924525624949, 611.49622628138, 305.748113140558, 152.874056570411, 76.4370282850732, 38.2185141425366, 19.1092570712683, 9.55462853563415, 4.7773142679493699, 2.3886571339746849, 1.1943285668550503, 0.59716428355981721, 0.29858214164761665 }; private Point origin = new Point(-20037508.342787, 20037508.342787);
private int dpi = 96;
private int tileWidth = 256;
private int tileHeight = 256;
private int GoogleMapLayerType;
public GoogleMapLayer(int layerType) {
super(true);
this.GoogleMapLayerType = layerType;
this.init();
}
private void init() {
try {
getServiceExecutor().submit(new Runnable() {
public void run() {
GoogleMapLayer.this.initLayer();
}
});
} catch(RejectedExecutionException rejectedexecutionexception) {
Log.e("Google Map Layer", "initialization of the layer failed.",
rejectedexecutionexception);
}
} @Override
protected byte[] getTile(int level, int col, int row) throws Exception {
// TODO Auto-generated method stub
// Log.v(GoogleMapLayer.class.getName(), "level:"+level+" col:"+col+" row:"+row);
if (level > maxLevel || level < minLevel) {
return new byte[0];
}
String s = "Galileo".substring(0, ((3 * col + row) % 8));
String url = "";
switch (GoogleMapLayerType) {
case GoogleMapLayerTypes.IMAGE_GOOGLE_MAP:
url = "http://mt" + (col % 4) + ".google.com/vt/lyrs=s&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&" + "s=" + s;
break;
case GoogleMapLayerTypes.VECTOR_GOOGLE_MAP:
url = "http://mt" + (col % 4) + ".google.com/vt/lyrs=m@158000000&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&" + "s=" + s;
break;
case GoogleMapLayerTypes.TERRAIN_GOOGLE_MAP:
url = "http://mt" + (col % 4) + ".google.cn/vt/lyrs=t@131,r@227000000&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&" + "s=" + s;
break;
case GoogleMapLayerTypes.ANNOTATION_GOOGLE_MAP:
url = "http://mt" + (col % 4) + ".google.com/vt/imgtp=png32&lyrs=h@169000000&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&" + "s=" + s;
// url = "http://mt"+ (col % 4) +".google.cn/vt/lyrs=m@256000000&hl=zh-CN&gl=CN&src=app&x=" + col + "&y=" + row + "&z=" + level + "&s=" + s;
break;
}
Log.v(GoogleMapLayer.class.getName(), "url:"+url);
Map<String, String> map = null;
return com.esri.core.internal.io.handler.a.a(url, map);
} protected void initLayer() {
if (getID() == 0L) {
nativeHandle = create();
changeStatus(com.esri.android.map.event.OnStatusChangedListener.STATUS .fromInt(-1000));
} else {
this.setDefaultSpatialReference(SpatialReference.create(102113));
this.setFullExtent(new Envelope(-22041257.773878, -32673939.6727517, 22041257.773878, 20851350.0432886));
this.setTileInfo(new TileInfo(origin, scales, resolutions, scales.length, dpi, tileWidth, tileHeight));
super.initLayer();
}
}
}
==============================
...
GoogleMapLayer GOOGLE_VECTOR_Layer = new GoogleMapLayer(GoogleMapLayerTypes.VECTOR_GOOGLE_MAP);
map.addLayer(GOOGLE_VECTOR_Layer);
....
==============================
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />arcgis for android 10.1.1通过