首页 文章 精选 留言 我的

精选列表

搜索[gis],共566篇文章
优秀的个人博客,低调大师

Android GIS开发系列-- 入门季(12) 显示载天地图

在项目中可以经常需要动态加载一些图层,像投影地图服务、投影地图服务器。其实网上有大量这样的服务,比如天地图官网, 。 随便点开一个服务,里面有相关的信息。那如何加载这样图层服务呢。 一、首先感谢这篇博文ArcGIS读取天地图出现错位的情况,这篇文章的下载链接也有许多有用的资料。加载天地图用到一个关键的自定义类TianDiTuLayer View Code 另外还有三个类,TianDiTuLayerInfo、LayerInfoFactory、TianDiTuLayerTypes这里就不贴代码了。资料下载。 二、我们修改一下代码 1.常量类TDTConstant: View Code 2.TianDiTuLayer,代码如下 : View Code 3.TianDiTuInfo实体类: View Code 4.Activity代码: View Code 调用的地图服务相关信息 效果图: 没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。 本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7751990.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android GIS开发系列-- 入门季(9) 定位当前的位置

利用MapView定位当前的位置 这里要用到Arcgis中的LocationDisplayManager这个类,由于比较简单。直接上代码: LocationDisplayManager locationDisplayManager = mMapView.getLocationDisplayManager();//获取定位类 locationDisplayManager.setShowLocation(true); locationDisplayManager.setAutoPanMode(LocationDisplayManager.AutoPanMode.LOCATION);//设置模式 locationDisplayManager.setShowPings(true); locationDisplayManager.start();//开始定位 由于是定位,在AndroidManifest文件中,要添加以下权限: <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 另外如果我们想获取定位点的位置,调用代码:Point point = locationDisplayManager.getPoint();即可获取。 没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。 本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7751967.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android GIS开发系列-- 入门季(2) MapView与图层介绍

一、MapView MapView是Arcgis中的最基本的类,与高德地图SDK的MapView的重要性一样。MapView的创建有两种方法,一种是在Layout文件中直接写控件。一种是实例化,MapView mapView = new MapView(Context context); <com.esri.android.map.MapView android:id="@+id/map" android:layout_width="fill_parent" android:layout_height="fill_parent" /> 1.addLayer(Layerlayer),添加图层。可以添加网络图层与本地图层,tpk文件,shp文件,json数据等。 图层的添加是有顺序的,一层一层叠加,后面的图层会覆盖前面的图层。removeLayer(int index),移除图层。getLayer获取图层,通过顺序id,url地址等获取。 2.setExtent,设置MapView的所显示的范围。 3.zoomin地图缩小,zoomout地图放大。 4.setOnSingleTapListener(OnSingleTapListeneronSingleTapListener),MapView的单击事件,返回的是float screenx, float screeny,屏幕的x与y值,通过toMapPoint(float screenx, float screeny),将屏幕坐标转化为地图坐标。 5.toScreenPoint(Pointsrc),将地图坐标转化屏幕坐标。 6.setOnLongPressListener(OnLongPressListeneronLongPressListener),地图的长按事件,也是返回屏幕的x与y值。 7.getSpatialReference(),获取地图的坐标系,比如84坐标或者是墨卡托等。 8.getLocationDisplayManager(),返回LocationDisplayManager,用于地图定位的显示。 9.getCallout(),返回Callout对象,用于显示气泡弹出 二、图层 Arcgis中的图层有许多,下面是图层的关系表。主要的图层有DynamicLayer,FeatureLayer,GraphicsLayer,GroupLayer,KmlLayer,RasterLayer,TiledLayer。 ,下面的主要来介绍一下Arcgis的主要图层。 1.GraphicLayer,图形图层,只有一个子类ArcGISFeatureLayer。用户通过这个图层可以在MapView中自形绘制要素,通过样式与色彩绘制点、线、面。 2.TiledLayer,切片图层,子类有ArcGISLocalTiledLayer,TiledServiceLayer。ArcGISLocalTiledLayer可以加载本地的tpk文件与切片图层,通过其子类ArcGISTiledMapServiceLayer加载网络的切片图层。 下面的主要来介绍一下Arcgis的主要图层。 1.GraphicLayer,图形图层,只有一个子类ArcGISFeatureLayer。用户通过这个图层可以在MapView中自形绘制要素,通过样式与色彩绘制点、线、面。 2.TiledLayer,切片图层,子类有ArcGISLocalTiledLayer,TiledServiceLayer。ArcGISLocalTiledLayer可以加载本地的tpk文件与切片图层,通过其子类ArcGISTiledMapServiceLayer加载网络的切片图层。 ArcGISLocalTiledLayerlocal=newArcGISLocalTiledLayer("/sdcard/<CacheName>/Layers"); ArcGISLocalTiledLayerlocal=newArcGISLocalTiledLayer("/sdcard/<CacheName>.tpk"); 3.FeatureLayer,要素图层,没有子类,可加载本地shp文件。通过要素的特性,快速查询具体的要素信息。加载快速。 4.DynamicLayer,动态图层。主要有子类ArcGISDynamicMapServiceLayer,ArcGISImageServiceLayer, WMSLayer。前面两个用来加载网络动态图层与网络图像图层。 没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。 本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7751847.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android GIS开发系列-- 入门季(15) 网络图层加载

一、首先我们来看一个网络图层: http://services.arcgisonline.com/arcgis/rest/services/World_Street_Map/MapServer,这是全球街道图。加载的代码也很简单: private static final String WORLD_STREETS_URL = "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"; private MapView mMapView = null; private ArcGISTiledMapServiceLayer mWorldStreetsLayer = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mMapView = (MapView) findViewById(R.id.map_view); mWorldStreetsLayer = new ArcGISTiledMapServiceLayer(WORLD_STREETS_URL); mMapView.addLayer(mWorldStreetsLayer); mWorldStreetsLayer.setOnStatusChangedListener(new OnStatusChangedListener() { @Override public void onStatusChanged(Object o, STATUS status) { if (status==STATUS.INITIALIZED){ Log.i("huang","加载成功"); }else if(status==STATUS.INITIALIZATION_FAILED||status==STATUS.LAYER_LOADING_FAILED){ Log.i("huang","加载失败"); } } }); } 效果图 问:为什么用ArcGISTiledMapServiceLayer 加载而不用其他图层加载呢? 用浏览器打开http://services.arcgisonline.com/arcgis/rest/services/World_Street_Map/MapServer,可以看到详细信息。 它的子图层只有一个: 下面是坐标信息,注意Single Fused Map Cache: true,支持缓存。 与Tile Info信息, 通过信息说明这是一个TiledLayer,而ArcGISTiledMapServiceLayer是TiledLayer子类的子类,看一下ArcGISTiledMapServiceLayer的介绍。 点开World Street Map链接,http://services.arcgisonline.com/arcgis/rest/services/World_Street_Map/MapServer/0,这是它的唯一子图层。真正加载的也是这个图层 Type虽然说是FeatureLayer,但它得用ArcGISFeatureLayer加载。 ArcGISFeatureLayer arcGISFeatureLayer = new ArcGISFeatureLayer(WORLD_STREETS_URL+"/0", ArcGISFeatureLayer.MODE.ONDEMAND); SimpleFillSymbol simpleFillSymbol = new SimpleFillSymbol(Color.argb(0,0,0,0),SimpleFillSymbol.STYLE.SOLID); mMapView.addLayer(arcGISFeatureLayer); arcGISFeatureLayer.setRenderer(new SimpleRenderer(simpleFillSymbol)); arcGISFeatureLayer.setOnStatusChangedListener(new OnStatusChangedListener() { @Override public void onStatusChanged(Object o, STATUS status) { if (status==STATUS.INITIALIZED){ Log.i("huang","加载成功"); }else if(status==STATUS.INITIALIZATION_FAILED||status==STATUS.LAYER_LOADING_FAILED){ Log.i("huang","加载失败"); } } }); 上面虽然加载成功,但并看不到图层,而且报错: FeatureSetCallback.onError com.esri.core.io.EsriServiceException: Requested operation is not supported by this service. The requested capability is not supported. 仔细再看网络信息, 大体上知道为什么报 The requested capability is not supported。也就是不能用这种方法加载,而得用前面的代码加载!!! ArcGISDynamicMapServiceLayer 服务地址:http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer,这是美国的高铁图。 用浏览器打开,有三个子图层,Single Fused Map Cache: false! 下面是ArcGISDynamicMapServiceLayer的介绍: 加载代码 : private static final String DYNAMIC_USA_HIGHWAY_URL = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer"; private ArcGISDynamicMapServiceLayer usaHighwayLayer = null; private MapView mMapView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mMapView = (MapView) findViewById(R.id.map_view); usaHighwayLayer = new ArcGISDynamicMapServiceLayer(DYNAMIC_USA_HIGHWAY_URL); mMapView.addLayer(usaHighwayLayer); usaHighwayLayer.setOnStatusChangedListener(new OnStatusChangedListener() { @Override public void onStatusChanged(Object o, STATUS status) { if (status==STATUS.INITIALIZED){ Log.i("huang","加载成功"); }else if(status==STATUS.INITIALIZATION_FAILED||status==STATUS.LAYER_LOADING_FAILED){ Log.i("huang","加载失败"); } } });} 效果图 二、ArcGISFeatureLayer加载图层 服务地图http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/0,也就是上面服务的子图层。 ArcGISFeatureLayer arcGISFeatureLayer = new ArcGISFeatureLayer("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/0", ArcGISFeatureLayer.MODE.ONDEMAND); mMapView.addLayer(arcGISFeatureLayer); arcGISFeatureLayer.setRenderer(new SimpleRenderer(new SimpleLineSymbol(Color.argb(250, 52, 17, 255),2))); arcGISFeatureLayer.setOnStatusChangedListener(new OnStatusChangedListener() { @Override public void onStatusChanged(Object o, STATUS status) { if (status==STATUS.INITIALIZED){ Log.i("huang","加载成功"); }else if(status==STATUS.INITIALIZATION_FAILED||status==STATUS.LAYER_LOADING_FAILED){ Log.i("huang","加载失败"); } } }); 注意要设置setRenderer,效果 ArcGISFeatureLayer 具有FeatureLayer的一些查询方法,与前面几讲里FeatureLayer查询相似,这里不再讲了。 //查询要素方法 queryIds(Query query, CallbackListener<int[]> callback) queryFeatures(Query query, CallbackListener<FeatureSet> callback) 在http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/0,页面底部, 点击Query进入查询要素界面,可直接 查询要素 where 1=1,点击Query(GET),可得到以下结果集 没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。 本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7752063.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android GIS开发系列-- 入门季(11) Callout气泡的显示

一、气泡的简单显示 首先我们要获取MapView中的气泡,通过MapView的getCallout()方法获取一个气泡。看一下Callout的简单介绍: 大体的意思是通过MapView获取Callout,可以设置它的内容View,大小,显示的方位等。 写一个简单的测试: public class MainActivity extends Activity { private MapView mapView; private static final String TILED_WORLD_STREETS_URL = "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"; private Callout callout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mapView = (MapView) findViewById(R.id.map_view); //添加一个基础的底图 mapView.addLayer(new ArcGISTiledMapServiceLayer(TILED_WORLD_STREETS_URL)); //地图点击事件 mapView.setOnSingleTapListener(new OnSingleTapListener() { @Override public void onSingleTap(float x, float y) { //屏幕坐标转地图坐标 Point point = mapView.toMapPoint(x,y); //设置显示位置 callout.show(point); } }); initCallout(); } private void initCallout() { //获取一个气泡 callout = mapView.getCallout(); //设置最大的长宽 callout.setMaxWidth(1200); callout.setMaxHeight(300); TextView tv = new TextView(this); tv.setText("这是一个气泡"); callout.setContent(tv); CalloutStyle calloutStyle = new CalloutStyle(); //设置尖尖角的位置,尖尖显示在气泡的左下角, calloutStyle.setAnchor(Callout.ANCHOR_POSITION_LOWER_LEFT_CORNER); callout.setStyle(calloutStyle); } } 显示的效果图如下: 二、通过xml方式设置Callout的Style 新建一个xml放在res/xml下,例如: <?xml version="1.0" encoding="utf-8"?> <resources> <calloutViewStyle anchor="5" backgroundAlpha="255" backgroundColor="#ffffff" cornerCurveDp="20" frameColor="#000000" maxHeightDp="300" maxWidthDp="500" /> </resources> 只需调用callout.setStyle方法来设置。 没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。 本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7751976.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android GIS开发系列-- 入门季(13)Gdal简单写个shp文件

Gdal是用来读写栅格与矢量数据的,在Gdal官网,可以下载相关的资源进行平台的编译。其实Arcgis底层也是用Gdal来读取shp文件的,那在Android中可以直接读写shp文件吗,是可以的。这里已经有人编译了Android端的so ,下载地址。也可以自己尝试编译相关so。 新建项目,将下载的so 与相关资源导入,相关目录结构如下: 注意gdal的相关包名不要修改,避免so读取不到相应的类。 简单写个shp,注意导包,要导入org.gdal下面相关的类: private void writeShp() throws UnsupportedEncodingException { //存放路径 String shpPath = basePath + "/my_line.shp"; ogr.RegisterAll(); gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "NO"); // 不支持中文 gdal.SetConfigOption("SHAPE_ENCODING", ""); String strDriverName = "ESRI Shapefile"; org.gdal.ogr.Driver oDriver = ogr.GetDriverByName(strDriverName); if (oDriver == null) { System.out.println(" 驱动不可用!\n"); return; } // 创建数据源 DataSource oDS = oDriver.CreateDataSource(shpPath, null); if (oDS == null) { return; } // 创建一个84坐标系的图层 org.gdal.osr.SpatialReference sap = new org.gdal.osr.SpatialReference(); sap.SetWellKnownGeogCS("WGS84"); Layer oLayer = oDS .CreateLayer("TestPolygon", sap, ogr.wkbPolygon, null); if (oLayer == null) { System.out.println("图层创建失败!\n"); return; } // 下面创建属性表 // 先创建一个叫FieldID的整型属性 FieldDefn oFieldID = new FieldDefn("ID", ogr.OFTInteger); oLayer.CreateField(oFieldID, 1); // 再创建一个叫FeatureName的字符型属性,字符长度为50 FieldDefn oFieldName = new FieldDefn("name", ogr.OFTString); oFieldName.SetWidth(100); oLayer.CreateField(oFieldName, 1); FeatureDefn oDefn = oLayer.GetLayerDefn(); // 创建要素 Feature oFeatureTriangle = new Feature(oDefn); oFeatureTriangle.SetField(0, 0); oFeatureTriangle.SetField(1, "test"); Geometry geomTriangle = Geometry .CreateFromWkt("POLYGON ((112 45,112 30,140 30))"); oFeatureTriangle.SetGeometry(geomTriangle); oLayer.CreateFeature(oFeatureTriangle); //同步到文件中,一定要写 oLayer.SyncToDisk(); } 用Arcgis MapView加载shp文件效果: Gdal Java相关Api 没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。 本文转自wenglabs博客园博客,原文链接http://www.cnblogs.com/arxive/p/7751997.html :,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android GIS开发系列-- 入门季(4) GraphicsLayer的点击查询要素

上一讲中我们学会了如何在MapView中添加Graphic要素,那么在百度或高德地图中,当我们点击要素时,会显示出相应的详细信息。在GraphicsLayer中也提供了这样的方法。下面我们来学习在GraphicsLayer中如何点击查找要素。首先在MapView中添加两个Graphic要素。代码如下,注意这里用Graphic(Geometrygeometry,Symbolsymbol, Map<String,Object> attributes)来实例化Graphic,Map<String,Object> attributes是要素的属性值。详细见以下代码。TILED_WORLD_STREETS_URL为网络图层地址。 privatevoidinitLayer(){ mapView.addLayer(newArcGISTiledMapServiceLayer( TILED_WORLD_STREETS_URL)); graphicsLayer=newGraphicsLayer(); mapView.addLayer(graphicsLayer); Polygonpolygon=newPolygon(); polygon.startPath(newPoint(1.2575908509778766E7,2879410.9266042486)); polygon.lineTo(newPoint(1.284360696117901E7,3021972.232083669)); polygon.lineTo(newPoint(1.2826182801620414E7,2713089.403544925)); Map<String,Object>attr1=newHashMap<>(); attr1.put("name","广州"); attr1.put("mark","广州是南方的城市"); Graphicgraphic1=newGraphic(polygon,newSimpleFillSymbol(Color.RED),attr1); graphicsLayer.addGraphic(graphic1); Polygonpolygon2=newPolygon(); polygon2.startPath(newPoint(1.3388507951011453E7,3611225.628065273)); polygon2.lineTo(newPoint(1.3607101952746565E7,3858331.890896268)); polygon2.lineTo(newPoint(1.3613438010767872E7,3449656.14852193)); Map<String,Object>attr2=newHashMap<>(); attr2.put("name","上海"); attr2.put("mark","上海是中部的城市"); Graphicgraphic2=newGraphic(polygon2,newSimpleFillSymbol(Color.GREEN),attr2); graphicsLayer.addGraphic(graphic2); } 效果图如下: 准备工作完成后,设置MapView的点击事件, mapView.setOnSingleTapListener(newOnSingleTapListener(){ @Override publicvoidonSingleTap(floatx,floaty){ //TODOAuto-generatedmethodstub handleSingleTap(x,y); } }); 在handleSingleTap方法中来处理查询事件,GraphicsLayer查询要用到getGraphicIDs(float x, float y, int tolerance, int numberOfResults)或者getGraphicIDs(float x, float y, int tolerance)方法,前面两个参数是地图点击时的 x与y的值,tolerance是围绕x与y这个点所查询的范围,numberOfResults是要返回结果的大小。 /** *GraphicsLayer的点击查询 *@paramx *@paramy */ protectedvoidhandleSingleTap(floatx,floaty){ int[]graphicIds=graphicsLayer.getGraphicIDs(x,y,8); if(graphicIds!=null&&graphicIds.length>0){ for(inti=0;i<graphicIds.length;i++){ Graphicgraphic=graphicsLayer.getGraphic(graphicIds[i]); Map<String,Object>attr=graphic.getAttributes(); Log.i(TAG,attr.get("name")+"===="+attr.get("mark")); } } }这样当我们点击要素时,会打出以下的信息。 没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。 本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7751872.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android GIS开发系列-- 入门季(3) GraphicsLayer添加点、线、面

GraphicsLayer是图形图层,可以自定义图形添加到地图上。调用GraphicsLayer的addGraphic方法就能添加图形,此方法要一个Graphic对象,此对象的构造方法是Graphic(Geometrygeometry,Symbolsymbol),前面第一个是要素,而Geometry的子类有Envelope,MultiPath,MultiPoint,Point,Segment,Line,Polygon,Polyline。我们所常用的有点Point,线Polyline,面Polygon。而后面一 个参数是样式,点的样式是SimpleMarkerSymbol,线的样式是SimpleLineSymbol,面的样式是SimpleFillSymbol。 一、GraphicsLayer添加点: Graphicgraphic=newGraphic(point,newSimpleMarkerSymbol(Color.RED,5,SimpleMarkerSymbol.STYLE.CIRCLE)); graphicsLayer.addGraphic(graphic); 二、添加线,样式有实线、虚线、点虚线、点点虚线、点线等。效果图如下: Polylinepolyline=newPolyline(); polyline.startPath(newPoint(113,23));//第一个点用startPath,后面的点用lineTo方法 polyline.lineTo(newPoint(123,23)); graphic=newGraphic(polyline,newSimpleLineSymbol(Color.RED,3,SimpleLineSymbol.STYLE.SOLID)); graphicsLayer.addGraphic(graphic); 三、添加面Polygon,效果图如下: Polygonpolygon=newPolygon(); //第一个点startPath,后面的点用lineTo polygon.startPath(newPoint(118,23)); polygon.lineTo(newPoint(118,15)); polygon.lineTo(newPoint(113,13)); graphic=newGraphic(polygon,newSimpleFillSymbol(Color.GREEN,SimpleFillSymbol.STYLE.SOLID)); graphicsLayer.addGraphic(graphic); Code for all: packagecom.arcgis.test; importandroid.graphics.Color; importandroid.os.Bundle; importandroid.support.annotation.Nullable; importandroid.support.v7.app.AppCompatActivity; importandroid.view.View; importandroid.widget.AdapterView; importandroid.widget.Button; importandroid.widget.Spinner; importcom.esri.android.map.GraphicsLayer; importcom.esri.android.map.MapView; importcom.esri.android.map.ags.ArcGISTiledMapServiceLayer; importcom.esri.android.map.event.OnSingleTapListener; importcom.esri.core.geometry.Point; importcom.esri.core.geometry.Polygon; importcom.esri.core.geometry.Polyline; importcom.esri.core.map.Graphic; importcom.esri.core.symbol.SimpleFillSymbol; importcom.esri.core.symbol.SimpleLineSymbol; importcom.esri.core.symbol.SimpleMarkerSymbol; importjava.util.ArrayList; importjava.util.List; publicclassGraphicActivityextendsAppCompatActivity{ privateMapViewmMapView; privateSpinnergraphicTypeSpinner; privateButtonclernBtn; privateArcGISTiledMapServiceLayerarcGISTiledMapServiceLayer; privateGraphicsLayergraphicsLayer; privateStringmapServerUrl="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"; //点集合 privateList<Point>pointList=newArrayList<>(); privateGraphicgraphic; @Override protectedvoidonCreate(@NullableBundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_graphic); initView(); addLayer(); } privatevoidinitView(){ mMapView=(MapView)findViewById(R.id.map_view); //mapview点击事件 mMapView.setOnSingleTapListener(newOnSingleTapListener(){ @Override publicvoidonSingleTap(floatx,floaty){ handleSingleTap(x,y); } }); graphicTypeSpinner=(Spinner)findViewById(R.id.spinner_type); graphicTypeSpinner.setOnItemSelectedListener(newAdapterView.OnItemSelectedListener(){ @Override publicvoidonItemSelected(AdapterView<?>parent,Viewview,intposition,longid){ pointList.removeAll(pointList); graphicsLayer.removeAll(); } @Override publicvoidonNothingSelected(AdapterView<?>parent){ } }); clernBtn=(Button)findViewById(R.id.clear_graphic); clernBtn.setOnClickListener(newView.OnClickListener(){ @Override publicvoidonClick(Viewv){ pointList.removeAll(pointList); graphicsLayer.removeAll(); } }); } privatevoidaddLayer(){ arcGISTiledMapServiceLayer=newArcGISTiledMapServiceLayer(mapServerUrl); mMapView.addLayer(arcGISTiledMapServiceLayer); graphicsLayer=newGraphicsLayer(); mMapView.addLayer(graphicsLayer); } privatevoidhandleSingleTap(floatx,floaty){ Pointpoint=mMapView.toMapPoint(x,y); graphicsLayer.removeAll(); pointList.add(point); Stringtype=graphicTypeSpinner.getSelectedItem().toString().trim(); switch(type){ case"点": graphic=newGraphic(point,newSimpleMarkerSymbol(Color.RED,5,SimpleMarkerSymbol.STYLE.CIRCLE)); graphicsLayer.addGraphic(graphic); break; case"线": Polylinepolyline=newPolyline(); if(pointList.size()>1){ for(inti=0;i<pointList.size();i++){ if(i==0){ polyline.startPath(pointList.get(i)); }else{ polyline.lineTo(pointList.get(i)); } } } graphic=newGraphic(polyline,newSimpleLineSymbol(Color.RED,3,SimpleLineSymbol.STYLE.SOLID)); graphicsLayer.addGraphic(graphic); break; case"面": Polygonpolygon=newPolygon(); for(inti=0;i<pointList.size();i++){ if(i==0){ polygon.startPath(pointList.get(i)); }else{ polygon.lineTo(pointList.get(i)); } } graphic=newGraphic(polygon,newSimpleFillSymbol(Color.GREEN,SimpleFillSymbol.STYLE.SOLID)); graphicsLayer.addGraphic(graphic); break; } } } 没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。 本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7751859.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android GIS开发系列-- 入门季(10) MapView快速定位到Geometry

我们知道某个Geometry的坐标,但不知道具体的位置,该如何使地图快速定位呢?这时需要用到MapView.setExtent方法,来看下这个方法的介绍:Zooms the map to the given geometry so that geometry fits within the bounds of the map.大体的意思即缩小地图定位到Geometry。上代码: public class MainActivity extends Activity { private MapView mapView; private GraphicsLayer graphicsLayer; private static final String TILED_WORLD_STREETS_URL = "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mapView = (MapView) findViewById(R.id.map_view); mapView.addLayer(new ArcGISTiledMapServiceLayer(TILED_WORLD_STREETS_URL)); findViewById(R.id.location).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //快速定位到线 Polyline polyline = new Polyline(); polyline.startPath(new Point(110, 23)); polyline.lineTo(new Point(115, 25)); //由于加载的地图是墨卡托坐标,这里需要转坐标 Polyline polyline2 = (Polyline) GeometryEngine.project(polyline, SpatialReference.create(SpatialReference.WKID_WGS84), SpatialReference .create(SpatialReference.WKID_WGS84_WEB_MERCATOR)); mapView.setExtent(polyline2); } }); initLayer(); } /** * 添加一条线 */ private void initLayer() { graphicsLayer = new GraphicsLayer(); mapView.addLayer(graphicsLayer); Polyline polyline = new Polyline(); polyline.startPath(new Point(110, 23)); polyline.lineTo(new Point(115, 25)); //由于加载的地图是墨卡托坐标,这里需要转坐标 Polyline polyline2 = (Polyline) GeometryEngine.project(polyline, SpatialReference.create(SpatialReference.WKID_WGS84), SpatialReference .create(SpatialReference.WKID_WGS84_WEB_MERCATOR)); graphicsLayer.addGraphic(new Graphic(polyline2, new SimpleLineSymbol( Color.RED, 3, SimpleLineSymbol.STYLE.SOLID))); } } 没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。 本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7751971.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android GIS开发系列-- 入门季(6)GraphicsLayer添加文字与图片标签

一、GraphicsLayer添加图片 GraphicLayer添加图片Graphic,要用到PictureMarkerSymbol,也是样式的一种。添加代码如下: Drawable drawable = getResources().getDrawable(R.mipmap.ic_launcher); PictureMarkerSymbol pictureMarkerSymbol = new PictureMarkerSymbol(this, drawable); Graphic graphic = new Graphic(new Point(113,22), pictureMarkerSymbol); graphicsLayer.addGraphic(graphic); 添加图片效果如下: 二、GraphicsLayer添加文字 GraphicLayer添加文字,要利用TextSymbol。代码如下 TextSymbol textSymbol = new TextSymbol(20,"我是文字" , Color.RED); Graphic graphic = new Graphic(new Point(113,22), textSymbol ); graphicsLayer.addGraphic(graphic); 上面的代码没有设置使用哪种字体,Arcgis会默认的字体。如果 我们想添加中文,要设置textSymbol.setFontFamily("DroidSansFallback.ttf");, 为textSymbol设置字体,arcgis会到system\fonts下找到此字体。但有时我们设置此代码时中文并没有出现,可能会有乱码等,是因为系统的fon ts下面并没有此字体,解决的办法有,将手机root,将DroidSansFallback.ttf字体添加到system\fonts下。华为的手机是有此字体的,而三星5.0以 上则没有此字体,在华为手机上还有一款中文DroidSansChinese.ttf字体arcgis也是支持的。而三星5.0以上的中文字体好像不是ttf字体,而是otf字体 ,Arcgis好像不支持,本人也没有找到好的解决办法。 没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。 本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7751888.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android GIS开发系列-- 入门季(8) Json与Geometry的相互转换

在Android中json数据十分普遍,也很实用,在Arcgis中也同样支持Json数据,Json与Geometry可以相互转换,达到我们想要的数据。 一、Geometry转换成Json数据 这个实现十分简单,比如我们将一个点转换为Json,这时也同样用到GeometryEngine这个强大的类。 Point point = new Point(113, 23); String json = GeometryEngine.geometryToJson(SpatialReference.create(SpatialReference.WKID_WGS84), point); Log.w("TAG", "json===" + json); 打印Log的结果为json==={"x":113.0,"y":23.0,"spatialReference":{"wkid":4326}},是不是很简单。 二、Json转换为Geometry 同样用到GeometryEngine类中的jsonToGeometry方法,我们将上面的json再转换回去。 try { String jsonStr = "{\"x\":113.0,\"y\":23.0,\"spatialReference\":{\"wkid\":4326}}"; JsonFactory jsonFactory = new JsonFactory(); JsonParser jsonParser = jsonFactory.createJsonParser(jsonStr); MapGeometry mapGeometry = GeometryEngine.jsonToGeometry(jsonParser); Point mPoint = (Point) mapGeometry.getGeometry(); Log.i("TAG","mPoint---"+mPoint.getX()+"==="+mPoint.getY()); } catch (IOException e) { e.printStackTrace(); } 代码执行结果mPoint---113.0===23.0。注:jsonFactory.createJsonParser这个方法可带入的参数也是比较多的,比如:file、outputStream、byte数组等等,有兴趣的小伙伴可以研究研究。 没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。 本文转自wenglabs博客园博客,原文链接http://www.cnblogs.com/arxive/p/7751932.html :,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册