Как динамически создавать массивы мультиполигонов? - PullRequest
1 голос
/ 23 сентября 2019

Моя цель - построить turf.js мультиполигон.Этот вид жесткого кодирования работает нормально:

const searchWithin = turf.multiPolygon(
[
    [[
        [-0.607051, 44.840753], 
        [-0.543708, 44.832962], 
        [-0.52225, 44.820544], 
        [-0.566367, 44.808853], 
        [-0.586367, 44.788853], 
        [-0.607051, 44.840753]
    ]],
    [[
        [5.39014, 43.279295], 
        [5.393069, 43.279249], 
        [5.391814, 43.278421], 
        [5.390709, 43.278749], 
        [5.3909, 43.2785], 
        [5.39014, 43.279295]
    ]]
]);

Как видите, перед получением массивов координат есть 3 уровня скобок.Исходя из базы данных, я получаю:

[
    [
        [-0.607051, 44.840753], 
        [-0.543708, 44.832962], 
        [-0.52225, 44.820544], 
        [-0.566367, 44.808853], 
        [-0.586367, 44.788853], 
        [-0.607051, 44.840753]
    ],
    [
        [5.39014, 43.279295], 
        [5.393069, 43.279249], 
        [5.391814, 43.278421], 
        [5.390709, 43.278749], 
        [5.3909, 43.2785], 
        [5.39014, 43.279295]
    ]
]

Чтобы получить данные из базы данных:

.subscribe((response) => {
      this.locations = response;
      this.polygonsArray.push(this.locations);
      this.locations.forEach(element => {          
this.polygons.push(element.geoDefinition.features['0'].geometry.coordinates);

с полигонами, объявленными как:

polygons: number[][][] = [];

Я пытался:

this.polygons.push('['+element.geoDefinition.features['0'].geometry.coordinates)+']';

но координаты - это числа, поэтому я не могу объединить их.

Как можно получить эту структуру с 3 квадратными скобками, пожалуйста?Любая помощь будет очень полезна.

Заранее благодарю за помощь.

1 Ответ

1 голос
/ 23 сентября 2019

Не ясно, ожидаемая структура.Но первые примечательные вещи таковы:

  1. Если полигоны представляют собой 3-х мерный массив, например polygons: number[][][] = [];, вы не можете напрямую вставить в него число, например polygons.push(5), вам необходимо принять во внимание структуру:

polygons[0][0].push(5) или polygons.push([[5]]);

Другая вещь this.polygonsArray.push(this.locations); - она ​​должна быть не менее this.polygonsArray.push(...this.locations);, поскольку push добавляет весь массив this.locations в качестве первого элемента this.polygonsArray.

И последнее.Если вы нажимаете что-то вроде this.polygons.push('['+something+']'); - вы просто помещаете строку в простой массив.Вместо этого вы можете использовать

this.polygons[0].push(something);

Надеюсь, что это может дать некоторые идеи, как организовать трехмерную структуру в вашем случае.

...