私はcodeigniterとdatamapperを使って(mysql上で)APIサービスを構築していますが、その一部にはジオロケーションが含まれていますが、ポイントデータ型を使用します。 GeomFromTextを挿入しようとすると、システムは文字列として扱います。Datamapper(codeigniter)でポイントまたはジオメトリタイプを使用する方法
誰でも手助けできますか?
乾杯、 マーク。
私はcodeigniterとdatamapperを使って(mysql上で)APIサービスを構築していますが、その一部にはジオロケーションが含まれていますが、ポイントデータ型を使用します。 GeomFromTextを挿入しようとすると、システムは文字列として扱います。Datamapper(codeigniter)でポイントまたはジオメトリタイプを使用する方法
誰でも手助けできますか?
乾杯、 マーク。
CodeIgniterので
CREATE TABLE Points (
ID INT(10) PRIMARY KEY NOT NULL AUTO_INCREMENT,
location POINT NOT NULL,
SPATIAL INDEX(location)
) ENGINE= MYISAM
をお試しください:DatamaperとCodeIgniterは(マニュアルの "アップデートで数式を使う" のヘルプを参照してください)では
$this->db->set("location",'geomfromtext("POINT(30.2 40.3)")',false);
$this->db->insert("Points");
...
$point = new Point();
$point->update('location','geomfromtext("POINT(30.2 40.3)")',FALSE);
データベースのデータ型としてFLOATを使用します。
としては、CodeIgniterのユーザーズ・ガイドで説明:
$this->db->set();
セット機能を使用すると、挿入または更新の値を設定することができます。
set()はFALSEに設定されているとデータがエスケープされないようにする3番目のパラメータ($ escape)を受け入れます。
$this->db->set('geo', "ST_GeomFromText('{$data['geo']}')", FALSE);
$this->db->insert('tableName');
return $this->db->insert_id() ? $this->db->insert_id() : FALSE;
あなたのコードが何をしているのか少し説明できますか?コードだけの回答は、OPによって誤解される可能性があります。 –
[MySQLのマニュアル(http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html)、MySQLは値を格納するときに挿入した場合に、丸め行います999.00009をFLOAT(7,4)列に変換すると、おおよその結果は999.0001になります。 Pointを使用できない場合は、小数点以下を使用することをお勧めします。 –
さて、私はCodeigniterで地理位置(Googleマップサービスを使用)をサポートするプロキシライブラリを作成しました:http://codeigniter.com/forums/viewthread/186250/、私のデータベースのフロートデータ型でうまく動作します。 – toopay
メールアドレスと同じ国ではありません.MySQLの失敗精度は設計上の特徴です。マニュアルでは、これらのフィールドを「浮動小数点(近似値)型」と呼んでいます... [MySQLマニュアル](http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html) ) –