首页 / 浏览问题 / WebGIS / 问题详情
如何在cesium中绘制通过iserver请求返回的面?
30EXP 2023年12月28日
通过iserver查询返回了很多 feature,是通过add entity的模式添加还是将其变为一个图层在进行添加?能否提供一些例子

1个回答

您好,您可以通过将每个面作为单独的 Entity 添加

const features = queryResult.features; // 假设查询结果是一个包含面数据的数组

for (let i = 0; i < features.length; i++) {
  const feature = features[i];

  const entity = new Cesium.Entity({
    polygon: {
      hierarchy: Cesium.Cartesian3.fromDegreesArray(feature.geometry.coordinates),
      material: Cesium.Color.fromCssColorString('#ff0000').withAlpha(0.5),
    },
    properties: {
      id: feature.properties.id,
      name: feature.properties.name,
    },
  });

  viewer.entities.add(entity);
}

也可以变成一个图层添加的

const features = queryResult.features; // 假设查询结果是一个包含面数据的数组

const geoJson = {
  type: 'FeatureCollection',
  features: features.map((feature) => ({
    type: 'Feature',
    geometry: {
      type: 'Polygon',
      coordinates: [feature.geometry.coordinates],
    },
    properties: {
      id: feature.properties.id,
      name: feature.properties.name,
    },
  })),
};

const dataSource = Cesium.GeoJsonDataSource.load(geoJson);
viewer.dataSources.add(dataSource);

700EXP 2023年12月28日

您好,谢谢你的回答。在使用了第一种方法后,浏览器控制台报错:Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'length')
    at _0x39dae8.<computed> [as fromDegreesArray] (Cesium.js:35:21057)

使用的是https://github.com/SuperMap/vue-iClient3D_for_Cesium这个包

使用第二种方法则会提示:

TypeError: Cannot read properties of undefined (reading 'length')
    at _0x39645e (Cesium.js:270:65212)
    at _0x42a98e (Cesium.js:270:67529)
    at _0x1ba66d (Cesium.js:270:60475)
    at _0x1794d8 (Cesium.js:270:60860)
    at Cesium.js:270:70401
    at _0x1df91a.then (Cesium.js:59:8317)
    at _0x476c8c (Cesium.js:59:7587)
    at _0x823e88 (Cesium.js:270:70262)
    at Cesium.js:270:77440
    at _0x1df91a.then (Cesium.js:59:8317)

您看下您返回的features有length属性吗? queryResult.features 是不是没有读到?

返回的features是个数组,是存在length属性的。

您替换下官网最新的cesium包试试

经过查看发现是feature.geometry.coordinates属性是undefined,返回查询的每个feature的geometry结构如下。我该怎样修改获得上面的coordinates?

您面坐标数据是不是在points里面保存的呀
我的数据是超图iserver发布的面矢量数据,通过请求返回的面features。想请教一下如果想在cesium上展开iserver返回的面数据我应该怎么做。

把feature.geometry.coordinates修改成feature.geometry.points后报错:

您的查询服务url是什么样的
...