将谷歌地图多边形保存到postgreSQL数据库

时间:2012-08-30 19:52:02

标签: google-maps postgresql polygon postgis

我开发了一个基于Web的应用程序,用户将在地图和数据库上创建多边形 将返回兴趣点。

问题是postgreSQL以不同于谷歌地图多边形的方式保存多边形。

那么如何将用户多边形保存到postgis?

我已经使用谷歌地图v3 api和geojson

2 个答案:

答案 0 :(得分:3)

有些代码会很有用。如果没有,这是一个最好的猜测通用答案:一般来说,你需要弄清楚如何将每种格式映射(转换)到另一种格式。然后,在保存并在检索时将数据库格式转换为谷歌地图格式之前,您可以转换为适合数据库的格式。我想每个多边形都是两种格式的一组纬度/经度对,所以它不应该太难。

或者,既然您正在使用JSON,那么您可以将JSON保存到数据库中的文本字段(或即将发布的PostgreSQL 9.2版本中的JSON字段):

http://www.postgresql.org/docs/9.2/static/datatype-json.html

但是,如果您想在数据库中执行明显限制选项的地理查询。

答案 1 :(得分:2)

在我的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对象

map = new google.maps.Map(document.getElementById("map"), mapOptions);
google.maps.event.addListener(map,'click',addPoint);

在我的html中,我有一个id = polygon的按钮。我转换为postgres格式的坐标(long,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)
 }
});

在我的模型(Codeigniter)中,我将多边形(lat,long)转换为postgres多边形(long,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);
}