【问题标题】:Search on selected area by draw polygons in google map v3通过在谷歌地图 v3 中绘制多边形搜索选定区域
【发布时间】:2014-11-29 19:36:49
【问题描述】:

如何提取最小、最大纬度和经度以在数据库中搜索并在谷歌地图中用多边形、矩形、圆形绘制空间区域?
我用它来通过用户绘制地图:

drawingManager = new google.maps.drawing.DrawingManager (
{
    drawingMode: google.maps.drawing.OverlayType.POLYGON,
    drawingControlOptions:
    {
        position: google.maps.ControlPosition.TOP_LEFT,
        drawingModes: [google.maps.drawing.OverlayType.CIRCLE]
    },
    polygonOptions: polyOptions,
    rectangleOptions: polyOptions,
    circleOptions: polyOptions,
    map: map
});

所以,我想查询数据库以获取所选区域中存在的信息。
绘图选项是:
1- google.maps.drawing.OverlayType.POLYGON
2- google.maps.drawing.OverlayType.RECTANGLE
3- google.maps.drawing.OverlayType.CIRCLE

有什么可以帮到我的吗?

【问题讨论】:

    标签: mysql database google-maps google-maps-api-3


    【解决方案1】:

    第2个.Rectangle使用边界框$minLat,$maxLat,$minLng,$minLat

    $sql ="SELCT * FROM tablename WHERE(lat  BETWEEN ? AND ? )AND (lng  BETWEEN ? AND ?)";
        $stmt = $dbh->prepare($sql);
        // Assign parameters
        $stmt->bindParam(1,$minLat);
        $stmt->bindParam(2,$maxLat);
        $stmt->bindParam(3,$minLng);
        $stmt->bindParam(4,$maxLng);
    

    1 号多边形使用矩形的边界框,然后使用 javascript pointInPolygon() 消除多边形外的点。

    function pointInPolygon(polySides,polyX,polyY,x,y) {
     var j = polySides-1 ;
      oddNodes = 0;
      for (i=0; i<polySides; i++) {
        if (polyY[i]<y && polyY[j]>=y  ||  polyY[j]<y && polyY[i]>=y) {
            if (polyX[i]+(y-polyY[i])/(polyY[j]-polyY[i])*(polyX[j]-polyX[i])<x)  {
                oddNodes=!oddNodes; 
            }
        }
       j=i; }
    
      return oddNodes;
    }   
    

    3 号圈

    $sql ="SELECT  *, ( 3959 * acos( cos( radians(?) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(?) ) + sin( radians($) ) * sin( radians( lat ) ) ) ) AS distance FROM tablename HAVING radius < 2 ORDER BY distance "(;
         $stmt = $dbh->prepare($sql);
        // Assign parameters
        $stmt->bindParam(1,$center_lat);
        $stmt->bindParam(2,$center_lng);
        $stmt->bindParam(3,$center_lat);
        $stmt->bindParam(4,$radius);
    

    【讨论】:

      猜你喜欢
      • 2012-02-23
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      相关资源
      最近更新 更多