17

私は「空間インデックス」全体に慣れていませんが、緯度/経度に基づいてフィルタリングするための最良のソリューションのようです。そこで、テーブルに列を追加しました。

だから私は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

ここで何が間違っていますか?

4

2 に答える 2

29

OK 解決策を見つけました:列フィールドの一部にデータが含まれていない場合、空間インデックスを作成できません。走った後

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

すべてがうまくいきました。

于 2011-05-04T04:45:55.713 に答える
5

これと同じエラー (GEOMETRY フィールドに送信したデータからジオメトリ オブジェクトを取得できません) が発生しましたが、mysql ダンプから空間データをインポートしようとしたときに発生しました。列が「NOT NULL」であるにもかかわらず、一部の行に「null」(X が null または Y が null) の空間データがあることがわかりました。

この SQL で説明しているのと同じ問題があるかどうかを確認してください。

SELECT id FROM locations WHERE X(座標) IS NULL OR Y(座標) IS NULL;

いくつかの行がある場合、これが私にとってうまくいきました:

位置の更新 SET 座標 = POINT(0,0) WHERE X(座標) IS NULL OR Y(座標) IS NULL;

次に、mysqldump (または phpmyadmin から) を試して、再度インポートします。

于 2012-06-09T19:55:48.180 に答える