Cesium 加载geoserver发布的WFS点要素服务

   if (!window.my_labels) {
        window.my_labels = new Cesium.CustomDataSource('my_labels');
        viewer.dataSources.add(window.my_labels);
      }

      let props = {
        wfs_url: "http://IP:PORT/geoserver/sanwei/wfs",//geoserver wfs服务地址
        wfs_layer: "sanwei:layerName"//图层
      }

      let cameraExtent = viewer.camera.computeViewRectangle();//视窗范围
      let picks = [];
      if (cameraExtent) {
        let west = parseFloat(Cesium.Math.toDegrees(cameraExtent.west).toFixed(8));
        let south = parseFloat(Cesium.Math.toDegrees(cameraExtent.south).toFixed(8));
        let east = parseFloat(Cesium.Math.toDegrees(cameraExtent.east).toFixed(8));
        let north = parseFloat(Cesium.Math.toDegrees(cameraExtent.north).toFixed(8));
        picks = [
          [west, south],
          [east, north]
        ];
      }
      let wfsurl = props.wfs_url + "?service=WFS&version=1.1.0&request=GetFeature&typename=" +
        props.wfs_layer + "&maxFeatures=200&outputFormat=application/json&srsname=EPSG:4326";
      if (picks.length > 0) {
        wfsurl += `&BBOX=${picks[0][0]},${picks[0][1]},${picks[1][0]},${picks[1][1]},EPSG:4326`
      } else {
        //如果没有获取到视窗范围就不继续执行
        return
      }
      fetch(wfsurl).then(result => {
        if (!result.ok) {
          throw new Error(
            `couldn't load "${result.url}". Request failed with status ${result.status} : ${result.statusText}`
          );
        }
        result.json().then((json) => {
          let { features } = json;
          if (window.my_labels && features && features.length > 0) {
            window.my_labels.entities.removeAll()
            for (let i = 0; i < features.length; i++) {
              let { geometry, properties } = features[i];
              let { coordinates } = geometry;
              window.my_labels.entities.add({
                position: Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1]),
                label: {
                  text: properties.areaname || "未知地名",
                  showBackground: true,
                  heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND,
                }
              });
            }
          }
        });
      }).catch(error => {
        return Promise.reject(error);
      }).finally(() => {
      });

1698716806492.jpg
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容