1.-用户在网络应用中绘制多边形。
2.-当用户点击“保存”时,我想将数据保存在postgresql DB中。
我遇到了多边形坐标问题......
POLYGON协调文本领域的价值观,它看起来像这样:
(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);
});
SO FAR SO GOOD,当我在表单中传递这些值并尝试将它们保存在DB中时,我收到了此错误:
致命错误:未捕获的异常' PDOException'消息' SQLSTATE [XX000]:内部错误:7错误:解析错误 - 无效几何提示:"(1"< - 解析几何中位置2的错误' in
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或其他什么东西?
答案 0 :(得分:0)
我做了一个地理围栏模块,我在数据库中保存了很多形状。 我没有像那样保存协调。
我使用google encoding algorithem编码多边形和多边形线的路径,然后将编码后的字符串保存在数据库中。
https://developers.google.com/maps/documentation/javascript/examples/geometry-encodings
圆圈可以保存为lat,lon和radius。
从长远来看,这将是简单而稳定的解决方案。如果您需要坐标,只需使用谷歌api编码功能解码它们。
更新
我无法将该应用程序显示为违反我的公司政策,但有些代码片段可以帮助您:
完成绘图时:
google.maps.event.addDomListener(drawingManager, 'polygoncomplete', function(polygon) {
drawingManager.setDrawingMode(null); // disable drawing mode
CreateCourseRegionPoly(polygon);
});
我在下面使用休息服务保存在数据库中(注意编码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...
}
});
}