Тип данных для хранения долготы/широты в Mysql

'43.005895','-71.013202'

Попытка использовать:

INSERT INTO table(fanDetLocZip, fanDetLocCity, fanDetLocState, fanDetLocLat, fanDetLocLong, fanDetLocTZ, fanDetLocDST)  
VALUES(00210, 'Portsmouth', 'NH', '43.005895', '-71.013202', -5, 1);

В настоящее время я использую тип данных SPATIAL, GEOMETRY.

Это дает мне такие ошибки, как:

Невозможно получить объект геометрии из данных, которые вы отправляете в поле GEOMETRY.

Все значения имеют 2 цифры и 6 знаков после запятой. Как мне сохранить это в mysql?

Ошибка, которую я получаю при использовании:
INSERT INTO Table(fanDetLocZip, fanDetLocCity, fanDetLocState, fanDetLocLatLong, fanDetLocTZ, fanDetLocDST)
VALUES(00210, 'Portsmouth', 'NH', point(43.005895,-71.013202), -5,1)

Изображение ошибки: img5


person CodeTalk    schedule 05.03.2012    source источник
comment
Можете ли вы добавить определение таблицы (оператор CREATE)? Какой столбец имеет тип GEOMETRY?   -  person ypercubeᵀᴹ    schedule 05.03.2012
comment
Это две колонки. У вас есть столбец типа GEOMETRY или POINT?   -  person ypercubeᵀᴹ    schedule 05.03.2012
comment
ДА, эти два типа ГЕОМЕТРИЯ   -  person CodeTalk    schedule 05.03.2012
comment
Пожалуйста опубликуйте таблицу создания или описания? Без него нет смысла давать советы.   -  person Michael Durrant    schedule 05.03.2012
comment
@ user975947: Выбранные вами имена (Lat и Long) указывают на то, что вы не поняли, как работают поля геометрии. У вас есть широта и долгота, хранящиеся в одном поле.   -  person ypercubeᵀᴹ    schedule 05.03.2012
comment
См. ошибку, с которой я столкнулся выше.   -  person CodeTalk    schedule 05.03.2012
comment
Должно ли введенное значение выглядеть так?   -  person CodeTalk    schedule 05.03.2012


Ответы (2)


Вы можете использовать POINT() для хранения в столбце типа GEOMETRY или POINT:

POINT(43.005895, -71.013202)

Если столбец Geometry называется geom, вы можете использовать это:

INSERT INTO table
    ( ..., geom, ...) 
  VALUES
    ( ..., POINT(43.005895, -71.013202), ...)

Если вы хотите показать сохраненные данные, вы можете использовать X() и Y() функции:

SELECT X(geom) AS x, Y(geom) AS y
FROM table 
person ypercubeᵀᴹ    schedule 05.03.2012
comment
Это полезно, я предполагаю, что просто не добавил point() . Никогда раньше не использовал значения геометрии. Спасибо ypercube! - person CodeTalk; 05.03.2012
comment
Когда я использую: INSERT INTO Table(fanDetLocZip, fanDetLocCity,fanDetLocState,fanDetLocLatLong,fanDetLocTZ,fanDetLocDST) VALUES(00210,'Portsmouth','NH',point(43.005895,-71.013202),-5,1) он вводит странное значение . Смотрите скриншот выше. - person CodeTalk; 05.03.2012
comment
Странно, ну хоть работает. Может быть, это ошибка браузера или что-то в этом роде. Спасибо YPerCube! - person CodeTalk; 05.03.2012
comment
Разве ТОЧКА не должна быть ТОЧКОЙ (43.005895 -71.013202), как описано здесь? dev.mysql.com/doc/refman/5.0/ ru/gis-wkt-format.html - person nolazybits; 12.10.2012

Почему бы вам не использовать вместо этого тип Float для широты/долготы?

Float (10,6)
person Kevin Fauver    schedule 05.03.2012
comment
float не подходит для хранения широты и долготы. Double — лучший тип данных для хранения широты/долготы. Читать полное обсуждение - person ArunRaj; 27.02.2014