我开发一个基于Web的应用程序,其中一个用户在地图上创建了一个多边形和数据库返回的兴趣点。
问题是,PostgreSQL的节省比谷歌地图多边形以不同的方式多边形。
所以,我怎么可以保存用户多边形PostGIS中?
我已经使用谷歌地图API第3版和GeoJSON的
我开发一个基于Web的应用程序,其中一个用户在地图上创建了一个多边形和数据库返回的兴趣点。
问题是,PostgreSQL的节省比谷歌地图多边形以不同的方式多边形。
所以,我怎么可以保存用户多边形PostGIS中?
我已经使用谷歌地图API第3版和GeoJSON的
一些代码将是有益的。 在没有这里是一个最好的猜测通用的答案:一般来说,你需要制定出如何映射(转换),每种格式到另一个。 然后你就可以转换为适合您保存并从数据库格式转换谷歌之前,数据库的格式,当您检索映射格式。 我想每个多边形是一组以这两种格式的纬度/经度对,因此它应该不会太困难。
另外,由于您使用JSON,你可以只保存JSON文本字段在数据库中(或在即将到来的9.2版本的PostgreSQL的JSON字段):
http://www.postgresql.org/docs/9.2/static/datatype-json.html
不过,如果你想在那显然会限制你的选择的数据库进行地理查询。
在我的js文件我创建了一个形状为多边形
shape = new google.maps.Polygon({
Editable:true,
strokeColor: 'FF0000',
strokeOpacity: 0.8,
strokeWeight: 1,
fillColor: 'FF0000',
fillOpacity: 0.4
});
然后,我创建了功能addPoint
function addPoint(e) {
shape.setMap(map);
vertices= shape.getPath();
vertices.push(e.latLng);
polygon.push(e.latLng);
}
我通过addPoint函数映射对象
map = new google.maps.Map(document.getElementById("map"), mapOptions);
google.maps.event.addListener(map,'click',addPoint);
在我的HTML我有ID =多边形的按钮。 我转换坐标Postgres的格式(长,LAT)
$("#polygon").click(function(e){
a=JSON.stringify(polygon);
var c=JSON.parse(a);
console.info(c);
vertices.forEach(function(xy, i) {
x.push(xy.lng()+" "+xy.lat());
});
shape.setMap(map);
其中包含了多边形的变量是我把它叫做X上我有一个AJAX调用传递多边形阵列X到我的模型数组
$.ajax({
url: 'myurl',
type: 'post',
data: {'polygon':x},
datatype: 'json',
success: function(data) {
console.info(data)
}
});
在我的模型(笨)我的多边形(纬度,经度)转换成Postgres的多边形(长,LAT)
public function getPolygon($polygon){
header('Content-type: application/json');
$upolygon="";
$length=count($polygon);
for ($i=0;$i<$length;$i++){
$upolygon.=$polygon[$i].' ,';
}
$upolygon.=$polygon[0];
$query = "some query with the formated polygon";
foreach ($query->result() as $row)
{
$data[]= array("some data");
}
echo json_encode($data);
}