首页 / 浏览问题 / 组件GIS / 问题详情
数据集制作节点动画
13EXP 2017年04月20日
用现有的一些点数据应该怎么制作节点动画?

1个回答

用这些点构造一条运动轨迹,也就是一条线,目前只支持Geometry3D类型,然后将轨迹线赋予动画参数NodeAnimation.setTrack()
1,560EXP 2017年04月20日
之前这么做了,但是运行的时候模型跑不起来!用示例的手动绘制轨迹就可以,有什么需要特别注意的地方吗?
如果用示例的手动绘制就可以,需要对比下你的轨迹线和绘制轨迹线有否有不同,因为轨迹线要求地形点,也就是具有高程值。
不是太明白,能不能再具体些,点的数据需要有什么要求?
将具有高程值的三维点构造的三维线对象,这个三维线对象就可以作为运动轨迹路线,将其设置为动画的轨迹即可,如果还是不明白,可以调试下示例程序,参考下示例程序的轨迹线的构造。
思路是明白,关于高程值这个概念,能不能用具体例子描述下,比如两个三维点,xyz坐标各是多少,这两个点构造的三维线就能够作为运动轨迹路线。
高程值其实就是指z值,只要有z值就可以了,xyz的具体多少,就是绘制的轨迹路线的点坐标啊,xy都是经纬度坐标值,范围为正负180和正负90内,建议调试代码看看示例里的轨迹线点坐标值,能更好理解。
试了很多遍,就是不行,数据就是有问题,把帮助文档的示例数据复制过去也不会动,但是手动绘制轨迹就是可以。
你复制的数据是什么数据啊,你可以把你现有的点数据发我这边测试看看。
Point3Ds pts = new Point3Ds();
            Point3D pt = new Point3D(116.390697, 39.9165005, 0);
            pts.Add(pt);
            pt.X = 116.391;
            pt.Y = 39.9165055;
            pts.Add(pt);
            pt.X = 116.3915;
            pt.Y = 39.9165055;
            pts.Add(pt);
你的z值设置为0,意味着点已经贴地了,而模型与地形有一定高程值,故节点构造的轨迹线已经不在模型表面上了,所以节点动画看不见,你将Z值都设置为6试试。
好的我试试看
还是不行,模型就在起点不动了

 //设置添加到KML图层中的模型的节点动画信息
            GeoModel animationModel = (feature.Geometry as GeoPlacemark).Geometry as GeoModel;
            NodeAnimation ani = animationModel.NodeAnimation;
            //设置动画运行周期
            ani.Length = 8.0;
            //设置动画播放模式
            ani.PlayMode = PlayMode.Loop;
            //设置节点动画轨迹
            Point3Ds pts = new Point3Ds();
            Point3D pt = new Point3D(116.390697, 39.9165005, 6);
            pts.Add(pt);
            pt.X = 116.391;
            pt.Y = 39.9165055;
            pts.Add(pt);
            pt.X = 116.3915;
            pt.Y = 39.9165055;
            pts.Add(pt);
            GeoLine3D geoLine = new GeoLine3D(pts);
            ani.SetTrack(geoLine);
            //启用节点动画
            ani.IsEnabled = true;

设置动画的步骤有不对或者顺序弄错的地方吗?
我这边刚刚在示范程序NodeAnimationDEMO里测试了,自定义的点串构造的轨迹是可以实现动画。代码如下,修改这个函数就好了,demo运行后依然需要“点击创建路线”--场景里刺点,确保geoline3d不为null,可以进入修改的函数代码:

    /**
     * @author:Supermap
     * @注释 :开启节点动画
     */
    private void startnodeAnimation()
    {
        GeoPlacemark placemark = (GeoPlacemark) feature3d.getGeometry();
        GeoModel myGeoModel = (GeoModel) placemark.getGeometry();
        nodeAnimation = myGeoModel.getNodeAnimation();
        nodeAnimation.setPlayMode(nodeAnimationPlayMode);
        if (geoline3d != null)
        {
            nodeAnimation.setLength(mTime);
            Log.v("lzw", "startnodeAnimation mTime=" + mTime);
            nodeAnimation.setEnabled(true);
            // 临时加的
            Point3Ds pts = new Point3Ds();
            Point3D pt = new Point3D(116.471949, 39.914622, 5.015390);
            pts.add(pt);
            pt.setX(116.471926);
            pt.setY(39.914412);
            pts.add(pt);
            pt.setX(116.471558);
            pt.setY(39.914367);
            GeoLine3D mGeoLine3D = new GeoLine3D(pts);
            System.out.println(mGeoLine3D.toXML());
            nodeAnimation.setTrack(mGeoLine3D);
            // nodeAnimation.setTrack(geoline3d);
        } else
        {
            nodeAnimation.setEnabled(false);
        }
    }
.net要怎么做,刺点这个操作必须要做吗?

.net与java的实现逻辑是一样的,只是语法不一样。.net组件就参考这个链接里的demo吧。

http://support.supermap.com.cn/product/search.aspx?querystr=节点动画

查不到啊

点击下超图代码:

还是不行,设置好时间点的时候模型的位置根本就没有发生改变
DEMO能行是吧?换你的数据也就是换个geoline3d对象,所以比较简单,对比示例代码进行修改。如果依然不会,那么就直接打我们技术支持电话吧,这样对问题更直观些,400-8900-866
...