美文网首页
ArcGis For Android添加地块 存在多块地时的显示

ArcGis For Android添加地块 存在多块地时的显示

作者: Ma_小鹏 | 来源:发表于2016-08-26 15:18 被阅读383次

ArcGis For Android开发 不知道现在还有多少人在做,不过近期遇到一个问题,就是要根据不通过的地块进行分析展示,在移动端显示,做了很多努力;查看了多次api,在懵懵懂懂中慢慢摸索,最终解决了问题。身心巨爽。

先上图 有需要的可以做个参考


例图.jpg

首先接收到的 可能一大块地区内还有多块地区镂空(由于坐标串 每个地方都不一样
收到的坐标字符串示

J1,3289810.163,38434766.6557;J2,3289814.2133,32434771.8873;J3,3289819.2742,32434776.3431;J4,3289830.1075,32434784.1107;
J1,3289810.163,32434766.6557;J2,3289814.2133,32434771.8873;J3,3289819.2742,32434776.3431;J4,3289830.1075,32434784.1107;

首先对字符串进行处理

 Public void getMut(String Coor) {
        if (!Coor.equals("")) {
            //去除掉所有特殊字符 @ $ 。。。
            String str_Coor = UtilTools.StringFilter(Coor);
            String[] str_coor = str_Coor.split("J1,");
            Log.d("str_cooe1==",str_coor.length+"");
            StringBuilder sb1 = new StringBuilder();
            StringBuilder sb2 = new StringBuilder();
            str_value = new String[str_coor.length];
            for (int j = 1; j < str_coor.length; j++) {
                String[] str_coor1 = str_coor[j].split(";");
                sb1.setLength(0);
                for (String aStr_coor1 : str_coor1) {
                    String[] str_coor2 = aStr_coor1.split(",");
                    sb2.setLength(0);
                    for (int i = 0; i < str_coor2.length - 1; i++) {
                        String s = str_coor2[i + 1];
                        sb2.append(" ").append(s);
                    }
                    if (sb2.toString().length() > 1) {
                        sb1.append(",").append(sb2.toString().substring(1));
                    }
                }
                Log.d("sb1.toString()==",sb1.toString());
                str_value[j] = sb1.toString().substring(1);
            }
            getGeometry(str_value);
        }else {
            Toast.makeText(getBaseContext(),"请求失败",Toast.LENGTH_SHORT).show();
        }
     }

转换后进行处理

    public Geometry getGeometry(String[] str1) {
        Graphic gp;
        Polygon poly = new Polygon();
        for (int j  =  1 ;j< str1.length;j++) {   //由于第一个为1 所以直接跳过
            String str = str1[j];
            mPointArray.setEmpty();
            //转换后的 str="38429990.52535 3901422.92155,38430272.66719 3898485.63739,38433670.12520 3898774.55036,38433243.69752 3902723.03164,38429990.52535 3901422.92155";
            String[] cc = str.split(";");
            for (String aCc : cc) {
                String[] aa = aCc.split(",");
                String[] bb;
                for (String anAa : aa) {
                    bb = anAa.split(" ");
                    if (bb.length > 1) {
                        mPointArray.add(new Point(Double.valueOf(bb[1]), Double.valueOf(bb[0])));
                    } else {
                        Toast.makeText(getApplicationContext(), "数据解析错误", Toast.LENGTH_LONG).show();
                    }
                }
            }
            Polygon poly1 = new Polygon();
            poly1.startPath(mPointArray.getPoint(0));
            for (int i = 1; i < mPointArray.getPointCount(); i++) {
                poly1.lineTo(mPointArray.getPoint(i));
            }
            poly.add(poly1, true);         //重要的地方  把所有的poly放到一个面上 在进     行填充颜色 就实现了
        }
        gp = new Graphic(poly, new SimpleFillSymbol(getResources().getColor(R.color.yellow), SimpleFillSymbol.STYLE.SOLID));
        mGraphicLayer.addGraphic(gp);
        mMapView.addLayer(mGraphicLayer);
        mMapView.setExtent(gp.getGeometry(), 10, true);

        return null;
    }

相关文章

网友评论

      本文标题:ArcGis For Android添加地块 存在多块地时的显示

      本文链接:https://www.haomeiwen.com/subject/eikzsttx.html