【问题标题】:Save Google Maps polygon overlay into oracle using php使用 php 将 Google Maps 多边形覆盖保存到 oracle
【发布时间】:2012-12-20 14:20:30
【问题描述】:

我正在按照谷歌地图的教程将叠加层保存到 mysql:https://developers.google.com/maps/articles/phpsqlinfo_v3 但我无法使用 Oracle 实现它。如果有人能指出我的错误,这是我到目前为止的代码:

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() {}    

有oracle_savePolygons.php的php代码,我在localhost上使用EasyPHP:

<?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 是否是一个安全的解决方案。我在 test1 表的 oracle GEOMETRY CLOB var 中插入几何数组也有问题。我有一个 oci_execute 错误,我不知道为什么。 4000 字节的 varchar 对多边形几何体是否足够大?

【问题讨论】:

    标签: php javascript google-maps-api-3 oracle10g


    【解决方案1】:

    我使用下一个代码来获取坐标,然后将它们传递给一个字段以在表单中进行处理。

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

    【讨论】:

    • 谢谢,您的帖子对我使用 getPath().getArray() 获取坐标很有用
    • 另一个问题。你如何用坐标数组重建多边形。我的数据库中有这样的字符串 (45.234234, -74.23424),(45.234266,-74.23423424)....
    • 我和你在同一个问题上,我发布了这个问题,但还有人回答。我曾想过使用 asp 分割链,但我认为用圆而不是多边形来做更好的方法,得到坐标中心和圆的半径。
    • 我想我在这里找到了解决方案:stackoverflow.com/a/13982161/1914034我今天会测试它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多