Измените MySQL-spatial на geoJson с помощью PHP

У меня есть файл формы, и я хочу показать его в Интернете с помощью листовки (http://leaflet.cloudmade.com/). Поскольку листовка поддерживает только geoJSON, я должен изменить файл shp на geoJSON. Это легко, так как я могу использовать функцию «сохранить как» в Quantum-GIS.

Хотя я могу использовать geojson в качестве базы данных (читая, редактируя и записывая файл программно), я думаю, что лучше использовать «настоящую» базу данных. My-SQL — самый популярный, и он поддерживает пространственные данные, поэтому я решил использовать MySQL.

Сценарий:

  1. Измените shp на MySQL (я использую ogr2ogr и просто запускаю эту команду: ogr2ogr -f "MySQL" MySQL:"geo,user=root,host=localhost,password=toor" -lco engine=MYISAM airports.shp< /эм>)
  2. Загрузить базу данных MySQL в geojson ‹ — вот проблема
  3. Использование ajax для получения geojson и изменения макета ‹ - это должно быть легко, я хорошо разбираюсь в JQuery

В таблице My MySQL есть столбец типа "GEOMETRY". Посмотрите определение таблицы ниже:

CREATE TABLE IF NOT EXISTS `airports` (
  `OGR_FID` int(11) NOT NULL AUTO_INCREMENT,
  `SHAPE` geometry NOT NULL,
  `cat` decimal(10,0) DEFAULT NULL,
  `na3` varchar(80) DEFAULT NULL,
  `elev` double(32,3) DEFAULT NULL,
  `f_code` varchar(80) DEFAULT NULL,
  `iko` varchar(80) DEFAULT NULL,
  `name` varchar(80) DEFAULT NULL,
  `use` varchar(80) DEFAULT NULL,
  UNIQUE KEY `OGR_FID` (`OGR_FID`),
  SPATIAL KEY `SHAPE` (`SHAPE`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=77 ;

Есть ли способ преобразовать такую ​​таблицу в формат geojson? (Я предпочитаю простой способ, но если нет, просто измените столбец на массив, как это приемлемо)

EDIT: я использую geophp, написанный phayes. https://github.com/phayes/geoPHP/wiki/Example-format-converter . Это решает основную проблему. Только нужно немного запутаться с добавлением функции и т. Д. Есть ли более простое решение?


person goFrendiAsgard    schedule 03.06.2012    source источник


Ответы (1)


Хотя может не быть прямого метода преобразования пространственного объекта mysql в geojson, вы можете попробовать следующее:

  • получить WKT (известный текст) объекта. (Справочник по MySQL)
  • конвертировать из WKT в geojson (Выполнено в Perl, хотя вам следует сможете найти его на других языках или написать свой на javascript);

Обратите внимание, что простой вызов jsonEncode() для объекта, как предлагали другие, не даст geoJson.

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

Самый простой способ сделать это - сохранить геоджсон в виде простого текста, как вы предложили. Если по какой-либо причине вам также нужна геометрия, хранящаяся в собственном формате, вы можете сохранить ее в другом столбце. Единственным недостатком является синхронизация двух столбцов.

person Community    schedule 15.06.2012