查看goTo目标,如果有许多多边形和图形,寻找最佳解决方案。

689
29
4星期前
DimaY
通过
新的因素

在特定用户的选择下,我从给定的对象在给定的坐标处绘制出必要的多边形,并以图形的形式将它们添加到地图中。然后我想在地图上显示选区,并使用GOTO方法。多边形在循环中添加。我已经试过各种方法了。然后放大。在一个循环中变化。在循环之后。最后,它还是有点笨拙。这不是正确的地方。不是太小就是太大。 If, for example, the United States, then it is not in the middle at all. How best to use To zoom the user on the map to the right place? Is there a better optimal solution? Has anyone encountered similar problems?

我的代码是这样的:

const map = new map ({
地面:“world-elevation”,
基础图:grayBasemap
});

const view = new SceneView
容器,
地图:地图,
qualityProfile:“高”,
变焦:4
});

this.view.graphics.removeAll ();

For (var I = 0;i < objCoordinates.length;我+ +){
var坐标= objCoordinates[0];
var polygon = new polygon ();
polygon.addRing(坐标);

var polygonGraphic = new Graphic({
几何:多边形,
象征:fillSymbol
});

this.view.graphics.add (polygonGraphic);

this.view.goTo ({
目标:this.view.graphics
}) .catch (this.catchAbortError);

0荣誉
29日回复
DimaY
通过
新的因素

我已经看了441次了,所以没人能提点建议吗?

遗憾的是。: disappointed_face:

0荣誉
JoelBennett
通过
临时贡献者III

我看到你循环的第一行是:

var坐标= objCoordinates[0];

这肯定会影响你的结果,我认为你更愿意:

var坐标= objCoordinates[i];

0荣誉
DimaY
通过
新的因素

如果(objGeoJSON。type == "多边形"){
var坐标= objCoordinates[0];

其他{
var坐标= objCoordinates[i][0];

不。这不是错误。我只是没有展示所有的代码,因为这根本不是问题所在。

问题就在这里。当我加上很多国家。或者很多多边形。视图GOTO到几何图形或GOTO到所有图形都不能工作,在这种情况下。例如

this.view.goTo ({
目标:this.view.graphics
}) .catch (this.catchAbortError);

0荣誉
JoelBennett
通过
临时贡献者III

关于此代码:

this.view.goTo ({目标:this.view.graphics}) .catch (this.catchAbortError);

这个。view。graphics是一个集合,但goTo文档不指定支持集合。我建议传递一个在文档中指定的值,比如一个图形数组:

this.view.goTo (this.view.graphics.toArray ()) .catch (this.catchAbortError);
0荣誉
DimaY
通过
新的因素

谢谢你的回复。唉,但这无济于事。我已经尝试了几何数组和图形数组。当有很多多边形和图形时,我没有这样做,它不能正确工作。

0荣誉
JoelBennett
通过
临时贡献者III

在这一点上,我可能只是建议手动计算范围,并放大:

Var extent = null;For (var I = 0;i < objCoordinates.length;i++) {//etc…If (extent === null) extent = polygon.extent.clone();其他extent.union (polygon.extent);} this.view.goTo(程度).catch (this.catchAbortError);
0荣誉
DimaY
通过
新的因素

再次感谢大家!读一个善于思考的人的书,了解他在说什么是很好的。

如果我理解正确,那么另一个想法是收集不是几何图形数组,作为目标,即收集每个多边形的范围和?

0荣誉
DimaY
通过
新的因素

谢谢。我试过了,这个解决方案在很多情况下看起来真的更好。但有一个案例,我附上了一张图片文件,上面显示了我希望它在现实中是怎样的,以及出于某种原因它是如何产生的。我不明白为什么它偏离了创建的多边形。例如,在有许多多多边形的情况下,比如美国和周围的岛屿。甚至不知道为什么会这样?

0荣誉
JoelBennett
通过
临时贡献者III

在这种情况下,问题似乎是因为整个范围都跨越了国际日期变更线。因此,单个extent对象的“x”值将超出坐标系统所定义的边界。你可以通过使用Extent.normalize.在这种情况下,最后一行将是:

this.view.goTo (extent.normalize ()) .catch (this.catchAbortError);

虽然这篇文章是来自一个完全不同的API,在帖子中使用的图像被标记为解决方案,有助于说明你所看到的。

0荣誉