2016-02-14 5 views
0

Я работаю над программным обеспечением, которое позволяет пользователю добавлять указатели на карту таким образом, чтобы завершить цикл и установить географическую границу. Как так:MySql Geometry: Как заполнить таблицу мультиполигоном из многомерного массива?

enter image description here

Это затем строит многомерный массив, готовый быть сохранены в MySql как MultiPolygon.

Каждый массив выглядит примерно так - хотя и немного менее урезанный.

[ 
    [ 
    [68.935,-48.625], 
    [69.58,-48.94], 
    [70.525,-49.065], 
    [70.56,-49.255] 
    ] 
] 

или

[ 
    [ 
    [ 
     [-77.53466,23.75975], 
     [-77.78,23.71], 
     [-78.03405,24.28615], 
     [-77.53466,23.75975] 
    ] 
    ], 
    [ 
    [ 
     [-77.82,26.58], 
     [-77.82,26.58] 
    ] 
    ], 
    [ 
    [ 
     [-77,26.59], 
     [-77,26.59] 
    ] 
    ] 
] 

Многомерная глубина массивы не имеет предела, и устанавливается только как детальнее вход пользователей и [или], если область разбивается на несколько частей - думаю острова.

мое текущее понимание пространственных функций MySql очень ограничено и я в настоящее время ведут верить, что заполнение таблицы с MultiPolygon требует использования ряда LINESTRING аргументов, например:

GeomFromText('MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))') 

Есть в любом случае заполнить таблицу мультиполигоном, созданным из многомерного массива? Что-то вроде:

GeomFromText('MultiPolygon(([ 
           [ 
           [ 
            [-77.53466,23.75975], 
            [-77.78,23.71], 
            [-78.03405,24.28615], 
            [-77.53466,23.75975] 
           ] 
           ], 
           [ 
           [ 
            [-77.82,26.58], 
            [-77.82,26.58] 
           ] 
           ], 
           [ 
           [ 
            [-77,26.59], 
            [-77,26.59] 
           ] 
           ] 
          ] 
          ))') 

ответ

2

Есть 2 способа сделать это.

  1. Преобразование многоуровневого массива в массив LINESTRINGS затем использует функции MySQL или что-то похожее на функцию IMPLODE для генерации Multipoligon, как в вашем примере.
  2. Преобразовать массив JSON и использовать MySQL 5.7 функция ST_GeomFromGeoJSON: https://dev.mysql.com/doc/refman/5.7/en/spatial-geojson-functions.html
Смежные вопросы