【问题标题】:Insert GIS Geometry using prepared Statements使用准备好的语句插入 GIS 几何
【发布时间】:2012-01-14 21:08:48
【问题描述】:

有没有办法使用准备好的语句将 GIS 数据插入 mysql 数据库(使用 PHP / PDO)?

这失败了:

$stmt = $sql->prepare("INSERT INTO geo SET location= :loc");
$sql->execute($stmt,array('loc'=>"PointFromText('POINT(43.5499152 7.0232372)')"));

其中 geo.location 列的类型为 POINT。

【问题讨论】:

  • 注意:在示例中,有时loc可以为NULL...

标签: php mysql pdo gis


【解决方案1】:

43.5499152 是纬度,7.0232372 是经度吗?如果是这样,考虑到 POINT 的 WKT 格式是 POINT(XY),其中 X 是经度,Y 是纬度,有效的表示形式是:

POINT(7.0232372 43.5499152)

考虑到这一点,您可以尝试以下方法:

$stmt = $sql->prepare("INSERT INTO geo SET location = PointFromText('POINT(:lng :lat)')");
$stmt->execute(array('lat' => 43.5499152, 'lng' => 7.0232372));

如果你没有纬度和经度,只需将位置设置为空:

$stmt = $sql->prepare("INSERT INTO geo SET location = null");
$stmt->execute();

另外,您可能需要设置 SRID,在您的情况下为 4326:

$stmt = $sql->prepare("INSERT INTO geo SET location = PointFromText('POINT(:lng :lat)', 4326)");
$stmt->execute(array('lat' => 43.5499152, 'lng' => 7.0232372));

【讨论】:

  • 你能告诉我如何在javaprepared语句中做同样的事情吗?x是一个数组,y是数组。 x 和 y 的第 0 个位置将形成第一个点...有什么建议吗?
  • @user3384231 您是否得到解决方案,因为我也尝试使用准备好的语句在 java 中插入 POINT 并且无法使其工作: String selectQry = ("SET @g = PointFromText(CONCAT ('POINT(', ?, '', ?, ')')); " + "INSERT INTO at_group " + "(grp_country, grp_state, grp_region, grp_district, " + "grp_name, grp_section, grp_sub_section, grp_archived, " + "grp_hall_geoPoint, grp_nas)" + "值 (?,?,?,?,?,?,?,?, @g, ?);");
  • @Glyn:请看下面我的回复
【解决方案2】:

@Glyn:请参阅以下内容对我有用

insertquery = <do as required>
Your insert query should have the following:
"geometry::STGeomFromText(?,4326))" 


PreparedStatement insert = conn.prepareStatemen(insertquery);

#Point has two points, X and Y. You need to pass those values.
String shape = "POINT ("+x+" "+y+")";
insert.setString(25, shape);

您使用的数据库,例如 MS sql 服务器,那么您的点列应该具有正确的数据类型,即“几何”。

如果您有任何其他问题,请问我。

乐于助人。

【讨论】:

  • 谢谢我正在使用 MySQL POINT,但不知道如何插入 POINT;但是,已经解决了UPDATE。所以我插入了新行,然后更新了 POINT 列。请查看我发布的代码。
【解决方案3】:

我正在使用 MySQL POINT,但不知道如何插入 POINT;但是,已经解决了UPDATE。所以我插入了新行,然后更新了 POINT 列:

String insertQry = ("INSERT INTO at_group " +
              "(grp_country, grp_state, grp_region, grp_district, " +
              "grp_name, grp_section, grp_sub_section, grp_archived, " +
              "grp_nas) " +
              "VALUES (?,?,?,?,?,?,?,?,?);");

    String updateQry = ("UPDATE at_group " +
              "SET grp_hall_geoPoint=PointFromText(CONCAT('POINT(', ?, ' ', ?, ')')) " +
              "WHERE grp_id=?;");

    try {
        // Get Connection and Statement from DataSource
        c = ds.getConnection();
        ps = c.prepareStatement(insertQry,Statement.RETURN_GENERATED_KEYS);

        try {
            // Create a statement and execute the query on it

            ps.setString(1, country);
            ps.setString(2, state);
            ps.setString(3, region);
            ps.setString(4, district);
            ps.setString(5, group);
            ps.setString(6, section);
            ps.setString(7, subSection);
            ps.setString(8, archiveDate);
            ps.setString(9, nas);

            ps.executeUpdate();

            ps2 = c.prepareStatement(updateQry);
            //Get foreign key for key to update the correct row
            ResultSet rs = ps.getGeneratedKeys();

            if (rs.next()) {
                grp_id = rs.getInt(1);

                ps2.setString(1, latitude);
                ps2.setString(2, longditude);
                ps2.setInt(3, grp_id);

                ps2.executeUpdate();
            };

            // Clean up
            ps.close();
            ps2.close();
            c.close();

        } catch (SQLException se) {
            System.out.println("SQLException in addGroup: " + se.toString());
        } catch (Exception e) {
            System.out.println("Errors occurred in addGroup: " + e.toString());
        }

    } catch (SQLException e1) {
        System.out.println("SQLException in addGroup: " + e1.toString());
        e1.printStackTrace();

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 2016-03-07
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多