queryFeature.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. var viewer,selectedEntity;
  2. function onload(SuperMap3D) {
  3. viewer = new SuperMap3D.Viewer('SuperMap3DContainer');
  4. var scene = viewer.scene;
  5. var widget = viewer.SuperMap3DWidget;
  6. selectedEntity = viewer.entities.add({
  7. name : 'selected'
  8. });
  9. try{
  10. var promise = scene.addS3MTilesLayerByScp('http://localhost:8090/iserver/services/3D-osgb/rest/realspace/datas/jinjiang/config',{
  11. name : 'jinjiang'
  12. });
  13. SuperMap3D.when(promise,function(layer){
  14. scene.camera.setView({
  15. destination : SuperMap3D.Cartesian3.fromDegrees(118.548,24.803, 600)
  16. });
  17. },function(e){
  18. if (widget._showRenderLoopErrors) {
  19. var title = '渲染时发生错误,已停止渲染。';
  20. widget.showErrorPanel(title, undefined, e);
  21. }
  22. });
  23. }
  24. catch(e){
  25. if (widget._showRenderLoopErrors) {
  26. var title = '渲染时发生错误,已停止渲染。';
  27. widget.showErrorPanel(title, undefined, e);
  28. }
  29. }
  30. var handler = new SuperMap3D.ScreenSpaceEventHandler(scene.canvas);
  31. handler.setInputAction(function(e){
  32. var layers = scene.layers;
  33. var layer = layers.find('jinjiang');
  34. var id,url,dataSourceName,dataSetName;
  35. if(SuperMap3D.defined(layer)){
  36. id = scene.getSelectID(e.position, layer);
  37. if(SuperMap3D.defined(id)){
  38. url = 'http://localhost:8090/iserver/services/data-osgb/rest/data';
  39. dataSourceName = 'vector';
  40. dataSetName = 'test';
  41. var filter = 'SmID=' + id;
  42. var promise = queryFeature(SuperMap3D,filter,url,dataSourceName,dataSetName);
  43. SuperMap3D.when(promise,function(features){
  44. var entity = new SuperMap3D.Entity({
  45. description : createDescription(SuperMap3D,features[0].data),
  46. name : features[0].data['NAME']
  47. });
  48. viewer.selectedEntity = entity;
  49. });
  50. }
  51. }
  52. },SuperMap3D.ScreenSpaceEventType.LEFT_CLICK);
  53. }
  54. /**
  55. * 创建描述信息
  56. * @param SuperMap3D
  57. * @param properties
  58. * @returns {string}
  59. */
  60. function createDescription(SuperMap3D,properties){
  61. var simpleStyleIdentifiers = ['SMID','SMUSERID','ID','类型ID','tName','modelName'];
  62. var html = '';
  63. for ( var key in properties) {
  64. if (properties.hasOwnProperty(key)) {
  65. if (simpleStyleIdentifiers.indexOf(key) !== -1) {
  66. continue;
  67. }
  68. var value = properties[key];
  69. if (SuperMap3D.defined(value) && value !== '') {
  70. html += '<tr><td>' + key + '</td><td>' + value + '</td></tr>';
  71. }
  72. }
  73. }
  74. if (html.length > 0) {
  75. html = '<table class="zebra"><tbody>' + html + '</tbody></table>';
  76. }
  77. return html;
  78. }
  79. /**
  80. * 查询属性
  81. * @param SuperMap3D
  82. * @param id
  83. * @param url
  84. * @param dataSourceName
  85. * @param dataSetName
  86. * @returns {*}
  87. */
  88. function queryFeature(SuperMap3D,filter,url,dataSourceName,dataSetName){
  89. if(SuperMap3D === undefined){
  90. return undefined;
  91. }
  92. var defered = SuperMap3D.when.defer();
  93. var parsObj = new SuperMap.REST.GetFeaturesBySQLParameters({
  94. returnContent: true,
  95. datasetNames: [dataSourceName + ":" + dataSetName],//数据源,数据集
  96. fromIndex: 0,
  97. toIndex:-1,
  98. queryParameter : new SuperMap.REST.FilterParameter({
  99. attributeFilter : filter
  100. })
  101. });
  102. var queryService = new SuperMap.REST.GetFeaturesBySQLService(url, {
  103. eventListeners: {
  104. "processCompleted": function(resultSet){
  105. var len = resultSet.result.features.length;
  106. if(len > 0){
  107. return defered.resolve(resultSet.result.features);
  108. }
  109. return defered.reject('结果集长度为空!');
  110. }, "processFailed": function(){
  111. return defered.reject('查询失败!');
  112. }
  113. }
  114. });
  115. queryService.processAsync(parsObj);
  116. return defered;
  117. }