在一个应用程序中我正在使用坐标数组 - 当我将功能点记录到控制台时,我返回了一个包含5个坐标对的数组:
slice()
但是,当我使用var poly = data.features[0].geometry.coordinates.slice(0, -1);
console.log(poly)
排除数组的 last 元素时 - 应返回4而不是5 - 我返回一个空白数组
slice()
为什么会发生这种情况,为什么{
"name": ["The name field is required."],
"type": ["The type field is required."],
"ceiling_amount": ["The ceiling amount field is required."]
}
方法在这种情况下不起作用?
答案 0 :(得分:3)
Poly是一个包含单个元素的数组,你真正想要的是
var poly = data.features[0].geometry.coordinates[0].slice(0, -1);
答案 1 :(得分:0)
正如您在屏幕截图中看到的那样,
var poly = data.features[0].geometry.coordinates
返回[Array(5)],它本质上是一个二维数组。要排除嵌套数组中的最后一个元素,您需要执行
// coordinates[0] returns the first item in the array which is Array(5)
var poly = data.features[0].geometry.coordinates[0].slice(0, -1);
要保持二维数组减去最后一个坐标对,您需要递归克隆每个元素。
var poly = data.features[0].geometry.coordinates.map(function(val) {
return val.slice(0, -1);
});
答案 2 :(得分:0)
看起来您正在使用GeoJSON数据,并且想要在环的末尾去除重复的坐标。在这种情况下,您应该知道您的coordinates
数组(具有单个元素且其中包含点数组的数组)实际上可能包含多个元素。在GeoJSON中,polygon
与几何中的概念不同。地理“多边形”由外“环”和零个或多个内环组成。 “环”就像几何中的多边形。
多边形中的第一个环 - 您的示例所具有的单个环 - 是“外环”,即您要映射的区域的外边界。任何额外的环都是“内环”,表示从该区域排除的孔。例如,其中有两个湖泊的州或县可能表示为具有三个环的多边形,一个用于外边界,另外两个用于每个湖泊。
另外,在假设geometry.type
完全是geometry.coordinates
之前,您是否在检查Polygon
?您可能会意外收到MultiPolygon
,这是一个多边形数组,所以现在您还有一个级别的嵌套数组。 GeoJSON数据源通常会根据需要使用Polygon
或MultiPolygon
。
考虑一下犹他州。它有一个外部边界,当然里面有大盐湖(还有一些较小的湖泊)。所以犹他州可以用Polygon
代表国家边界的外环和大盐湖和其他湖泊的内环。
但是夏威夷呢?它由几个岛屿组成。国家没有单一的外部边界。每个岛屿都需要自己的外部边界。因此,夏威夷必须由MultiPolygon
表示,即Polygon
数组的数组。每个岛都有自己的Polygon
。
无论你写的是什么代码,都应该考虑到所有这些。您应区分Polygon
和MultiPolygon
,对于后者,请处理构成Polygon
的每个MultiPolygon
。如果你从每个多边形的外环剥去最后一个元素,你可能也希望为内环做到这一点。有关详细信息,请参阅GeoJSON RFC。
我会提供一些示例代码来完成所有这些,但我不清楚你正在努力的方向。但这至少应该给你一些指导。