基於SuperMap的iMobile 3D總結(三)

1、popupWindow 
popupWindow = new PopupWindow(view, 611, 603);
tvUserName.setText(userName);
// 使其聚集
popupWindow.setFocusable(true);
// 設置允許在外點擊消失
popupWindow.setOutsideTouchable(true);
popupWindow.setBackgroundDrawable(new BitmapDrawable());
WindowManager windowManager = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE);
// 顯示的位置爲:屏幕的寬度的一半-PopupWindow的高度的一半
int xPos = windowManager.getDefaultDisplay().getWidth() / 2
        - popupWindow.getWidth() / 2;
int yPos = windowManager.getDefaultDisplay().getHeight() / 2 - popupWindow.getHeight() / 2 - 200;
Log.i("coder", "xPos:" + xPos);
popupWindow.showAsDropDown(convertView, xPos, yPos);

2、Geometry查詢

  private void queryPointbyGeometry(Point2D point2D, String dataSource, String dataSet) {
        com.supermap.services.components.commontypes.Geometry geometry = new com.supermap.services.components.commontypes.Geometry();
        com.supermap.services.components.commontypes.Point2D[] points = new com.supermap.services.components.commontypes.Point2D[]{new com.supermap.services.components.commontypes.Point2D(
                point2D.getX(), point2D.getY())};
        geometry.points = points;
        geometry.type = GeometryType.POINT;
        GetFeaturesResult result = excute_geometryQuery(Constant.QUERY_B13, geometry);
        if (result != null && result.featureCount > 0) {
            Feature[] features = result.features;
            String[] fieldValues = features[0].fieldValues;
            int id = Integer.parseInt(fieldValues[0]);
            int[] selectIds = new int[]{id};

            Layer3Ds layers = sceneControl.getScene().getLayers();
            for (int i = 0; i < layers.getCount(); i++) {
                if (layers.get(i).getName().equalsIgnoreCase("b13@udb13")) {
                    Layer3D layer3D = layers.get(i);
                    b13dosgFile = (Layer3DOSGBFile) layer3D;
                }
            }
            b13dosgFile.clearObjectsColor();
            b13dosgFile.setObjectsColor(selectIds, new Color(255, 0, 0));
            feature = features[0];
            handler.sendEmptyMessage(1000);
        } else {
            handler.sendEmptyMessage(1001);
        }
    }

3、點擊item,scene裏面高亮對應圖形

  Feature feature = featureList.get(position);
                Geometry geometry = feature.geometry;
                Point2D[] points = geometry.points;
//                Log.e("msg", geometry.getCenter().x + "-" + geometry.getCenter().y + "-------");
                sceneControl.getScene().fly(new LookAt(points[0].x, points[0].y, 120), 1000, true);
                int[] ids = new int[]{feature.getID()};
                Layer3Ds layers = sceneControl.getScene().getLayers();
                for (int i = 0; i < layers.getCount(); i++) {
                    if (layers.get(i).getName().equalsIgnoreCase("b13@udb13")) {
                        Layer3D layer3D = layers.get(i);
                        Layer3DOSGBFile layer3dosgbfile = (Layer3DOSGBFile) layer3D;
                        layer3dosgbfile.clearObjectsColor();
//                        layer3dosgbfile.removeObjectsColor(selectIds);
                        layer3dosgbfile.setObjectsColor(ids, new Color(255, 0, 0));
                    }
                }

4、獲取iServer裏面的需要的字段

 public static final String FIELD_B13 = "http://192.168.5.229:8090/iserver/services/data-b13Mobile/rest/data/datasources/udb13/datasets/b13_polygon/fields.json"; 

/**
     * init field values
     */
    private void initQueryFields() {

        OkHttpClient client = new OkHttpClient();
        Request build = new Request.Builder().url(Constant.FIELD_B13).get().build();
        Call call = client.newCall(build);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.e("msg", e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response != null) {
                    String string = response.body().string();
                    Log.e("msg", string + "");
                    try {
                        JSONObject jsonObject = new JSONObject(string);
                        JSONArray fieldNames = jsonObject.getJSONArray("fieldNames");
                        queryFields = new String[fieldNames.length()];
                        for (int i = 0; i < fieldNames.length(); i++) {
                            Object o = fieldNames.get(i);
                            Log.e("msg", o.toString() + "");
                            queryFields[i] = o.toString();
                        }
                        handler.sendEmptyMessage(100);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }

5、屬性查詢、渲染圖層

    //b13的查詢路徑
public static final String QUERY_B13 = "http://192.168.5.229:8090/iserver/services/data-b13Mobile/rest/data";

  Layer3Ds layers = sceneControl.getScene().getLayers();
                for (int i = 0; i < layers.getCount(); i++) {
                    if (layers.get(i).getName().equalsIgnoreCase("b13@udb13")) {
                        Layer3D layer3D = layers.get(i);
                        b13dosgFile = (Layer3DOSGBFile) layer3D;
                    }
                }
   clearMapColor();
   queryPointbySQL("udb13", "b13_polygon", sql, Constant.QUERY_B13);
 /**
     * clear b13area model color
     */
    private void clearMapColor() {
        b13dosgFile.clearObjectsColor();
    }

    /**
     * query b13 data url by sql
     */
    private void queryPointbySQL(String dataSource, String dataSet, String sql, String url) {
        String[] dtnames = {dataSource + ":" + dataSet};
        QueryParameter parameter = new QueryParameter();
        parameter.attributeFilter = sql;
        GetFeaturesBySQLParameters sqlParameters = new GetFeaturesBySQLParameters();
        sqlParameters.datasetNames = dtnames;
        sqlParameters.queryParameter = parameter;
        GetFeaturesBySQLService sqlService = new GetFeaturesBySQLService(url);
        MyEventListener eventListener = new MyEventListener();
        sqlService.process(sqlParameters, eventListener);
    }


 /**
     * 要素請求服務監聽
     */
    class MyEventListener extends GetFeaturesByGeometryService.GetFeaturesEventListener {
        @Override
        public void onGetFeaturesStatusChanged(Object o, EventStatus eventStatus) {
            if (EventStatus.PROCESS_COMPLETE.getValue() == eventStatus.getValue() && o != null) {
                featuresResult = (GetFeaturesResult) o;
                Feature[] featuresarr = featuresResult.features;
                for (int i = 0; i < featuresarr.length; i++) {
                    featureList.add(featuresarr[i]);
                }
                /*for (int i = 0; i < features.length; i++) {
                    String[] fieldNames = features[i].fieldNames;
                    String[] fieldValues = features[i].fieldValues;
                }*/
                Log.i("查詢:", "成功");
                handler.sendEmptyMessage(101);
              /*  queryAdapter = new Query2Adapter(getActivity(), feature);
                rcvQuery.setAdapter(queryAdapter);*/
            }
        }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章