Я делаю веб-приложение, которое позволяет пользователям создавать маршруты на основе их ввода. Пользователь добавляет путевые точки к картам Google и берет точки широты и долготы и копирует их в таблицу на веб-сайте, которая затем отправляет данные в базу данных MySQL с помощью PHP.
У меня проблемы с добавлением точек lat и lon в мою базу данных MySQL. Я использую тип данных «ТОЧКА». Однако, когда я отправляю точку в базу данных, я получаю сообщение об ошибке «Невозможно получить объект геометрии из данных, которые вы отправляете в поле GEOMETRY».
Я провел несколько дней, исследуя эту ошибку. Я пытался добавить пространственный индекс, но MySQL не позволяет мне. Я попытался изменить таблицу, чтобы эта строка была изменена на update table set point_latlon = POINT(lat lon)
но он говорит мне, что lat не определен, и я не мог найти решение для этого.
Я действительно застрял в том, как исправить эту ошибку и исчерпал все свои ресурсы.
Это мой стол:
CREATE TABLE user_input (
point_id not null primary key auto_increment,
point_desc varchar(40),
point_LatLon not null point
);
И это мое заявление вставки:
$sql = "INSERT INTO user_input (point_desc, point_latLon) VALUES ('$_GET[waypoint_in_Desc]', 'GeomFromText($_GET[waypoint_in_LatLon])') ;";
Это мой первый пост, поэтому извиняюсь, если я что-то пропустил или неправильно отформатировал свой пост. Заранее спасибо.
Вам нужно что-то вроде
SET point_LatLon = GeomFromText('POINT(45.1234 123.4567)')
в котором параметр, который вы передаете в GeomFromText, является символьной строкой
POINT(45.1234 123.4567)
Я обнаружил, что этот вид конструкции хорошо работает, если у меня есть два числовых параметра, где ?
являются заполнителями для этих параметров lat и lon. Функция CONCAT объединяет необходимую текстовую строку.
GeomFromText( CONCAT('POINT(', ?, ' ', ?, ')') )
Бывает, что вы не можете создать пространственный индекс в таблице InnoDB в версиях MySQL до версии 5.7.4 (которая пока недоступна). Если вам нужен пространственный индекс, вам нужно использовать метод доступа MyISAM для вашей таблицы. Это немного неприятно.
Вот описание использования геопространственных данных для этой цели. http://www.plumislandmedia.net/mysql/using-mysqls-geospatial-extension-location-finder/
Других решений пока нет …