如何在Cesium地图中添加图标而不是点标记?

7

我想在Cesium地图上添加图标而不是画一个点。目前我在执行以下代码,但是想要将下面的点替换为实际的图标。我一直在查看Cesium文档,但找不到任何可以做到这一点的内容。谢谢任何建议。

var points = scene.primitives.add(new Cesium.PointPrimitiveCollection());

points.add({
    position : new Cesium.Cartesian3.fromDegrees(longitude, latitude),
    color : colorDot,
    outlineColor : Cesium.Color.WHITE,
    outlineWidth : width
});
2个回答

5
在Cesium中,这被称为广告牌。它们的创建方式与点基本相同,除了图像通常是从URL加载的。

https://cesiumjs.org/Cesium/Build/Documentation/BillboardCollection.html

// Create a billboard collection with two billboards
var billboards = scene.primitives.add(new Cesium.BillboardCollection());
billboards.add({
  position : new Cesium.Cartesian3(1.0, 2.0, 3.0),
  image : 'url/to/image'
});
billboards.add({
  position : new Cesium.Cartesian3(4.0, 5.0, 6.0),
  image : 'url/to/another/image'
});

我尝试了上面的代码并尝试了一个本地文件的URL,但是出现了错误,无法加载本地文件。 - user3470688
Web浏览器不允许JavaScript读取本地文件,这是有充分理由的。您的图像需要托管在同一台服务器上,该服务器托管您的Cesium副本,或者托管在启用了CORS的服务器上,以允许其他站点的JavaScript请求资产。 - emackey

1

关于广告牌,补充@paraquat的正确答案:Cesium包含一个“Pin Builder”,可以用来制作典型的地图图标作为广告牌。这里是演示

var viewer = new Cesium.Viewer('cesiumContainer');

var pinBuilder = new Cesium.PinBuilder();

var url = Cesium.buildModuleUrl('Assets/Textures/maki/grocery.png');
var groceryPin = Cesium.when(pinBuilder.fromUrl(url, Cesium.Color.GREEN, 48), function(canvas) {
    return viewer.entities.add({
        name : 'Grocery store',
        position : Cesium.Cartesian3.fromDegrees(-75.1705217, 39.921786),
        billboard : {
            image : canvas.toDataURL(),
            verticalOrigin : Cesium.VerticalOrigin.BOTTOM
        }
    });
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接