Android 加载天地图

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1620712.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

天地图各级比例尺

国家地理信息公共服务平台天地图 在实际调用中发现国际级可用的为1到18级 &#xff0c;点击省市服务可放大到20级&#xff0c;以下提供1到20级的比例尺供大家参考。 天地图 4.0 API 点击省市服务可放大到20级 L1 1:295829355.45456564 L2 1:147914677.7272828…

OpenLayers集成天地图

1、安装OpenLayers 使用以下方式将OpenLayers添加为对您的应用程序的依赖 npm i -S ol 此时&#xff0c;您可以要求NPM通过运行以下命令来添加所需的开发依赖项 npm i --save-dev parcel-bundler 2、注册天地图 注册地址&#xff1a;https://uums.tianditu.gov.cn/registe…

天地图之自定义标记点

需求&#xff1a;在地图上标记监控点位&#xff0c;地图引入的过程就不多啰嗦&#xff0c;可参考此专栏前几篇文章&#xff0c;下面直接介绍实现步骤 1.绘制标记点&#xff08;如果多个点则需要放到循环体循环渲染&#xff09; 点的坐标 var position new T.LngLat(经度, 纬…

java+天地图,天地图开发之Android-天地图显示

最近开始学Android地图开发&#xff0c;由于做天地图api的人不多&#xff0c;想把自己这一段时间的劳动成果分享给大家&#xff0c;顺便可以一起学习。我用的版本是天地图移动API(Android)V2.1版。 1.下载天地图移动API库 2.第一个天地图map应用 第一步&#xff1a;在工程里新建…

Cesium调用天地图的新问题

在开发CSTK 的过程中&#xff0c;尝试在Cesium上加载天地图&#xff0c;这个过程在2021年的年中已经解决了。 使用了网上的代码 viewer new Viewer("cesiumContainer", {// imageryProvider: imageryProvider,// imageryProvider: imgMap,baseLayerPicker: hasBase…

【天地图】使用天地图api绘制GeoJson数据

天地图没有直接提供加载GeoJson数据或者文件的api,但是我们可以借助绘制多边形的方式实现 1 实现效果 绘制如下的矢量多边形效果&#xff1b; 2 实现技术 (1) 首先用ajax请求geojson文件&#xff0c;从文件解析并获取到坐标数据 下面这个方法就是解析geojson返回的featurecol…

【自学笔记】天地图添加标注

知识点 MarkTool类&#xff1a;标注工具&#xff0c;用来让用户在地图上标注一个点&#xff0c;可以通过该工具获得用户标点的经纬度位置。构造函数&#xff1a;MarkTool(map:Map[,opts:MarkToolOptions])。参数说明&#xff1a;map为地图对象&#xff1b;opts&#xff1a;Mar…

离线地图最终解决方案

离线地图最终解决方案 前言 ​ 能找到这个帖子的朋友应该是公司要求做离线地图,但是没了解过的吧,我前一段也是公司要求做离线地图但是我没了解过,我就去搜了很多文章,找了很多方案,最后和leader定下来了两个方案,一个是使用一张固定缩放的图片,然后将像素转化为px来做…

天地图入门使用

“天地图”是国家测绘地理信息局建设的地理信息综合服务网站。集成了来自国家、省、市&#xff08;县&#xff09;各级测绘地理信息部门&#xff0c;以及相关政府部门、企事业单位 、社会团体、公众的地理信息公共服务资源&#xff0c;如果做的项目是政府部门、企事业单位尽量选…

javaee spring 自动注入,如果满足条件的类有多个如何区别

如图IDrinkDao有两个实现类 方法一 方法二 Resource(name“对象名”) Resource(name"oracleDrinkDao") private IDrinkDao drinkDao;

如何手动添加 WIFI 网络步骤

电脑手动添加WiFi网络步骤&#xff1a; 1.右键控制面板 2.进入控制面板 3.进入网络和Internet&#xff0c;点击设置新的连接或网络 4.点击手动连接到无线网络 5.输入网络SSID及秘钥 若需要自动连接请勾选自动启动此连接。 若WiFi不广播也自动连接请勾选即使网络未进行广播也连接…

【电脑设置wifi大揭秘】随身wifi怎么用?

随身wifi什么&#xff1f;一句话就是一种迷你版无线路由器&#xff0c;安装在台式机上也可充当无线网卡。目前&#xff0c;市面上的随身wifi有小度wifi、360随身wifi、wifi宝等。作为线上入口&#xff0c;互联网大佬们自然不会放手。 一、随身WiFi怎么用&#xff1f; 实际上&am…

计算机wifi怎么打不开,设置wifi的网址打不开怎么办?

问&#xff1a;设置wifi的网址(网站)打不开&#xff0c;无法对wifi进行设置&#xff0c;请问怎么解决这个问题&#xff1f; 答&#xff1a;wifi的设置网址打不开&#xff0c;多半是你操作有误引起的&#xff0c;极少数情况下是wifi路由器有问题导致的&#xff0c;这个问题的解决…

Windows下用某品牌随身WiFi搭建一个钓鱼热点

*本文原创作者&#xff1a;Leslie___Cheung &#xff0c;本文属于原创博客&#xff0c;未经许可禁止转载。 *本文内容仅代表作者观点且只做测试展示&#xff0c;目的是提醒读者注意 WiFi 联网安全&#xff0c;严禁将内容用于不法用途。 目录 前言 01 搭建过程 第一步&a…

随身wifi折腾日记 (刷armbian搭建服务器,内网穿透部署网站)

随身wifi折腾日记 跳转博客,观感更佳 商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 For commercial use, please contact the author for authorization. For non-commercial use, please indicate the source. 协议(License)&#xff1a;署名-非商业性使用-…

网络基础 ----------- 电脑设置为wifi站点

在上大学的时候最难受的就是&#xff0c;没有无线&#xff0c;但是电脑有宽带&#xff0c;那么怎么将电脑变成路由器哪 1、首先查看你的无线网卡是否支持开无线 通过命令win R 快捷件进入命令窗口输入 &#xff1a; 、 netsh wlan show drivers //查看你的无线网卡是否支持…

把电脑设置为免费的WIFI热点

你还以为那些网络上的免费WIFI软件有多么神奇吗&#xff1f;你还在想用电脑WIFI却不想使用那些“流氓软件”而纠结吗&#xff1f;本篇以尽可能简单的方式&#xff0c;教你如何【靠自己】来把电脑设置为WIFI热点。&#xff08;哈哈&#xff0c;从此以后麻麻再也不用担心我会被流…

网络基础 ----------- 电脑设置为wifi站点

在上大学的时候最难受的就是&#xff0c;没有无线&#xff0c;但是电脑有宽带&#xff0c;那么怎么将电脑变成路由器哪 1、首先查看你的无线网卡是否支持开无线 通过命令win R 快捷件进入命令窗口输入 &#xff1a; 、 netsh wlan show drivers //查看你的无线网卡是否支…

笔记本电脑无线Wifi热点设置工具

这个不是C语言&#xff0c;是批处理命令行了&#xff0c;本身在Win7以上的系统内&#xff0c;笔记本电脑内置的无线网卡就可以被虚拟成无线Wifi热点&#xff0c;而不需要那些小软件&#xff0c;自己本身就可以DIY&#xff0c;就写了一个&#xff0c;还是很有实用价值的&#xf…

新的计算机的wifi连接无线网络连接,如何设置电脑优先连接无线WIFI网络

办公室网络多的情况下电脑自动连接到一些信号不好的WIFI影响我们正常的办公&#xff0c;手机也是一样的&#xff0c;在多种情况下限制了我们畅游互联网。下面是学习啦小编收集整理的如何设置电脑优先连接无线WIFI网络&#xff0c;希望对大家有帮助~~ 设置电脑优先连接无线WIFI网…