web-dev-qa-db-ja.com

lat / lonテキスト列を「ポイント」タイプの列に移動する

MySQLデータベースにhouseというテーブルがあります。

houseテーブル内には、latitudeおよびlongitudeと呼ばれる2つのテキスト列があります。

タイプcoordshttp://dev.mysql.com/doc/refman/5.0/en/gis-class-)のpointという新しい列を追加しましたpoint.html

latitudelongitudeの値を新しいcoords列に移動するにはどうすればよいですか?

20
cannyboy

この列に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, ')'))
36
Quassnoi

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;

ジオタグ付きのソーシャルメディアデータを収集し、この方法を使用してテーブルにジオメトリを追加します。

12
lemonpro

簡潔に:

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;
8
Joseph Lust

最後に!私はこれらのエラーを修正することができました:

#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;
0
PixelKraft