首页 / 浏览问题 / 组件GIS / 问题详情
已有GeoCardinal曲线对象,怎么生成关于它的新的Points2D集合?
30EXP 2020年03月24日

我在图上取了4个点,用这四个点得到一个Points2D集合生成了一条GeoCardinal曲线,如图所示为蓝色线。

现在我想取12个在这条曲线上的点,再生成一个Points2D集合,用折线连接这些点,也就是用折线逼近曲线,类似于下面我用绘图软件绘制的效果,如黑色线所示。我该怎么取这12个点生成一个Points2D集合呢?

1个回答

您好,可以将样条曲线转为线对象,然后获取线对象的节点坐标。

GeoCardinal.convertToLine(int pointCountPerSegment)
9,237EXP 2020年03月25日

参数pointCountPerSegment在文档中的解释是 - 二维 Cardinal 样条曲线的相邻控制点之间插值拟合的节点数。请问可以说一下具体是什么意思吗?

比如说我调用,GeoCardinal.convertToLine(5),设置参数为5,是不是把GeoCardinal对象分为了5段折线,然后返回5个GeoLine对象?
还是返回一个Geoline对象包含5个折线段?
您好,这个值代表的是曲线拟合值,不是代表的分为几段,按经验值设置为73,值越小,转成的线的节点就越少。
您好,也就是说设置Geoline=GeoCardinal.convertToLine(73),得到的Geoline是一个包含73个节点的Geoline对象吗?
不是这个意思,就是一个拟合值,设置值越大越接近曲线,值越小节点越少,转换的线也和原始的曲线差别很大。你可以将转成的线添加到数据集中看下效果
您好,我试了一下,明白了。还有一个问题想麻烦您一下,我得到的Geoline对象,我要怎么得到构成他的点集合Point2DS对象呢?

您好,通过GeoLine.getPart(int index)参数为0就可以获取到该对象节点坐标串。可以在帮助文档搜索GeoLine

您好,我是新创建一个Geoline临时变量 templine,后调用templine.getpart(0)报错了,报错如下:

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: index
索引越界

代码如下:

       GeoLine tempLine=new GeoLine();
        tempLine=curlyline.convertToLine(3);

//curlyline是之前的curlyline.convertToLine(73)的GeoCardinal对象

        Point2Ds subsetDs=new Point2Ds();
        subsetDs=tempLine.getPart(0);//这句话报错索引越界。
        Point2D[] array=subsetDs.toArray();

修改:非常感谢您,我已经解决了,改成

Point2Ds subsetDs=tempLine.getPart(0);就可以了。
curlyline这个是GeoCardinal对象还是转换后的线对象,没看懂你这样写的逻辑,你直接把GeoCardinal对象转换后的线对象GeoLine获取节点就行了,
...