Android  通过ArcGis 来加载天地图,研究了一个星期 整理成了一个小demo,附上部分源码,底部附上源码demo,

package com.luao.arcgisdemo;import android.Manifest;
import android.annotation.SuppressLint;
import android.app.admin.SystemUpdateInfo;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.support.annotation.DrawableRes;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;import com.esri.arcgisruntime.geometry.Point;
import com.esri.arcgisruntime.geometry.SpatialReference;
import com.esri.arcgisruntime.layers.ArcGISTiledLayer;
import com.esri.arcgisruntime.layers.WebTiledLayer;
import com.esri.arcgisruntime.location.LocationDataSource;
import com.esri.arcgisruntime.mapping.ArcGISMap;
import com.esri.arcgisruntime.mapping.view.Graphic;
import com.esri.arcgisruntime.mapping.view.GraphicsOverlay;
import com.esri.arcgisruntime.mapping.view.LocationDisplay;
import com.esri.arcgisruntime.mapping.view.MapView;
import com.esri.arcgisruntime.symbology.PictureMarkerSymbol;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.luao.arcgisdemo.entity.SysUnitInfo;
import com.luao.arcgisdemo.gisutils.ArcGisUtil;
import com.luao.arcgisdemo.gisutils.PermissionUtils;
import com.luao.arcgisdemo.gisutils.SecondActivity;
import com.luao.arcgisdemo.gisutils.TianDiMapUtils;import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;public class MainActivity extends AppCompatActivity  implements PermissionUtils.PermissionCallbacks{private MapView mMapView;private ArcGISMap map;private WebTiledLayer imageBaseMap;private WebTiledLayer imageBaseMapAnno;private WebTiledLayer vectorBaseMap;private WebTiledLayer vectorBaseMapAnno;private WebTiledLayer terrainBaseMap;private WebTiledLayer terrainBaseMapAnno;private Point center;/*** 坐标系*/final SpatialReference wgs84 = SpatialReference.create(4326);/*** 加载的图层*/private ArcGISTiledLayer tiledLayerBaseMap;/*** 图层切换按钮*/private TextView layerChangeBtn;/*** 当前图层*/private int currentLayer;/*** 泵站信息list*/private List<Graphic> graphicListPump;/*** 水厂图层list*/private List<Graphic> graphicListWaterStation;/*** 设备列表*/private List<SysUnitInfo> sysUnitInfos;/*** 泵站图层*/private GraphicsOverlay graphicsOverlayPump;/*** 水清图层*/private GraphicsOverlay graphicsOverlayWaterStation;/*** 功能根据*/private ArcGisUtil arcGisUtil;/*** 点击弹窗*/private TextView calloutContent;private LocationDisplay mLocationDisplay;@RequiresApi(api = Build.VERSION_CODES.M)private static final int REQUEST_PERMISSION_CODE = 0;private String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION};@SuppressLint("NewApi")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mMapView = findViewById(R.id.gis_map);layerChangeBtn = findViewById(R.id.layerChangeBtn);arcGisUtil = new ArcGisUtil(this, mMapView);final SpatialReference SRID_MERCATOR = SpatialReference.create(102100);map = new ArcGISMap(SRID_MERCATOR);center = new Point(106.4360552458, 38.2487400748, SpatialReference.create(4326));imageBaseMap = TianDiMapUtils.getTianDiMap(TianDiMapUtils.MapType.URL_CN_IMAGEBASEMAP);imageBaseMapAnno = TianDiMapUtils.getTianDiMap(TianDiMapUtils.MapType.URL_CN_IMAGEBASEMAP_ANNOTATION);terrainBaseMap = TianDiMapUtils.getTianDiMap(TianDiMapUtils.MapType.URL_CN_TERRAINBASEMAP);terrainBaseMapAnno = TianDiMapUtils.getTianDiMap(TianDiMapUtils.MapType.URL_CN_TERRAINBASEMAP_ANNOTATION);vectorBaseMap = TianDiMapUtils.getTianDiMap(TianDiMapUtils.MapType.URL_CN_VECTORBASEMAP);vectorBaseMapAnno = TianDiMapUtils.getTianDiMap(TianDiMapUtils.MapType.URL_CN_VECTORBASEMAP_ANNOTATION);final List<WebTiledLayer> imageBaseMapLayerList = new ArrayList<>();imageBaseMapLayerList.add(imageBaseMap);imageBaseMapLayerList.add(imageBaseMapAnno);final List<WebTiledLayer> terrainBaseMapLayerList = new ArrayList<>();terrainBaseMapLayerList.add(terrainBaseMap);terrainBaseMapLayerList.add(terrainBaseMapAnno);final List<WebTiledLayer> vectorBaseMapLayerList = new ArrayList<>();vectorBaseMapLayerList.add(vectorBaseMap);vectorBaseMapLayerList.add(vectorBaseMapAnno);map.setMaxScale(TianDiMapUtils.getSCALES()[TianDiMapUtils.getSCALES().length - 1]);mMapView.setMap(map);map.getOperationalLayers().addAll(imageBaseMapLayerList);imageBaseMap.loadAsync();imageBaseMapAnno.loadAsync();terrainBaseMap.loadAsync();terrainBaseMapAnno.loadAsync();vectorBaseMap.loadAsync();vectorBaseMapAnno.loadAsync();if (PermissionUtils.hasPermissions(this, permissions)) {startLocation();} else {PermissionUtils.requestPermissions(this, REQUEST_PERMISSION_CODE, permissions);}layerChangeBtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {map.getOperationalLayers().clear();currentLayer++;switch (currentLayer % 3) {case 0:map.getOperationalLayers().addAll(imageBaseMapLayerList);break;case 1:map.getOperationalLayers().addAll(terrainBaseMapLayerList);break;case 2:map.getOperationalLayers().addAll(vectorBaseMapLayerList);break;default:map.getOperationalLayers().addAll(imageBaseMapLayerList);break;}}});calloutContent = new TextView(this);calloutContent.setTextColor(Color.BLACK);calloutContent.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, SecondActivity.class);startActivity(intent);}});arcGisUtil.setOnClickMapListener(new ArcGisUtil.OnClickMapListener() {@Overridepublic void onClickMap(Graphic graphicsFromLayer, Point point) {Object name = graphicsFromLayer.getAttributes().get("name");if (name != null) {calloutContent.setText(name.toString());arcGisUtil.showPop(calloutContent, point);}}});loadUnitMarkerData();}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);PermissionUtils.onRequestPermissionsResult(requestCode, permissions, grantResults, this);}@Overridepublic void onPermissionsAllGranted(int requestCode, List<String> perms, boolean isAllGranted) {if (isAllGranted) {startLocation();}}@Overridepublic void onPermissionsDenied(int requestCode, List<String> perms) {}private void startLocation() {mLocationDisplay = mMapView.getLocationDisplay();mLocationDisplay.setAutoPanMode(LocationDisplay.AutoPanMode.NAVIGATION);//当我们执行LocationDisplay.startAsync()方法时候,会在地图上显示出我们当前位置mLocationDisplay.startAsync();//获取的点是基于当前地图坐标系的点Point point = mLocationDisplay.getMapLocation();Log.d("xyh1", "point: " + point.toString());//获取基于GPS的位置信息LocationDataSource.Location location = mLocationDisplay.getLocation();//基于WGS84的经纬度坐标。Point point1 = location.getPosition();if (point1 != null) {Log.d("xyh2", "point1: " + point1.toString());}//        //如果要在LocationDisplay里进行位置信息的自动监听,方法也很简单,只需要LocationDisplay.addLocationChangedListener即可
//        mLocationDisplay.addLocationChangedListener(new LocationDisplay.LocationChangedListener() {
//            @Override
//            public void onLocationChanged(LocationDisplay.LocationChangedEvent locationChangedEvent) {
//                LocationDataSource.Location location = locationChangedEvent.getLocation();
//                Log.d("xyh", "onLocationChanged: " + location.getPosition().toString());
//            }
//        });}public static String getOriginalFundData(Context context) {InputStream input = null;try {input = context.getAssets().open("unit.json");String json = convertStreamToString(input);return json;} catch (Exception e) {e.printStackTrace();}return null;}private static String convertStreamToString(java.io.InputStream is) {String s = null;try {Scanner scanner = new Scanner(is, "UTF-8").useDelimiter("\\A");if (scanner.hasNext()) {s = scanner.next();}is.close();} catch (IOException e) {e.printStackTrace();}return s;}/*** 加载地图marker元素数据*/private void loadUnitMarkerData() {String unitDataJson = getOriginalFundData(this);List<SysUnitInfo> sysUnitInfoList = new Gson().fromJson(unitDataJson, new TypeToken<List<SysUnitInfo>>() {}.getType());//添加点graphicsOverlayPump = arcGisUtil.addGraphicsOverlay();graphicsOverlayWaterStation = arcGisUtil.addGraphicsOverlay();PictureMarkerSymbol iconPump = new PictureMarkerSymbol(new BitmapDrawable(changeSize(R.drawable.gis_ic_bengzhan)));PictureMarkerSymbol iconWaterStation = new PictureMarkerSymbol(new BitmapDrawable(changeSize(R.drawable.gis_ic_shuichang)));graphicListPump = new ArrayList<>();graphicListWaterStation = new ArrayList<>();for (SysUnitInfo sysUnitInfo : sysUnitInfoList) {Point point = new Point(sysUnitInfo.getLgtd(), sysUnitInfo.getLttd(), wgs84);HashMap<String, Object> stringStringHashMap = new HashMap<>();stringStringHashMap.put("name", sysUnitInfo.getName());if (sysUnitInfo.getKey1().equals("1")) {graphicListPump.add(new Graphic(point, stringStringHashMap, iconPump));} else if (sysUnitInfo.getKey1().equals("5")) {graphicListWaterStation.add(new Graphic(point, stringStringHashMap, iconWaterStation));}}graphicsOverlayPump.getGraphics().addAll(graphicListPump);graphicsOverlayWaterStation.getGraphics().addAll(graphicListWaterStation);}/*** 移动地图中心** @param point 中心点*/private void moveMapCenter(Point point) {mMapView.setViewpointCenterAsync(point, TianDiMapUtils.getSCALES()[11]);}/*** 图片资源大小不契合,需要缩放** @param drawable 图片资源* @return 新的图片资源*/private Bitmap changeSize(@DrawableRes int drawable) {Bitmap originalBitmap = BitmapFactory.decodeResource(getResources(), drawable);int originalWidth = originalBitmap.getWidth();int originalHeight = originalBitmap.getHeight();int newWidth = 30;int newHeight = 70; // 自定义 高度 暂时没用float scale = ((float) newHeight) / originalHeight;Matrix matrix = new Matrix();matrix.postScale(scale, scale);return Bitmap.createBitmap(originalBitmap, 0, 0,originalWidth, originalHeight, matrix, true);//你的 ImageView}
}

demo下载地址:Android通过Arcgis加载天地图-Android文档类资源-CSDN下载通过Arcgis加载天地图,并且定位到当前,同时可以生成maker,并添加点击事件,,如果地图加载更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/t747515714/48945799

Android 加载天地图相关推荐

  1. Arcgis For Android 加载天地图(拥有缓存功能)

    天地图做为国家发布的地理信息公共服务平台,"天地图"网站装载了覆盖全球的地理信息数据,这些数据以矢量.影像.三维3种模式全方位.多角度展现,可漫游.能缩放,具有多类型全面的地理信息 ...

  2. 天地图 android studio,AndroidStudio 加载 天地图 (2019年后开发授权申请)

    本文主要内容讲述从申请天地图开发授权到AndroidStudio3.0加载天地图官网快速入门Demo的整个过程.对于刚出入AndroidStudio和天地图开发的小白有一定的帮助. 1.申请天地图密钥 ...

  3. arcgis for Android 100.1 在线加载天地图和谷歌地图

    距离上一篇arcgis for Android 已经很久.其实年初的时候就测试了arcgis for Android 100.1版本.搜集网上各篇文章,最后自已测试代码.修改代码.这一篇来讲一下加载在 ...

  4. Android Arcgis入门(12)、加载天地图

    在项目中可以经常需要动态加载一些图层,像投影地图服务.投影地图服务器.其实网上有大量这样的服务,比如天地图官网, . 随便点开一个服务,里面有相关的信息.那如何加载这样图层服务呢. 一.首先感谢这篇博 ...

  5. arcgis android 天地图,Arcgis runtime for Android 100.5 加载天地图

    说明一下,什么时候加载高德地图,什么时候加载天地图 使用原生定位或者使用arcgis提供的LocationDisplay的定位时,需要加载天地图,因为原生定位返回的坐标是wgs84的坐标,而高德地图是 ...

  6. Arcgis for android 加载谷歌、高德和天地图

    1.加载谷歌地图 工具类: package com.chy.google;import com.esri.arcgisruntime.arcgisservices.LevelOfDetail; imp ...

  7. Vue+Openlayers实现加载天地图WMTS服务显示

    场景 Vue中使用Openlayers加载OSM(Open Street Map)显示街道地图: Vue中使用Openlayers加载OSM(Open Street Map)显示街道地图_BADAO_ ...

  8. leaflet加载天地图

    概述: leaflet是一个轻量级的并且开源的地图框架,是由esri发起的,由于其轻量.简单而被大家喜欢,本文带你学习如何在leaflet中加载天地图. 实现: leaflet加载天地图比较简单,做了 ...

  9. 关于 android 加载 res 图片 out of memory 问题 解决 同样适用于 sd卡图片

    2019独角兽企业重金招聘Python工程师标准>>> 发现android 加载res图片如果过多也会崩溃 android 也是使用 Bitmap  bm = BitmapFacto ...

  10. osgEarth3.0 加载天地图

    2.8版本里面有个xyz图层的例子,稍作修改就可以加载天地图的影像图层.在3.0版本中,XYZ , bing 等图层已经被移植到内核中.所以我们直接用XYZ图层来加载天地图即可 XYZImageLay ...

最新文章

  1. 2022-2028年中国高密度聚乙烯(HDPE)行业市场发展调研及投资前景分析报告
  2. Spring-Quartz (一)
  3. 数据结构和算法(03)---栈和队列(c++)
  4. 爆料喽!!!开源日志库Logger的剖析分析
  5. 用HTML写一个仓库管理系统,welcome.html
  6. 计算机一级office操作题题库百度云,不容错过!计算机等级考试题库之一级MS Office操作题与答案...
  7. python样条插值(二)
  8. ORACLE EBS 启用REST服务-1-环境安装篇
  9. 量子力学的计算机模拟,量子力学虚拟试验的MATLAB演示-大学物理-北京师范大学.PDF...
  10. 如何解决电脑桌面图标显示为空白文件?
  11. 生成身份证校验码(c语言)
  12. SQL数据库面试题以及答案(50例题优化版-增加图片):你必知必会的SQL语句练习
  13. c++动态存储空间分配
  14. 《F4+2—团队项目设计完善编码测试》
  15. 使用gn创建HelloWorld工程
  16. 10 条关于 2018 年软件开发的预测,不仅仅是区块链……
  17. python创业公司做什么最赚钱农村_最适合农村的创业项目,成本不超过500块,做好就能快速发家致富...
  18. 群晖NAS备份建议及备份方式
  19. amd6800h安装ubuntu22.04 笔记本休眠花屏解决办法
  20. mpvue开发美团外卖点餐小程序

热门文章

  1. LINUX安装中文字体SimHei
  2. oracle数据库基础知识
  3. 为eclipse3.6安装subversive插件
  4. Python学习第一弹——Python环境搭建
  5. MySQL使用SQL语句修改字段长度、字段名称
  6. JS将16进制颜色转为rgba格式
  7. mysql ocp考试大纲_MySQL OCP考试大纲
  8. MySQL OCP备考
  9. 前端视频截图的方法canvas.drawImage()
  10. 微信公众号发送模版消息 Java实现