2011-12-07 18 views
2

プリペアドステートメントを使用して(PHP/PDOを使用して)MySQLデータベースにGISデータを挿入する方法はありますか?準備済みステートメントを使用してGISジオメトリを挿入

これが失敗している:

列geo.locationがPOINTの種類を持っている
$stmt = $sql->prepare("INSERT INTO geo SET location= :loc"); 
$sql->execute($stmt,array('loc'=>"PointFromText('POINT(43.5499152 7.0232372)')")); 

+0

注:例では、時々、LOCはNULLにすることができますが... – Phililippe

答えて

3

緯度は43.5499152、経度は7.0232372ですか?その場合は、ポイントのWKT形式はXが経度であり、Yは緯度で、有効な表現では以下のようになりPOINT(XY)であることを考慮:

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)); 

そして、あなたは、緯度と経度を持っていない場合は、単にnullに場所を設定します。また

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

は、あなたがあなたのケースで4326あるSRIDを設定することをお勧めします:

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

はあなたがJavaの準備書及びXで同じことを行う方法を教えてくださいすることができています配列とyは配列です。 xとyの0番目の位置が最初の点を形成します...任意の助言? – user3384231

+0

@ user3384231用意されたステートメントを使用してPOINTをJavaに挿入しようとしていて、それを動作させることができないため、解決策を得ましたか? 、 ''、? ')')); "+ \t \t \tが "at_group。INSERT INTO" + \t \t \t "(grp_country、grp_state、grp_region、grp_district、" + \t \t \t" grp_name、grp_section、grp_sub_section 、grp_archived、 "+ \t \t \t" grp_hall_geoPoint、grp_nas) "+ \t \t" VALUES(?、?、 「?、?、?、?、?、?、@g、?);」); – Glyn

+0

@Glyn:下の返信を参照してください – user3384231

0

@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サーバデータベースを働いていた参照してください。

ご質問がある場合は、私にお尋ねください。

お寄せいただきありがとうございます。

+0

ありがとう私はMySQL POINTを使用しており、INSERT OF POINTを実行する方法を理解できませんでした。しかし、UPDATEを解決しました。そこで私は新しい行を挿入し、POINT列を更新しました。私の投稿されたコードを見てください。 – Glyn

0

私はMySQL POINTを使用しており、INSERT OF 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(); 

    } 
関連する問題