2010-12-19 2 views
0

私はMySQLでGISを使い始めました。MySQL GIS/Spatial Extensions - 私の脳を溶かす

私は、表「場所」作成した:私は、経度と緯度を持つテーブルとしてPHP座標更新テーブル

に挿入

CREATE TABLE `places` (
    `id` int(6) unsigned zerofill NOT NULL auto_increment, 
    `business_name` varchar(100) NOT NULL, 
    `street_postcode` varchar(10) NOT NULL, 
    `longitude` decimal(22,20) NOT NULL, 
    `latitude` decimal(22,20) NOT NULL, 
    `coord` point NOT NULL, 
    UNIQUE KEY `id` (`id`), 
) ENGINE=InnoDB AUTO_INCREMENT=25080 DEFAULT CHARSET=utf8 

ID、BUSINESS_NAMEとstreet_postcodeをso:

UPDATE `places` SET `longitude` = '".$longitude."', `latitude` = '".$latitude."', `coord` = GeomFromText('POINT(".$coord.")') WHERE `id` = '".$row->id."' LIMIT 1 

これはすべてうまくいっているようですが、X座標に最も近い場所を見つけようとすると固くなります。 Xの経度と緯度に最も近い10の場所を見つけるにはどうすればよいですか?

これは動作していないよう:

SELECT business_name, street_postcode, ROUND(GLength(LineStringFromWKB(LineString(AsBinary(coord), AsBinary('51.49437081 -0.2275573'))))) 
AS distance FROM places ORDER BY distance ASC LIMIT 10; 

永遠の感謝を事前に!

答えて

1

これは、空間関数が実際にMySQLに実装されていないためです。彼らはすべてのコードをスタブアウトしましたが、すべてのメソッドを実装していませんでした。

PostGISまたはSpatiaLiteの使用をお勧めします。

+1

これを参照してください:http://dev.mysql.com/doc/refman/5.5/en/relations-on-geometry-mbr.html –

+0

ええ、私はかなり同意しています。5.5では、より多くの空間的な機能がありますが、MyISAMテーブルタイプ(データベース上ではかなり大きな制約です)の場合のみです。 http://dev.mysql.com/doc/refman/5.5/en/creating-spatial-indexes.html – TheSteve0

関連する問題