ArcGIS Runtime SDK for Android 学习(7):创建图形符号

    本文主要讲解了通过Symbol的方式图形符号渲染。

    Symbol的作用:对单个要素进行渲染。


  Symbol的分类:


实现步骤:

1.创建Android项目   

2.添加Runtime SDK依赖   

3.添加权限及OpenGL ES支持

前三步本文省略,初学者可参照ArcGIS Runtime SDK for Android 学习笔记(1):第一个地图应用程序(二维)

4.设置界面布局

在layout中的布局XML中添加:

    <!-- MapView控件 -->
    <com.esri.arcgisruntime.mapping.view.MapView
        android:id="@+id/mapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </com.esri.arcgisruntime.mapping.view.MapView>

5.编写代码

在Activity中:

(1)变量准备:

    //MapView控件变量
    private MapView mMapView;
    //空间参考变量
    private final SpatialReference wgs84 = SpatialReference.create(4326);

(2)在onCreate方法中: 

        // 从Layout中获取MapView控件对象
        mMapView = (MapView) findViewById(R.id.mapView);
        // 创建一个具有地形图地图的地图对象
        ArcGISMap map = new ArcGISMap(Basemap.Type.OCEANS, 56.075844, -2.681572, 11);
        // 设置地图显示
        mMapView.setMap(map);

        //  在MapView中添加GraphicsOverlay用于绘制图形
        GraphicsOverlay graphicsOverlay = addGraphicsOverlay(mMapView);
        //add some buoy positions to the graphics overlay
        //在GraphicsOverlay中添加一些点表示浮标位置
        addBuoyPoints(graphicsOverlay);
        //add boat trip polyline to graphics overlay
        //在GraphicsOverlay中添加多线表示船舶运行轨迹
        addBoatTrip(graphicsOverlay);
        //add nesting ground polygon to graphics overlay
        //在GraphicsOverlay中添加多边形表示镶嵌的地面
        addNestingGround(graphicsOverlay);
        //add text symbols and points to graphics overlay
        //在GraphicsOverlay添加文字符号和点要素
        addText(graphicsOverlay);

(3)方法支持:

    private GraphicsOverlay addGraphicsOverlay(MapView mapView) {
        //创建GraphicsOverlay
        GraphicsOverlay graphicsOverlay = new GraphicsOverlay();
        //为MapView控件添加GraphicsOverlay
        mapView.getGraphicsOverlays().add(graphicsOverlay);
        return graphicsOverlay;
    }

    private void addBuoyPoints(GraphicsOverlay graphicOverlay) {
        //定义点(浮标)位置
        Point buoy1Loc = new Point(-2.712642647560347, 56.062812566811544, wgs84);
        Point buoy2Loc = new Point(-2.6908416959572303, 56.06444173689877, wgs84);
        Point buoy3Loc = new Point(-2.6697273884990937, 56.064250073402874, wgs84);
        Point buoy4Loc = new Point(-2.6395150461199726, 56.06127916736989, wgs84);
        //创建一个MarkerSymbol(红色圆形点)
        SimpleMarkerSymbol buoyMarker = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10);
        //创建graphics,传入需要符号化的点和符号定义
        Graphic buoyGraphic1 = new Graphic(buoy1Loc, buoyMarker);
        Graphic buoyGraphic2 = new Graphic(buoy2Loc, buoyMarker);
        Graphic buoyGraphic3 = new Graphic(buoy3Loc, buoyMarker);
        Graphic buoyGraphic4 = new Graphic(buoy4Loc, buoyMarker);
        //将graphics添加到GraphicsOverlay
        graphicOverlay.getGraphics().add(buoyGraphic1);
        graphicOverlay.getGraphics().add(buoyGraphic2);
        graphicOverlay.getGraphics().add(buoyGraphic3);
        graphicOverlay.getGraphics().add(buoyGraphic4);
    }

    private void addText(GraphicsOverlay graphicOverlay) {
        //创建几何点(用于表示两个地点标志)
        Point bassLocation = new Point(-2.640631, 56.078083,wgs84);
        Point craigleithLocation = new Point (-2.720324, 56.073569,wgs84);

        //创建文本符号,设置大小,文字,颜色,水平位置,竖直位置
        TextSymbol bassRockSymbol =
                new TextSymbol(10, "Bass Rock", Color.rgb(0, 0, 230),
                        TextSymbol.HorizontalAlignment.LEFT, TextSymbol.VerticalAlignment.BOTTOM);
        TextSymbol craigleithSymbol = new TextSymbol(10, "Craigleith", Color.rgb(0, 0, 230),
                        TextSymbol.HorizontalAlignment.RIGHT, TextSymbol.VerticalAlignment.TOP);

        //通过geometry(几何要素)和symbol(符号)创建graphics(图形)
        Graphic bassRockGraphic = new Graphic(bassLocation, bassRockSymbol);
        Graphic craigleithGraphic = new Graphic(craigleithLocation, craigleithSymbol);
        //将文字添加到graphicOverlay
        graphicOverlay.getGraphics().add(bassRockGraphic);
        graphicOverlay.getGraphics().add(craigleithGraphic);
    }


    private void addNestingGround(GraphicsOverlay graphicOverlay) {
        //为镶嵌地面定义多边形
        Polygon nestingGround = getNestingGroundGeometry();
        //定义多边形的填充符号和轮廓线样式
        SimpleLineSymbol outlineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.DASH, Color.rgb(0, 0, 128), 1);
        SimpleFillSymbol fillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.DIAGONAL_CROSS, Color.rgb(0, 80, 0), outlineSymbol);
        //定义graphic(图形)
        Graphic nestingGraphic = new Graphic(nestingGround,fillSymbol);
        //添加到GraphicsOverlay
        graphicOverlay.getGraphics().add(nestingGraphic);
    }

    private void addBoatTrip(GraphicsOverlay graphicOverlay) {
        //为船舶运行定义轨迹多线
        Polyline boatRoute = getBoatTripGeometry();
        //定义一个线符号
        SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.DASH, Color.rgb(128, 0, 128), 4);
        //创建Graphic(图形)
        Graphic boatTripGraphic = new Graphic(boatRoute, lineSymbol);
        //添加到GraphicOverlay
        graphicOverlay.getGraphics().add(boatTripGraphic);
    }

    private Polyline getBoatTripGeometry() {
        //a new point collection to make up the polyline
        //一个新的PointCollection组成了多线
        PointCollection boatPositions = new PointCollection(wgs84);
        //为PointCollection添加节点位置
        boatPositions.add(new Point(-2.7184791227926772,56.06147084563517));
        boatPositions.add(new Point(-2.7196807500463924,56.06147084563517));
        boatPositions.add(new Point(-2.722084004553823,56.062141712059706));
        boatPositions.add(new Point(-2.726375530459948,56.06386674355254));
        boatPositions.add(new Point(-2.726890513568683,56.0660708381432));
        boatPositions.add(new Point(-2.7270621746049275,56.06779569383808));
        boatPositions.add(new Point(-2.7255172252787228,56.068753913653914));
        boatPositions.add(new Point(-2.723113970771293,56.069424653352335));
        boatPositions.add(new Point(-2.719165766937657,56.07028701581465));
        boatPositions.add(new Point(-2.713672613777817,56.070574465681325));
        boatPositions.add(new Point(-2.7093810878716917,56.07095772883556));
        boatPositions.add(new Point(-2.7044029178205866,56.07153261642126));
        boatPositions.add(new Point(-2.698223120515766,56.072394931722265));
        boatPositions.add(new Point(-2.6923866452834355,56.07325722773041));
        boatPositions.add(new Point(-2.68672183108735,56.07335303720707));
        boatPositions.add(new Point(-2.6812286779275096,56.07354465544585));
        boatPositions.add(new Point(-2.6764221689126497,56.074215311778964));
        boatPositions.add(new Point(-2.6698990495353394,56.07488595644139));
        boatPositions.add(new Point(-2.6647492184479886,56.075748196715914));
        boatPositions.add(new Point(-2.659427726324393,56.076131408423215));
        boatPositions.add(new Point(-2.654792878345778,56.07622721075461));
        boatPositions.add(new Point(-2.651359657620878,56.076514616319784));
        boatPositions.add(new Point(-2.6477547758597324,56.07708942101955));
        boatPositions.add(new Point(-2.6450081992798125,56.07814320736718));
        boatPositions.add(new Point(-2.6432915889173625,56.08025069360931));
        boatPositions.add(new Point(-2.638656740938747,56.08044227755186));
        boatPositions.add(new Point(-2.636940130576297,56.078813783674946));
        boatPositions.add(new Point(-2.636425147467562,56.07728102068079));
        boatPositions.add(new Point(-2.637798435757522,56.076610417698504));
        boatPositions.add(new Point(-2.638656740938747,56.07507756705851));
        boatPositions.add(new Point(-2.641231656482422,56.07479015077557));
        boatPositions.add(new Point(-2.6427766058086277,56.075748196715914));
        boatPositions.add(new Point(-2.6456948434247924,56.07546078543464));
        boatPositions.add(new Point(-2.647239792750997,56.074598538729404));
        boatPositions.add(new Point(-2.6492997251859376,56.072682365868616));
        boatPositions.add(new Point(-2.6530762679833284,56.0718200569986));
        boatPositions.add(new Point(-2.655479522490758,56.070861913404286));
        boatPositions.add(new Point(-2.6587410821794135,56.07047864929729));
        boatPositions.add(new Point(-2.6633759301580286,56.07028701581465));
        boatPositions.add(new Point(-2.666637489846684,56.07009538137926));
        boatPositions.add(new Point(-2.670070710571584,56.06990374599109));
        boatPositions.add(new Point(-2.6741905754414645,56.069137194910745));
        boatPositions.add(new Point(-2.678310440311345,56.06808316228391));
        boatPositions.add(new Point(-2.682086983108735,56.06789151689155));
        boatPositions.add(new Point(-2.6868934921235956,56.06760404701653));
        boatPositions.add(new Point(-2.6911850180297208,56.06722075051504));
        boatPositions.add(new Point(-2.695133221863356,56.06702910083509));
        boatPositions.add(new Point(-2.698223120515766,56.066837450202335));
        boatPositions.add(new Point(-2.7016563412406667,56.06645414607839));
        boatPositions.add(new Point(-2.7061195281830366,56.0660708381432));
        boatPositions.add(new Point(-2.7100677320166717,56.065591697864576));
        boatPositions.add(new Point(-2.713329291705327,56.06520838135397));
        boatPositions.add(new Point(-2.7167625124302273,56.06453756828941));
        boatPositions.add(new Point(-2.718307461756433,56.06348340989081));
        boatPositions.add(new Point(-2.719165766937657,56.062812566811544));
        boatPositions.add(new Point(-2.7198524110826376,56.06204587471371));
        boatPositions.add(new Point(-2.719165766937657,56.06166252294756));
        boatPositions.add(new Point(-2.718307461756433,56.06147084563517));
        //通过PointCollection创建多线
        return new Polyline(boatPositions);
    }

    private Polygon getNestingGroundGeometry() {

        //一个新的PointCollection组成了多边形
        PointCollection points = new PointCollection(wgs84);

        //为PointCollection添加节点位置
        points.add(new Point(-2.643077012566659,56.077125346044475));
        points.add(new Point(-2.6428195210159444,56.07717324600376));
        points.add(new Point(-2.6425405718360033,56.07774804087097));
        points.add(new Point(-2.6427122328698127,56.077927662508635));
        points.add(new Point(-2.642454741319098,56.07829887790651));
        points.add(new Point(-2.641853927700763,56.078526395253725));
        points.add(new Point(-2.6409741649024867,56.078801809192434));
        points.add(new Point(-2.6399871139580795,56.07881378366685));
        points.add(new Point(-2.6394077579689705,56.07908919555142));
        points.add(new Point(-2.638764029092183,56.07917301616904));
        points.add(new Point(-2.638485079912242,56.07896945149566));
        points.add(new Point(-2.638570910429147,56.078203080726844));
        points.add(new Point(-2.63878548672141,56.077568418396));
        points.add(new Point(-2.6391931816767085,56.077197195961084));
        points.add(new Point(-2.6399441986996273,56.07675411934114));
        points.add(new Point(-2.6406523004640934,56.076730169108444));
        points.add(new Point(-2.6406737580933193,56.07632301287509));
        points.add(new Point(-2.6401802326211157,56.075999679860494));
        points.add(new Point(-2.6402446055087943,56.075844000034046));
        points.add(new Point(-2.640416266542604,56.07578412301025));
        points.add(new Point(-2.6408883343855822,56.075808073830935));
        points.add(new Point(-2.6417680971838577,56.076239186057734));
        points.add(new Point(-2.642197249768383,56.076251161328514));
        points.add(new Point(-2.6428409786451708,56.07661041772168));
        points.add(new Point(-2.643077012566659,56.077125346044475));

        //通过PointCollection创建多边形
        return new Polygon(points);
    }

6.运行APP:地图中出现了不同类别的图形符号

     

感谢luq老师的指导

猜你喜欢

转载自blog.csdn.net/smart3s/article/details/81055272