【问题标题】:How to use a Point or Geometry type in Datamapper (codeigniter)如何在 Datamapper (codeigniter) 中使用点或几何类型
【发布时间】:2011-03-10 21:04:13
【问题描述】:

我正在使用 codeigniter 和 datamapper 来构建 API 服务(在 mysql 上),其中一部分涉及地理定位 - 但是我似乎找不到使用点数据类型的解决方法。如果我尝试插入 GeomFromText,系统会将其视为字符串。

谁能帮忙?

干杯, 标记。

【问题讨论】:

    标签: codeigniter geolocation point codeigniter-datamapper


    【解决方案1】:

    试试

    CREATE TABLE Points ( 
        ID INT(10) PRIMARY KEY NOT NULL AUTO_INCREMENT, 
        location POINT NOT NULL, 
        SPATIAL INDEX(location) 
    ) ENGINE= MYISAM
    

    在 CodeIgniter 中:

    $this->db->set("location",'geomfromtext("POINT(30.2 40.3)")',false);
    $this->db->insert("Points");
    

    在带有 Datamaper 的 CodeIgniter 中(请参阅文档中“在更新中使用公式”的帮助)...

    $point = new Point();
    $point->update('location','geomfromtext("POINT(30.2 40.3)")',FALSE);
    

    【讨论】:

      【解决方案2】:

      如 CodeIgniter 用户指南中所述:

      $this->db->set();
      

      set 函数使您可以设置插入或更新的值。

      set() 将接受第三个参数 ($escape),如果设置为 FALSE,它将防止数据被转义。

      $this->db->set('geo', "ST_GeomFromText('{$data['geo']}')", FALSE);
      $this->db->insert('tableName');
      
      return $this->db->insert_id() ? $this->db->insert_id() : FALSE;
      

      【讨论】:

      • 你能解释一下你的代码是做什么的吗? OP 可能会误解纯代码的答案。
      【解决方案3】:

      使用 FLOAT 作为您的数据库数据类型。

      【讨论】:

      • MySQL Manual.-MySQL 在存储值时会进行舍入,因此如果将 999.00009 插入 FLOAT(7,4) 列,则近似结果为 999.0001。如果不能使用 Point,最好使用小数。
      • 好吧,我已经在 Codeigniter 中创建了一个支持地理定位(使用谷歌地图服务)的代理库:codeigniter.com/forums/viewthread/186250,并且可以在我的数据库中使用我的浮点数据类型。
      • 和邮寄地址不是同一个国家,MySQL中的故障精度是设计特性。在手册中将这些字段称为“浮点(近似值)类型”...MySQL Manual
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 2021-01-13
      • 2023-03-15
      相关资源
      最近更新 更多