MySQLデータベースにhouse
というテーブルがあります。
house
テーブル内には、latitude
およびlongitude
と呼ばれる2つのテキスト列があります。
タイプcoords
http://dev.mysql.com/doc/refman/5.0/en/gis-class-)のpoint
という新しい列を追加しましたpoint.html
latitude
とlongitude
の値を新しいcoords
列に移動するにはどうすればよいですか?
この列にSPATIAL
インデックスが必要だとすると:
ALTER TABLE mytable ADD coords Point;
UPDATE mytable
SET coords = Point(lon, lat);
ALTER TABLE mytable MODIFY coords POINT NOT NULL;
CREATE SPATIAL INDEX sx_mytable_coords ON mytable(coords);
そうでない場合は、最後の2つの手順を省略できます。
更新:
以前のバージョンのMySQL
では、Point
を使用してWKT
列にデータを入力する必要がありました。
UPDATE mytable
SET coords = GeomFromText(CONCAT('POINT (', lon, ' ', lat, ')'))
MySQLバージョン5.5.8
私の緯度と経度はfloatタイプです。既存の行を更新するには...
UPDATE table_name SET coord = POINT(longitude_field, latitude_field);
データを収集していて、緯度と経度を別々にそれぞれの列に保存する必要がある場合は、テーブルにトリガーを追加することをお勧めします。
CREATE DEFINER=`username`@`localhost` TRIGGER `table_name`.`create_point_geom`
BEFORE INSERT ON database_name.table_name FOR EACH ROW
BEGIN
SET NEW.coord = POINT(NEW.longitude, NEW.latitude);
END;
ジオタグ付きのソーシャルメディアデータを収集し、この方法を使用してテーブルにジオメトリを追加します。
簡潔に:
UPDATE myTable SET coords = GeometryFromText( CONCAT( 'POINT(', lon, ' ', lat, ')' ) );
適切な入力形式はPOINT(X Y)であるため、または地球のPOINT(lon lat)に関して、Quassnoiからの回答は誤りであることに注意してください。
次の例のようなX()およびY()関数を介してポイントを表示できることに注意してください。
SELECT X( GeometryFromText( CONCAT( 'POINT(', 35, ' ', 60, ')' ) ) ) AS x, Y( GeometryFromText( CONCAT( 'POINT(', 35, ' ', 60, ')' ) ) ) AS y;
最後に!私はこれらのエラーを修正することができました:
#3037 - Invalid GIS data provided to function st_geometryfromtext.
#1416 - Cannot get geometry object from data you send to the GEOMETRY field
カスタムSQLクエリを実行することにより、緯度と経度のポイントをポイントしました。私の場合、それを行ったSQL文字列は次のとおりです。
UPDATE wp_wpgmza SET latlng = GeometryFromText( CONCAT( 'POINT(', 38.5775167, ' ', -121.4868583, ')' ) ) WHERE id = 63;