2012-12-20 50 views
1

我谷歌的教程以下Oracle映射到保存覆蓋到MySQL:https://developers.google.com/maps/articles/phpsqlinfo_v3,但我不能與Oracle實現它。如果有人能指出我的錯誤,這是我到目前爲止的代碼:保存谷歌地圖多邊形疊加到使用PHP

function savePolygons(){ 
    for (var i = 0; i < createdShapes.length; i++){ 

     var nom_zone = document.getElementById('nom_zone_' + createdShapes[i].id).value; 
     alert(nom_zone) 
     var couleur = createdShapes[i].fillColor; 
     alert(couleur) 
     var code_cs = '711'; 
     var shapeid_export = createdShapes[i].id; 
     alert(shapeid_export) 
     var geometry = createdShapes[i].getPath().getArray(); 
     alert(geometry) 
     var url1 = "oracle_savePolygons.php?nom_zone=" + nom_zone + "&couleur=" + couleur + "&code_cs=" + code_cs + "&shapeid_export=" + shapeid_export + "&geometry=" + geometry; 
     downloadUrl(url1, function(data, responseCode){ 
      if (responseCode == 200 && data.length <= 1) { 
      infowindow.close(); 
      } 
     }); 
    } 
} 

function downloadUrl(url1, callback) { 
    var request = window.ActiveXObject ? 
     new ActiveXObject('Microsoft.XMLHTTP') : 
     new XMLHttpRequest; 

    request.onreadystatechange = function() { 
    if (request.readyState == 4) { 
     request.onreadystatechange = doNothing; 
     callback(request.responseText, request.status); 
    } 
    }; 

    request.open('GET', url1, true); 
    request.send(null); 
} 

function doNothing() {}  

有在本地主機上使用的EasyPHP oracle_savePolygons.php,Im的PHP代碼:

<?php 
require("oracle_dbinfo.php"); 

$nom_zone =$_GET['nom_zone']; 
$shapeid_export = $_GET['shapeid_export']; 
$code_cs = $_GET['code_cs']; 
$couleur = $_GET['couleur']; 
$geometry = $_GET['geometry']; 

$conn = oci_connect($username, $password, $database); 

$query = oci_parse($conn, 'INSERT INTO test1 (shapeid, nom_zone, code_cs, couleur, geometry) VALUES (:nom_zone, :shapeid_export, :code_cs, :couleur, :geometry)'; 
oci_bind_by_name($query, ":nom_zone", $nom_zone); 
oci_bind_by_name($query, ":shapeid_export", $shapeid_export); 
oci_bind_by_name($query, ":code_cs", $code_cs); 
oci_bind_by_name($query, ":couleur", $couleur); 
oci_bind_by_name($query, ":geometry", $geometry); 

oci_execute($query); 
oci_commit($conn); 
?> 

我已經找到了另一個解決方案是:

function savePolygons(){ 
    for (var i = 0; i < createdShapes.length; i++){ 
    var nom_zone = escape(document.getElementById('nom_zone_' + createdShapes[i].id).value); 
    var couleur = escape(createdShapes[i].fillColor); 
    var code_cs = escape('711'); 
    var shapeid_export = escape(createdShapes[i].id); 
    var geometry = createdShapes[i].getPath().getArray(); 
    var url1 = "oracle_savePolygons.php?nom_zone=" + nom_zone + "&couleur=" + couleur + "&code_cs=" + code_cs + "&shapeid_export=" + shapeid_export + "&geometry=" + geometry; 
    window.location.href = url1 ; 
    } 
} 

它的工作,但我不知道是否使用window.location.href是一個安全的解決方案。我在將geometry數組插入test 1表的oracle GEOMETRY CLOB var時也遇到了問題。我有一個oci_execute錯誤,我不知道爲什麼。一個4000字節的varchar對於多邊形幾何體是否足夠大?

回答

3

我用下面的代碼來獲取cooridinates,然後我將它們傳遞到一個字段的形式進行處理。

function draw() { 
if (drawingManager <= 0) then 

var drawingManager = new google.maps.drawing.DrawingManager({ 
     drawingMode: google.maps.drawing.OverlayType.POLYGON, 
     drawingControl: true, 
     drawingControlOptions: { 
     position: google.maps.ControlPosition.TOP_CENTER, 
     drawingModes: [ 
     // google.maps.drawing.OverlayType.MARKER, 
      //google.maps.drawing.OverlayType.CIRCLE, 
      google.maps.drawing.OverlayType.POLYGON, 
     // google.maps.drawing.OverlayType.POLYLINE, 
     // google.maps.drawing.OverlayType.RECTANGLE 
     ] 
     }, 
     markerOptions: { 
     icon: 'images/beachflag.png' 
     }, 
     polygonOptions: { 
     fillColor: '#1E90FF', 
     fillOpacity: 0.4, 
     strokeWeight: 2, 
     clickable: true, 
     editable: true, 
     zIndex: 1 
     } 
    }); 


    var coord_listener = google.maps.event.addListener(drawingManager, 'polygoncomplete', function (polygon) { 
    var coordinates = (polygon.getPath().getArray()); 


    alert(coordinates); 
    grabarPoligonoMysql(coordinates); 
    window.poly = polygon; 
}); 



    drawingManager.setMap(map); 


} 

function PassPolygonToField(coordinates) { 
//here I pass the coords to the form field and then I insert the form into a mysql database. 
document.getElementById('myField').value = (coordinates); 

} 
+0

謝謝你,你的職位是有用的我要得到的座標與的getPath()的getArray() –

+0

歡迎您 –

+0

另一個問題。你如何用座標數組重建多邊形?我有一個這樣的串在我的分貝(45.234234,-74.23424),(45.234266,-74.23423424).... –