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);*/
}
}
}