这是这阶段arcgis for Android 的最后一篇了,前面有三篇。对于我经常使用坐标,进行绘制点线面图形的程序员,这个必须要的。因为在项目中经常用到。
arcgis for Android 100.1 基本操作(缩小放大旋转定位)
arcgis for Android 100.1 在线加载天地图和谷歌地图
arcgis for Android 100.2 加载shp
1、效果显示
2、代码实现
package com.arcgis.activity;
import android.content.res.Resources;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import com.arcgis.R;
import com.esri.arcgisruntime.geometry.Point;
import com.esri.arcgisruntime.geometry.PolygonBuilder;
import com.esri.arcgisruntime.geometry.PolylineBuilder;
import com.esri.arcgisruntime.geometry.SpatialReference;
import com.esri.arcgisruntime.geometry.SpatialReferences;
import com.esri.arcgisruntime.layers.ArcGISTiledLayer;
import com.esri.arcgisruntime.mapping.ArcGISMap;
import com.esri.arcgisruntime.mapping.Basemap;
import com.esri.arcgisruntime.mapping.Viewpoint;
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.esri.arcgisruntime.symbology.SimpleFillSymbol;
import com.esri.arcgisruntime.symbology.SimpleLineSymbol;
import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol;
import com.esri.arcgisruntime.symbology.SimpleRenderer;
public class ArcgisDrawActivity extends AppCompatActivity implements View.OnClickListener {
private String mapServerUrl = "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer";
private MapView mMapView;
LocationDisplay locationDisplay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map_2);
mMapView = (MapView) findViewById(R.id.map_view);
initView();
}
private void initView() {
findViewById(R.id.button4).setOnClickListener(this);
findViewById(R.id.button5).setOnClickListener(this);
findViewById(R.id.button6).setOnClickListener(this);
findViewById(R.id.button7).setOnClickListener(this);
ArcGISTiledLayer tiledLayer = new ArcGISTiledLayer(mapServerUrl);
Basemap basemap = new Basemap(tiledLayer);
ArcGISMap map = new ArcGISMap(basemap);
mMapView.setMap(map);
locationDisplay = mMapView.getLocationDisplay();
locationDisplay.setAutoPanMode(LocationDisplay.AutoPanMode.RECENTER);
locationDisplay.startAsync();
locationDisplay = mMapView.getLocationDisplay();
Resources resources=getResources();
BitmapDrawable bitmapDrawable= new BitmapDrawable(BitmapFactory.decodeResource(resources,R.drawable.arcgisruntime_location_display_default_symbol));
final PictureMarkerSymbol campsiteSymbol = new PictureMarkerSymbol(bitmapDrawable);
campsiteSymbol.loadAsync();
campsiteSymbol.addDoneLoadingListener(new Runnable() {
@Override
public void run() {
locationDisplay.setDefaultSymbol(campsiteSymbol);//设置默认符号
locationDisplay.setShowAccuracy(false);//隐藏符号的缓存区域
}
});
}
protected void onResume() {
super.onResume();
mMapView.resume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.pause();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button4://放大
Point point = locationDisplay.getMapLocation();
ArcGISMap map = new ArcGISMap(Basemap.createImageryWithLabelsVector());
//center for initial viewpoint
// 这个Point是按照经纬度模式 跟osmdroid定位刚好反过来
//patialReference.create(4326) 参考坐标系 4326 是WGS84 的坐标
// Point center = new Point(113.365548756, 23.12648183, SpatialReference.create(4326));
//set initial viewpoint
//9000 是缩放比例 这缩放比例参数也是独树一帜啊
map.setInitialViewpoint(new Viewpoint(point, 9000));
// set the map to the map view
mMapView.setMap(map);
break;
case R.id.button5://
// point graphic
Point pointGeometry = new Point(113.365548856, 23.12698183, SpatialReferences.getWgs84());
// red diamond point symbol
SimpleMarkerSymbol pointSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.DIAMOND, Color.RED, 10);
// create graphic for point
Graphic pointGraphic = new Graphic(pointGeometry);
// create a graphic overlay for the point
GraphicsOverlay pointGraphicOverlay = new GraphicsOverlay();
// create simple renderer
SimpleRenderer pointRenderer = new SimpleRenderer(pointSymbol);
pointGraphicOverlay.setRenderer(pointRenderer);
// add graphic to overlay
pointGraphicOverlay.getGraphics().add(pointGraphic);
// add graphics overlay to the MapView
mMapView.getGraphicsOverlays().add(pointGraphicOverlay);
break;
case R.id.button6://
// line graphic
PolylineBuilder lineGeometry = new PolylineBuilder(SpatialReferences.getWgs84());
lineGeometry.addPoint(113.365548756, 23.12648183);
lineGeometry.addPoint(113.362548856, 23.12548283);
// solid blue line symbol
SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.BLUE, 5);
// create graphic for polyline
Graphic lineGraphic = new Graphic(lineGeometry.toGeometry());
// create graphic overlay for polyline
GraphicsOverlay lineGraphicOverlay = new GraphicsOverlay();
// create simple renderer
SimpleRenderer lineRenderer = new SimpleRenderer(lineSymbol);
// add graphic to overlay
lineGraphicOverlay.setRenderer(lineRenderer);
// add graphic to overlay
lineGraphicOverlay.getGraphics().add(lineGraphic);
// add graphics overlay to the MapView
mMapView.getGraphicsOverlays().add(lineGraphicOverlay);
break;
case R.id.button7://
//polygon graphic
PolygonBuilder polygonGeometry = new PolygonBuilder(SpatialReferences.getWgs84());
polygonGeometry.addPoint(113.366548156, 23.12248283);
polygonGeometry.addPoint(113.362548356, 23.12348383);
polygonGeometry.addPoint(113.368548656, 23.12248683);
polygonGeometry.addPoint(113.367548956, 23.127648983);
// solid yellow polygon symbol
SimpleFillSymbol polygonSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.YELLOW, null);
// create graphic for polygon
Graphic polygonGraphic = new Graphic(polygonGeometry.toGeometry());
// create graphic overlay for polygon
GraphicsOverlay polygonGraphicOverlay = new GraphicsOverlay();
// create simple renderer
SimpleRenderer polygonRenderer = new SimpleRenderer(polygonSymbol);
// add graphic to overlay
polygonGraphicOverlay.setRenderer(polygonRenderer);
// add graphic to overlay
polygonGraphicOverlay.getGraphics().add(polygonGraphic);
// add graphics overlay to MapView
mMapView.getGraphicsOverlays().add(polygonGraphicOverlay);
break;
}
}
}
这里有一个注意就是,画图的用经纬度是在那个坐标系统下面的。一般来说都是使用WGS84坐标。
3、这里看一个三维地图,挺好玩的
实现代码很简单
package com.arcgis.activity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.arcgis.R;
import com.arcgis.until.TianDiTuMethodsClass;
import com.esri.arcgisruntime.geometry.Point;
import com.esri.arcgisruntime.geometry.SpatialReference;
import com.esri.arcgisruntime.layers.ArcGISSceneLayer;
import com.esri.arcgisruntime.layers.ArcGISTiledLayer;
import com.esri.arcgisruntime.layers.WebTiledLayer;
import com.esri.arcgisruntime.mapping.ArcGISMap;
import com.esri.arcgisruntime.mapping.ArcGISScene;
import com.esri.arcgisruntime.mapping.Basemap;
import com.esri.arcgisruntime.mapping.view.MapView;
import com.esri.arcgisruntime.mapping.view.SceneView;
public class ArcgisThreeDimensionalMapActivity extends AppCompatActivity {
private SceneView sceneView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scene);
sceneView = (SceneView) findViewById(R.id.sceneview);
ArcGISScene arcGISScene = new ArcGISScene(Basemap.createImagery());
ArcGISSceneLayer arcGISSceneLayer = new ArcGISSceneLayer(
"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer");
arcGISScene.getOperationalLayers().add(arcGISSceneLayer);
sceneView.setScene(arcGISScene);
}
protected void onResume() {
super.onResume();
sceneView.resume();
}
@Override
protected void onPause() {
super.onPause();
sceneView.pause();
}
}
最后还是一样注意权限
还有就是你的编译版本是6.0及以上,需要权限管理,动态加载。
<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" />
到这里就结束吧,稍后我会把这四篇文章的代码打包csdn下载