2014-10-31 2 views
0

да, я знаю, что этот вопрос когда-либо задавался много времени, но все кажется устаревшим с 2012 года, основа вопроса thoses/ansewers, Я попытался выполнить классическое расстояние поиска с помощью столбца POINT , но у меня есть некоторые проблема неразрешимая ..Mysql POINT column для поиска расстояний

нормально мой столб POINT выглядит так?

0x00000000010100000085B1852007052040C0B2D2A414684840 

Вот все мои шаги, я не в состоянии увидеть, что случилось, я сделал на основе из последних стека вопросов/ответов.

Я использую mariadb 10 с Heideisql gui.

У меня есть 2 colums широты и долготы, я создал столбец geopoints POINT, Заселите GeoPoint так:

UPDATE geoFRA 
SET  geopoints = GeomFromText(CONCAT('POINT (', lon, ' ', lat, ')')) 

После этого моя колонка geopoints выглядит следующим образом:

0x00000000010100000085B1852007052040C0B2D2A414684840 

Тогда я пытаюсь выполнить запрос в 2-х манипуляторах, сначала попробуйте:

[email protected] = 48.88; 
[email protected] = 2.34; 

SELECT * 
FROM geoFRA 
WHERE MBRContains(LineFromText(CONCAT(
     '(' 
     , @lon + 700/(111.1/cos(RADIANS(@lon))) 
     , ' ' 
     , @lat + 700/111.1 
     , ',' 
     , @lon - 700/(111.1/cos(RADIANS(@lat))) 
     , ' ' 
     , @lat - 700/111.1 
     , ')') 
     ,geopoints) 

и вторая попытка:

[email protected] = 48.88; 
[email protected] = 2.34; 
SET @kmRange = 172; -- = 50 Miles 

SELECT *, (3956 * 2 * ASIN(SQRT(POWER(SIN((@lat - abs(`lat`)) * pi()/180/2),2) + COS(@lat * pi()/180) * COS(abs(`lat`) * pi()/180) * POWER(SIN((lon - `lon`) * pi()/180/2), 2)))) as distance 
FROM `geoFRA` 
WHERE MBRContains(LineString(Point(@lat + @kmRange/111.1, @lon + @kmRange/(111.1/COS(RADIANS(@lat)))), Point(@lat - @kmRange/111.1, @lon - @kmRange/(111.1/COS(RADIANS(@lat))))), `geopoints`) 
Order By distance 

Я начинаю думать, что есть некоторая MariaDB несовместимость?! или я что-то пропустил?

спасибо за любую помощь .., Flau

ответ

0
CREATE TABLE geoFRA (id int NOT NULL, geopoints point NOT NULL); 
INSERT INTO geoFRA (id, geopoints) VALUES 
(1, geomFromText('POINT(48 2)')), 
(2, geomFromText('POINT(48 3)')), 
(3, geomFromText('POINT(48.88 2.34)')), 
(4, geomFromText('POINT(49 2)')), 
(5, geomFromText('POINT(49 3)')); 

SET @p=geomFromText('POINT(48.88 2.34)'); 
SELECT X(geopoints), Y(geopoints), asText(geopoints), ST_Distance(geopoints, @p) as d 
FROM geoFRA 
ORDER BY d; 

Это возвращает geopoints упорядоченные по расстоянию. Использование геотомов без X(), Y() и asText() возвращает их в формате хорошо известных двоичных (WKB): http://dev.mysql.com/doc/refman/5.7/en/gis-data-formats.html#gis-wkb-format