我开发了一个基于 Web 的应用程序,用户将在地图上创建一个多边形,数据库将返回兴趣点。
问题是 postgreSQL 以与谷歌地图多边形不同的方式保存多边形。
那么如何将用户多边形保存到 postgis?
我已经在使用谷歌地图 v3 api 和 geojson
我开发了一个基于 Web 的应用程序,用户将在地图上创建一个多边形,数据库将返回兴趣点。
问题是 postgreSQL 以与谷歌地图多边形不同的方式保存多边形。
那么如何将用户多边形保存到 postgis?
我已经在使用谷歌地图 v3 api 和 geojson
一些代码会很有用。如果没有,这是一个最好的猜测通用答案:一般来说,您需要弄清楚如何将每种格式映射(转换)到另一种格式。然后,您可以在保存之前转换为适合数据库的格式,并在检索时从数据库格式转换为谷歌地图格式。我想每个多边形都是两种格式的一组纬度/经度对,所以应该不会太难。
或者,由于您使用的是 JSON,您可以将 JSON 保存到数据库中的文本字段(或在即将发布的 PostgreSQL 9.2 版本中保存到 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=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);
}