Arcgis对解析wms/wfs服务查询结果

概述:这里说的Arcgis对wms/wfs服务查询结果的解析主要是指Arcgis对geojso的解析。

接上篇:https://www.jianshu.com/p/ea5f5f98c9df
由于arcgis目前并不支持geojson数据,所以这里将geojson数据先转换为wkt字符串,然后在arcgis平台解析使用。
geojson数据样式:

geojson数据结构(MultiPolygon).png

上代码:
使用到的第三方库:

implementation 'com.cocoahero.android:geojson:1.0.1'
implementation 'com.google.code.gson:gson:2.8.0'

在代码中使用:

GeoJSONObject geoJSON = GeoJSON.parse(response);
JSONObject jsonObject = geoJSON.toJSON();
JSONArray features = jsonObject.getJSONArray("features");
if (features.length() > 0) {
      for (int i = 0; i < features.length(); i++) {
          JSONObject featJob = (JSONObject) features.get(i);
          JSONObject geometryJob = featJob.getJSONObject("geometry");
          if (geometryJob.getString("type").equals("MultiPolygon")) {
              // 将项目信息属性转为键值对并输出
              // Properties类为自定义的对象 -- 用于存储图形信息
              Properties p = JSON.parseObject(featJob.getString("properties"), Properties.class);
              StringBuffer msg = new StringBuffer();
              HashMap<String, Object> pMap = (HashMap<String, Object>) obj2Map(p);
              for (Map.Entry entry : pMap.entrySet()) {
                   msg.append(entry.getKey() + " --- " + entry.getValue()).append("\n");
              }
              // 多面
              String geoWktStr = GeoJsonToWkt.multiPolygonToWkt(geometryJob);
              /*********   ************   *********/
              // TODO 在地图上高亮显示
              com.esri.core.geometry.Geometry thisGeo = getPrjGeometry(geoWktStr);
              Graphic g = new Graphic(thisGeo, new SimpleFillSymbol(Color.BLUE));
              Callout callout = mMapView.getCallout();
              callout.show(mPoint, message(ArcgisActivity.this, msg.toString()));
              // 高亮显示
              int aCountId = graphicsLayer.addGraphic(g);
              mMapView.setExtent(g.getGeometry(), 300);
              /*********   **********   ***********/
      }
}

对象转Map键值对:https://www.jianshu.com/p/aeb96183f75b

public class GeoJsonToWkt {

    // 多面
    public static String multiPolygonToWkt(JSONObject geometryJob) {
        try {
            JSONArray multiGeo = geometryJob.getJSONArray("coordinates");
            MultiPolygon multiPolygon = new MultiPolygon();
            multiPolygon.setPolygons(multiGeo);

            LogUtil.i(multiPolygon.getType());
            List<Polygon> polygons = multiPolygon.getPolygons();

            StringBuffer geoWktStr = new StringBuffer();
            if (polygons.size() > 0) {
                geoWktStr.append("MULTIPOLYGON");
                geoWktStr.append("(");
                for (int q = 0; q < polygons.size(); q++) {
                    geoWktStr.append("(");
                    List<Ring> rings = polygons.get(q).getRings();
                    for (int m = 0; m < rings.size(); m++) {
                        geoWktStr.append("(");
                        List<Position> positions = rings.get(m).getPositions();
                        LogUtil.i(rings.get(m).toString());
                        for (int n = 0; n < positions.size(); n++) {
                            if (n == 0) {
                                geoWktStr.append(positions.get(n).getLongitude() + " " + positions.get(n).getLatitude());
                            } else {
                                geoWktStr.append("," + positions.get(n).getLongitude() + " " + positions.get(n).getLatitude());
                            }
                        }
                        if (m != rings.size() - 1) {
                            geoWktStr.append("),");
                        } else {
                            geoWktStr.append(")");
                        }
                    }
                    if (q != polygons.size() - 1) {
                        geoWktStr.append("),");
                    } else {
                        geoWktStr.append(")");
                    }
                }
                geoWktStr.append(")");
            }
            LogUtil.i(geoWktStr.toString());
            return geoWktStr.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    // 多线
    public static String multiPolylineToWkt(JSONObject geometryJob) {
        try {
            JSONArray multiGeo = geometryJob.getJSONArray("coordinates");
            MultiLineString multiPolygon = new MultiLineString();
            multiPolygon.setLineStrings(multiGeo);

            LogUtil.i(multiPolygon.getType());
            List<LineString> lineStrings = multiPolygon.getLineStrings();

            StringBuffer geoWktStr = new StringBuffer();
            if (lineStrings.size() > 1) {
                geoWktStr.append("MULTILINESTRING");
                geoWktStr.append("(");
            } else {
                geoWktStr.append("LINESTRING");
            }

            if (lineStrings.size() > 0) {
                for (int q = 0; q < lineStrings.size(); q++) {
                    geoWktStr.append("(");
                    List<Position> positions = lineStrings.get(q).getPositions();
                    LogUtil.i(lineStrings.get(q).toString());
                    for (int p = 0; p < positions.size(); p++) {
                        if (p == 0) {
                            geoWktStr.append(positions.get(p).getLongitude() + " " + positions.get(p).getLatitude());
                        } else {
                            geoWktStr.append("," + positions.get(p).getLongitude() + " " + positions.get(p).getLatitude());
                        }
                    }
                    if (q != lineStrings.size() - 1) {
                        geoWktStr.append("),");
                    } else {
                        geoWktStr.append(")");
                    }
                }
                if (lineStrings.size() > 1) {
                    geoWktStr.append(")");
                }
            }
            LogUtil.i(geoWktStr.toString());
            return geoWktStr.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    // 点
    public static String pointToWkt(JSONObject geometryJob) {
        try {
            JSONArray multiGeo = geometryJob.getJSONArray("coordinates");
            Point point = new Point();
            point.setPosition(multiGeo);

            LogUtil.i(point.getType());
            Position position = point.getPosition();
            StringBuffer geoWktStr = new StringBuffer();
            geoWktStr.append("POINT");
            geoWktStr.append("(");
            geoWktStr.append(position.getLongitude() + " " + position.getLatitude());
            geoWktStr.append(")");

            LogUtil.i(geoWktStr.toString());
            return geoWktStr.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }
}
由于数据原因,这里只对 多面、多线和点的数据进行了处理,且由于验证数据过少,或许存在bug。故仅做参考!!!

如何在arcgis 中使用wkt数据,请参考:https://www.jianshu.com/p/476896a89d14

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,478评论 6 427
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,065评论 25 707
  • 简单的幸福 文/南岸闲坐 咳嗽了好几天了,不想吃药。下班后,来我住的小区超市想买瓶蜂蜜。牌子多的让人眼花,质量却不...
    南倚闲坐阅读 245评论 0 0
  • 二货哥说 : 亲爱的,公司成立乐队,我想去参加,但乐器要自己买。 二货媳妇盯了老公半天,递过来一根筷子:亲爱的,我...
    老罗xt阅读 357评论 0 1
  • 每次感到时间过得飞快,是从指尖 又该剪指甲了
    听我_说_阅读 374评论 0 2