【问题标题】:Draw a polygon on maps api v3 and save it to postgresql geometric column在地图 api v3 上绘制多边形并将其保存到 postgresql 几何列
【发布时间】:2014-11-03 10:08:13
【问题描述】:

1.- 用户在 Web 应用中绘制多边形。

2.- 当用户点击保存时,我想将数据保存在 postgresql 数据库中。

多边形坐标有问题...

多边形在文本字段中坐标值,如下所示:

(13.068776734357694, -65.50735473632812),(6.795535025719505, -62.123565673828125),(7.928674801364048, -70.78079223632812)

当用户在地图上绘图时,我得到了它们

google.maps.event.addListener(drawingManager,'polygoncomplete',function(polygon) {

// complete functions
var coordinates = (polygon.getPath().getArray());
$("#coordinates").val(coordinates);

});

这么好,当我在表单中传递这些值并尝试将它们保存在数据库中时,我收到了这个错误:

致命错误:未捕获异常 'PDOException' 并带有消息 'SQLSTATE[XX000]:内部错误:7 错误:解析错误 - 无效几何提示:“(1”

PHP

$stmt = $link->prepare("INSERT INTO industrias.industrias (rif,nombre,geom) VALUES (:rif,:nombre,:coor)");
$stmt->execute(array(':rif'=>$_POST["rif"],':nombre'=>$_POST["nombre_empresa"],':coor'=>$_POST["coordinates"]));

问题 1:

还有其他函数可以以适合列类型geometry (Polygon,4326)的其他模式获取这些坐标?

问题 2:

我可以在 SQL STATEMENT 中使用一些 postgis 函数来使其工作吗?与 WKT 或其他东西有关吗?

【问题讨论】:

    标签: php postgresql google-maps-api-3


    【解决方案1】:

    我做了一个地理围栏模块,我在数据库中保存了很多形状。 我不会那样保存协调的。

    我使用google编码算法对多边形和折线的路径进行编码,然后将编码后的字符串保存在数据库中。

    https://developers.google.com/maps/documentation/javascript/examples/geometry-encodings

    不过,圆圈可以保存为纬度、经度和半径。

    从长远来看,这将是一个简单而稳定的解决方案。

    如果您需要坐标,只需使用可用的 google api 编码函数将它们解码回来。

    更新:

    我无法向您展示该应用程序违反我的公司政策,但有一些代码片段可以帮助您:

    画完后:

    google.maps.event.addDomListener(drawingManager, 'polygoncomplete', function(polygon) {      
              drawingManager.setDrawingMode(null); // disable drawing mode
              CreateCourseRegionPoly(polygon);          
          });
    

    我在下面使用rest服务保存在数据库中(注意编码uri,因为一些有趣的字符可能会出现在编码中):

    function CreateCourseRegionPoly(poly){
    var polypath= poly.getPath();
    var encodeString = google.maps.geometry.encoding.encodePath(polypath); 
       $.ajax({
          url: '../RestApi/CreateRegion',
          type: 'POST',
          contentType: 'application/json',
          cache: false,
          dataType: 'json',          
          data: '{"CourseID":"'+ courseID +'","PolygonPath":"'+encodeURIComponent(encodeString)+'"}',
          error: function (jqXHR, textStatus, errorThrown) {
            alert("Messaging failed: " + errorThrown);
          },
           success: function (data) {
           //d oyour sucess bit here...
           }
        });
    }
    

    【讨论】:

    • 你在文本列中保存了坐标?喜欢 varchar?
    • 是的,我使用 nvarchar(MAX) 是为了更安全。你永远不知道客户可以画出多大的多边形。我正在通过这个保存具有 100 个点的多边形。
    • 我在几何列中需要它们,我现在可以在 php 的帮助下保存多边形,如果有人需要 google.maps.event.addListener(drawingManager,'polygoncomplete',function( polygon) { var coordinates = (polygon.getPath()); var contentString = "" ; // 遍历顶点。for (var i =0; i
    猜你喜欢
    • 2014-07-21
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 2012-08-25
    • 2013-12-10
    • 1970-01-01
    相关资源
    最近更新 更多