public Recordset HitTest(DatasetVector datasetVector, float x, float y) {
    final float tolerance = dip2px(10.0f);

    // 地理范围和手机屏幕的坐标是相反的
    Point lb = new Point((int) (x - tolerance), (int) (y + tolerance));
    Point rt = new Point((int) (x + tolerance), (int) (y - tolerance));
    Point2D leftBottom = mMapControl.getMap().pixelToMap(lb);
    Point2D rightTop = mMapControl.getMap().pixelToMap(rt);

    // 投影转换
    leftBottom =
        mapShow.convertMapToDatasetPoint(leftBottom, datasetVector.getPrjCoordSys().getType());
    rightTop = mapShow.convertMapToDatasetPoint(rightTop, datasetVector.getPrjCoordSys().getType());

    // 构造屏幕当前点10像素范围的查询Bounds
    Rectangle2D queryBounds = new Rectangle2D(leftBottom, rightTop);

    QueryParameter param = new QueryParameter();
    param.setAttributeFilter("");
    param.setSpatialQueryObject(queryBounds);
    param.setSpatialQueryMode(SpatialQueryMode.INTERSECT);
    param.setCursorType(CursorType.DYNAMIC);
    // 空间和属性联合查询
    Recordset recordset = datasetVector.query(param);

    return recordset;
  }
  @Override
  public void MultiMediaInfoReceived(String msg) {
    if (m_popupMultiMedia == null) {
      // 多媒体列表初始化
      m_popupMultiMedia =
          new MultiMediaPopup(btnMultiMedia.getRootView(), getApplicationContext(), this);
      // 设置多媒体工作空间
      m_popupMultiMedia.setWorkspace(mapShow.getWorkspace(), mapShow.getBounds());
    }

    m_popupMultiMedia.processReceivedInfo(msg);
  }
 private void GeometrySelected(Recordset recordset, boolean bCAD) {
   if (recordset == null || recordset.getRecordCount() == 0) {
     return;
   }
   if (bCAD) {
     boolean bFrom =
         mapShow
             .getMap()
             .getLayers()
             .get("CAD@multimedia")
             .getSelection()
             .fromRecordset(recordset);
     System.out.println(bFrom);
   } else {
     mapShow
         .getMap()
         .getLayers()
         .get("MQDemo_MediaDataset@multimedia")
         .getSelection()
         .fromRecordset(recordset);
     //			String mediaFilePath = MyApplication.SDCARD +
     // mapShow.getWorkspace().getDatasources().get("multimedia").getDatasets().get("MQDemo_MediaDataset").getDescription();
     //			String mediaFileName = (String)recordset.getFieldValue("MediaFileName");
     //			mediaFilePath += mediaFileName;
     //			String strExtension;
     //			int pos = mediaFileName.indexOf(".");
     //			strExtension = mediaFileName.substring(pos + 1);
     //
     ////			mediaFilePath = "/storage/emulated/0/SuperMap/MediaFiles/1440488164716.jpeg";
     ////			strExtension = "jpeg";
     //			Intent intent = new Intent(Intent.ACTION_VIEW);
     //			Uri uri = Uri.fromFile(new File(mediaFilePath));
     //
     //			if(strExtension.equals("jpeg")){
     //				intent.setDataAndType(uri, "image/*");
     //			}else if(strExtension.equals("mp4")){
     //				intent.setDataAndType(uri, "video/*");
     //			}else {
     //				intent.setDataAndType(uri, "audio/*");
     //			}
     //
     //			getApplicationContext().startActivity(intent);
   }
 }
  @Override
  public void DeleteOrderReceived(String msg) {
    // {delete:fieldName=PlotID,fieldValue=xxxxxxx}
    int pos = msg.indexOf(":");
    if (pos > msg.length() || pos < 0) return;
    String order = msg.substring(1, pos);
    msg = msg.substring(pos + 1);

    if (!order.equalsIgnoreCase("delete")) {
      return;
    }
    pos = msg.indexOf(",");
    if (pos > msg.length() || pos < 0) return;

    // fileName为fieldName=PlotID
    String fieldName = msg.substring(0, pos);
    msg = msg.substring(pos + 1);

    pos = fieldName.indexOf("=");
    if (pos > fieldName.length() || pos < 0) return;
    fieldName = fieldName.substring(pos + 1);
    if (!fieldName.equalsIgnoreCase("PlotID")) {
      return;
    }

    // fileValue为fieldValue=xxxxxxx}
    String fieldValue = msg.substring(0, msg.length() - 1);

    pos = fieldValue.indexOf("=");
    if (pos > fieldValue.length() || pos < 0) return;
    fieldValue = fieldValue.substring(pos + 1, msg.length() - 1);

    // 查处所有数据集对象,依次遍历找到PlotID值为fieldValue的对象,并删除????
    DatasetVector dv =
        (DatasetVector)
            (mapShow
                .getMap()
                .getWorkspace()
                .getDatasources()
                .get("multimedia")
                .getDatasets()
                .get("CAD"));
    Recordset recordset = dv.getRecordset(false, CursorType.DYNAMIC);
    recordset.moveFirst();
    while (!recordset.isEOF()) {
      String value = (String) recordset.getFieldValue(fieldName);
      if (value.equalsIgnoreCase(fieldValue)) {
        recordset.delete();
        recordset.update();
        break;
      }
      recordset.moveNext();
    }
    recordset.close();
    recordset.dispose();
  }
  @Override
  public void SynchronousLocationReceived(Point2D location, String clientID) {
    // 查询现有的动态层对象
    List<DynamicElement> m_locateDynamicPoints = m_locateDynamicView.query(mapShow.getBounds());

    boolean bExist = false;
    DynamicPoint pnt;
    for (int i = 0; i < m_locateDynamicPoints.size(); i++) {
      if (m_locateDynamicPoints.get(i).getID() == m_LocationID
          || m_locateDynamicPoints.get(i).getID() == m_LocationPolygonID) {
        // 不与本设备定位点进行对比
        continue;
      }
      pnt = (DynamicPoint) m_locateDynamicPoints.get(i);
      if (pnt.getUserData().equals(clientID)) {
        m_locateDynamicView.removeElement(pnt);
        pnt.updatePoint(0, mapShow.getPoint(location));
        m_locateDynamicView.addElement(pnt);
        bExist = true;
        break;
      }
    }

    if (bExist == false) {
      DynamicPoint dynPoint = new DynamicPoint();
      dynPoint.addPoint(mapShow.getPoint(location));

      DynamicStyle dynStyle = new DynamicStyle();
      dynStyle.setBackground(
          BitmapFactory.decodeResource(mapShow.getResources(), R.drawable.navi_end));
      dynStyle.setAngle(0);
      dynPoint.setStyle(dynStyle);
      dynPoint.setUserData(clientID);

      m_locateDynamicView.addElement(dynPoint);
    }

    m_locateDynamicView.refresh();
  }
  public void drawPoint(Point2D point2D, float azimuth) {
    DynamicPoint dynPoint = new DynamicPoint();
    dynPoint.addPoint(point2D);

    DynamicStyle dynStyle = new DynamicStyle();
    dynStyle.setBackground(
        BitmapFactory.decodeResource(mapShow.getResources(), R.drawable.location));
    dynStyle.setAngle(azimuth);
    dynPoint.setStyle(dynStyle);

    m_locateDynamicView.addElement(dynPoint);
    m_LocationID = dynPoint.getID();
    m_locateDynamicView.refresh();
  }
  private void showMultiMediaPopup(View parent) {
    if (m_popupMultiMedia == null) {
      // 多媒体列表初始化
      m_popupMultiMedia =
          new MultiMediaPopup(btnMultiMedia.getRootView(), getApplicationContext(), this);
      // 设置多媒体工作空间
      m_popupMultiMedia.setWorkspace(mapShow.getWorkspace(), mapShow.getBounds());
    }

    m_GPSData = m_TencentLocation.getLocation();
    Point2D pnt = m_Navigation.encryptGPS(m_GPSData.dLongitude, m_GPSData.dLatitude);
    m_GPSData.dLongitude = pnt.getX();
    m_GPSData.dLatitude = pnt.getY();

    m_popupMultiMedia.setGPSData(m_GPSData);

    //		m_popupMultiMedia.refreshList();
    if (m_popupMultiMedia.isShowing()) {
      m_popupMultiMedia.dismiss();
    } else {
      m_popupMultiMedia.setFocusable(false);
      m_popupMultiMedia.show(parent);
    }
  }
  @Override
  protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    if (mapShow != null) {
      mapShow.dispose();
    }

    if (m_MessageQueue != null) {
      m_MessageQueue.stopReceive();
    }
    if (m_popupMessageList != null) {
      m_popupMessageList.dismiss();
    }
    if (m_popupMultiMedia != null) {
      m_popupMultiMedia.dismiss();
    }
    if (m_popupTextMessage != null) {
      m_popupTextMessage.dismiss();
    }
    if (m_TencentLocation != null) {
      m_TencentLocation.dispose();
    }
  }
  @Override
  public void onClick(View v) {
    switch (v.getId()) {
      case R.id.consult_message:
        {
          mMapControl.submit();
          mMapControl.setAction(Action.SELECT);
          mMapControl.getMap().refresh();

          if (m_popupMultiMedia != null && m_popupMultiMedia.isShowing()) {
            m_popupMultiMedia.dismiss();
          }
          if (m_PlotTypePopup != null && m_PlotTypePopup.isShowing()) {
            m_PlotTypePopup.dismiss();
          }
          m_nMessageCount = 0;
          btnNewMessage.setVisibility(4);
          showMessageList(v);
        }
        break;
      case R.id.message_switch:
        {
          if (m_popupMultiMedia != null && m_popupMultiMedia.isShowing()) {
            m_popupMultiMedia.dismiss();
          }
          if (m_PlotTypePopup != null && m_PlotTypePopup.isShowing()) {
            m_PlotTypePopup.dismiss();
          }
          mMessageQueueOn = !mMessageQueueOn;
          if (!mMessageQueueOn) {
            btnMessageSwitch.setBackgroundResource(R.drawable.btn_message_switch_noselect);
            m_MessageQueue.suspend();
          } else {
            btnMessageSwitch.setBackgroundResource(R.drawable.btn_message_switch_focused);
            m_MessageQueue.resume();

            // 先去下载一次多媒体数据
            if (m_popupMultiMedia == null) {
              // 多媒体列表初始化
              m_popupMultiMedia =
                  new MultiMediaPopup(btnMultiMedia.getRootView(), getApplicationContext(), this);
              // 设置多媒体工作空间
              m_popupMultiMedia.setWorkspace(mapShow.getWorkspace(), mapShow.getBounds());
            }
          }
        }
        break;
      case R.id.locate:
        {
          if (m_popupMultiMedia != null && m_popupMultiMedia.isShowing()) {
            m_popupMultiMedia.dismiss();
          }
          if (m_PlotTypePopup != null && m_PlotTypePopup.isShowing()) {
            m_PlotTypePopup.dismiss();
          }
          m_StartPoint = m_TencentLocation.getGPSPoint();
          if ((m_StartPoint.getX() == 0) || (m_StartPoint.getY() == 0)) {
            MyApplication.getInstance().showInfo("现在无法定位,请稍后再试!");
            break;
          }
          // 导航纠偏
          m_StartPoint = m_Navigation.encryptGPS(m_StartPoint.getX(), m_StartPoint.getY());

          Point2D pt = mapShow.getPoint(m_StartPoint);
          if (pt == null) {
            MyApplication.getInstance().showInfo("现在无法定位,请稍后再试!");
            break;
          }
          drawCircleOnDyn(pt, 0, m_TencentLocation.getAccuracy());
          mapShow.panTo(pt);
          m_MapView.refresh();
        }
        break;
      case R.id.multi_media:
        {
          mMapControl.submit();
          mMapControl.setAction(Action.SELECT);
          mMapControl.getMap().refresh();

          if (m_PlotTypePopup != null && m_PlotTypePopup.isShowing()) {
            m_PlotTypePopup.dismiss();
          }
          showMultiMediaPopup(v);
          break;
        }
      case R.id.plot:
        {
          if (m_popupMultiMedia != null && m_popupMultiMedia.isShowing()) {
            m_popupMultiMedia.dismiss();
          }

          mMapControl.submit();
          mMapControl.setAction(Action.SELECT);
          mMapControl.getMap().refresh();

          if (m_PlotTypePopup == null) {
            m_PlotTypePopup = new PlotTypePopup(mMapControl, btnPlot.getRootView(), this);
          }
          if (m_PlotTypePopup.isShowing()) {
            m_PlotTypePopup.dismiss();
            mMapControl.setAction(Action.SELECT);
          } else {
            m_PlotTypePopup.show(v);
          }

          break;
        }
      case R.id.text_message:
        {
          mMapControl.submit();
          mMapControl.setAction(Action.SELECT);
          mMapControl.getMap().refresh();

          if (m_popupMultiMedia != null && m_popupMultiMedia.isShowing()) {
            m_popupMultiMedia.dismiss();
          }
          if (m_PlotTypePopup != null && m_PlotTypePopup.isShowing()) {
            m_PlotTypePopup.dismiss();
          }
          if (!mMessageQueueOn) {
            MyApplication.getInstance().showInfo("请先打开消息开关!");
            break;
          }
          if (m_popupTextMessage == null) {
            m_popupTextMessage =
                new TextMessagePopup(btnTextMessage.getRootView(), getApplicationContext(), this);
          }

          if (m_popupTextMessage.isShowing()) {
            m_popupTextMessage.dismiss();
          } else {
            m_popupTextMessage.setFocusable(true);
            m_popupTextMessage.show();
          }
        }
        break;
      case R.id.send_message:
        {
          mMapControl.submit();
          mMapControl.setAction(Action.SELECT);
          mMapControl.getMap().refresh();

          if (m_popupMultiMedia != null && m_popupMultiMedia.isShowing()) {
            m_popupMultiMedia.dismiss();
          }
          if (m_PlotTypePopup != null && m_PlotTypePopup.isShowing()) {
            m_PlotTypePopup.dismiss();
          }
          if (!mMessageQueueOn) {
            MyApplication.getInstance().showInfo("请先打开消息开关!");
            break;
          }
          sendPlot();
        }
        break;
      case R.id.position_upload:
        {
          if (m_popupMultiMedia != null && m_popupMultiMedia.isShowing()) {
            m_popupMultiMedia.dismiss();
          }
          if (m_PlotTypePopup != null && m_PlotTypePopup.isShowing()) {
            m_PlotTypePopup.dismiss();
          }
          if (!mMessageQueueOn) {
            MyApplication.getInstance().showInfo("请先打开消息开关!");
            break;
          }
          m_StartPoint = m_TencentLocation.getGPSPoint();
          if ((m_StartPoint.getX() == 0) || (m_StartPoint.getY() == 0)) {
            MyApplication.getInstance().showInfo("现在无法定位,请稍后再试!");
            break;
          }
          // 导航纠偏
          m_StartPoint = m_Navigation.encryptGPS(m_StartPoint.getX(), m_StartPoint.getY());
          String json = m_StartPoint.toJson();
          String msg = "{content_type=0}" + json;
          boolean bOk = m_MessageQueue.sendMessageByType(msg, 0);
          if (bOk) {
            MyApplication.getInstance().showInfo("发送成功");
          } else {
            MyApplication.getInstance().showInfo("发送失败,请重新发送!");
          }
        }
        break;
      case R.id.delete:
        {
          if (m_layerSelected == null || m_IDSelected == -1) {
            break;
          }
          DatasetVector dataset = (DatasetVector) m_layerSelected.getDataset();
          if (dataset != null && dataset.getName().equalsIgnoreCase("CAD")) {
            QueryParameter parameter = new QueryParameter();
            parameter.setAttributeFilter("SmID=" + m_IDSelected);
            parameter.setCursorType(CursorType.DYNAMIC);
            Recordset recordset = dataset.query(parameter);
            recordset.moveFirst();
            if (!recordset.isEmpty()) {
              String strPlotID = (String) recordset.getFieldValue("PlotID");
              recordset.delete();
              recordset.update();
              String msg = "{content_type=5}";
              msg += "{delete:feildName=PlotID,feildValue=";
              msg += strPlotID;
              msg += "}";
              m_MessageQueue.sendMessageByRoutingKey(msg, "plot");
            }
            recordset.close();
            recordset.dispose();
          }
          mMapControl.getMap().refresh();
          mMapControl.setAction(Action.SELECT);
          m_IDSelected = -1;
          btnDelete.setVisibility(4);
          break;
        }
      case R.id.clear:
        {
          // 清空屏幕
          clearScreen();
          break;
        }
      default:
        {
          //			mMapControl.getMap().refresh();

        }
    }
  }