【问题标题】:save google map polygon to postgreSQL database将谷歌地图多边形保存到 postgreSQL 数据库
【发布时间】:2012-08-25 15:02:15
【问题描述】:

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

问题在于 postgreSQL 保存多边形的方式与 google map 多边形不同。

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

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

【问题讨论】:

    标签: google-maps postgresql polygon postgis


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案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 = 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);
      }
      

      【讨论】:

        猜你喜欢
        • 2012-10-10
        • 1970-01-01
        • 2016-10-22
        • 2019-09-27
        • 1970-01-01
        • 2016-08-10
        • 2014-03-24
        • 2012-07-01
        相关资源
        最近更新 更多