簡體   English   中英

部分展平的多維數組

[英]Partially flatten multidimensional array

我有一系列的輪廓和要點。 對於輪廓,調用outline.geometry.coordinates會生成一個多維坐標數組:

[[[-72.68639118392117,41.66733032827929],[-72.68630366033922,41.667449647115724], ...]] 

對於一個點,調用point.geometry.coordinates會生成一維坐標數組:

[-72.78630766033722,41.767349642115724]

點和輪廓線都保存在一個數組中。 我最終希望最終得到所有坐標對的數組,例如:

 [[[-72.68639118392117,41.66733032827929],[-72.68630366033922,41.667449647115724],[-72.78630766033722,41.767349642115724], ...]]

我嘗試過的

首先,我嘗試獲取所有坐標,其中geometries是我的輪廓和點數組:

var coordinates = geometries.map(function(outline) {return outline.geometry.coordinates});

毫不奇怪,這將創建以下數組:

[[[[-72.68639118392117,41.66733032827929],[-72.68630366033922,41.667449647115724], ...]], [-72.78630766033722,41.767349642115724]]

展平此數組將導致配對的坐標對丟失,因此我不確定如何進行此操作。 有任何想法嗎?

一種方法是標准化坐標輸出。 如果outline給您一個成對的坐標數組,則可以通過將point包裝為單個元素數組來使它們的作用相同。

大綱

[[a, b], [c, d], [e, f], ...]

[[a, b]]

這樣,當您將它們組合在一起時,它們都具有相同的形狀/尺寸。 那時,您可以使用@dandavis的技術來展平一次。


如果您可以使用instanceof來確定對象是輪廓還是點,則可以使用以下內容。

var coordinates = geometries.map(function(outline_or_point) {
  return outline_or_point instanceof outline ? outline.geometry.coordinates : [point.geometry.coordinates];
});

如果無法使用instanceof則可以執行一些鴨子輸入,例如,通過檢查outline_or_point是數組還是數字來進行。

var coordinates = geometries.map(function(outline_or_point) {
  return typeof outline_or_point[0] == 'number' ? [point.geometry.coordinates] : outline.geometry.coordinates;
});

這個怎么樣?

var geometries = [
    // point
    {
        geometry: {
            coordinates: [1, 2],
        },
    },

    // outline
    {
        geometry: {
            coordinates: [
                [
                    [3, 4],
                    [5, 6],
                ],
            ],
        },
    },
];

var coordinates = geometries.map(function(outline) {
  var coords = outline.geometry.coordinates;
  if (typeof coords[0] === 'number') {
    return [coords];
  } else {
    return coords[0];
  }
}).reduce(function (prev, next) {
    return prev.concat(next);
}, []);

console.log(coordinates);

// Output:
// [ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ] ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM