Пространственный индекс в MySQL - ОШИБКА - Невозможно получить объект геометрии из данных, которые вы отправляете в поле GEOMETRY - PullRequest
10 голосов
/ 04 мая 2011

Я новичок во всем, что касается «пространственного индекса», но, похоже, это лучшее решение для фильтрации по широте / долготе.Поэтому я добавил в таблицу столбец:

Итак, я создал поле geometry:

  ALTER TABLE `addresses` ADD `point` POINT NOT NULL 

И затем я попытался добавить индекс:

  ALTER TABLE `addresses` ADD SPATIAL INDEX ( `point` ) 

Но я получаю сообщение об ошибке:

  #1416 - Cannot get geometry object from data you send to the GEOMETRY field

Что я здесь не так делаю?

Ответы [ 2 ]

22 голосов
/ 04 мая 2011

ОК. Я нашел решение: не могу создать пространственный индекс, если некоторые поля столбца не содержат данных.После запуска

  UPDATE `addresses` SET `point` = POINT( lng, lat )

Все работало нормально.

3 голосов
/ 09 июня 2012

У меня была такая же ошибка (невозможно получить объект геометрии из данных, которые вы отправляете в поле GEOMETRY), но при попытке импортировать пространственные данные из дампа mysql.Я обнаружил, что некоторые строки имели нулевые (X нулевые или Y нулевые) пространственные данные, даже если столбец был «НЕ НУЛЬ» ..

Проверьте, есть ли у вас такая же проблема, как я описываю сэтот SQL:

ВЫБЕРИТЕ ИД ИЗ ПОЛОЖЕНИЙ, ГДЕ X (координаты) НУЛЬ ИЛИ Y (координаты) НУЛЬ;

Если у вас есть несколько строк, то это то, что сработалодля меня:

ОБНОВЛЕНИЕ местоположений УСТАНОВИТЬ координаты = ТОЧКА (0,0) ГДЕ X (координаты) НУЛЬ ИЛИ Y (координаты) НУЛЬ;

Тогда попробуйтеmysqldump (или из phpmyadmin) и импортируйте снова.

...