在特定用户的选择下,我从给定的对象在给定的坐标处绘制出必要的多边形,并以图形的形式将它们添加到地图中。然后我想在地图上显示选区,并使用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);
如果(objGeoJSON。type == "多边形"){
var坐标= objCoordinates[0];
}
其他{
var坐标= objCoordinates[i][0];
}
不。这不是错误。我只是没有展示所有的代码,因为这根本不是问题所在。
问题就在这里。当我加上很多国家。或者很多多边形。视图GOTO到几何图形或GOTO到所有图形都不能工作,在这种情况下。例如
this.view.goTo ({
目标:this.view.graphics
}) .catch (this.catchAbortError);
在这一点上,我可能只是建议手动计算范围,并放大:
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);
在这种情况下,问题似乎是因为整个范围都跨越了国际日期变更线。因此,单个extent对象的“x”值将超出坐标系统所定义的边界。你可以通过使用Extent.normalize.在这种情况下,最后一行将是:
this.view.goTo (extent.normalize ()) .catch (this.catchAbortError);
虽然这篇文章是来自一个完全不同的API,在帖子中使用的图像被标记为解决方案,有助于说明你所看到的。