Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多边形中点上的标记未显示_Php_Jquery_Google Maps Api 3 - Fatal编程技术网

Php 多边形中点上的标记未显示

Php 多边形中点上的标记未显示,php,jquery,google-maps-api-3,Php,Jquery,Google Maps Api 3,我想在多边形内部显示标记,就像下面的示例一样 但是标记没有出现。我想我的代码中缺少了,这是我保存到数据库中的坐标 53.198524,-105.762383 53.198566,-105.765083 53.199001,-105.762314 53.199394,-105.765083 53.199409,-105.765091 53.199421,-105.762123 53.199425,-105.763580 我很感激有人能帮我弄清楚如何得到这份工作 var map;

我想在多边形内部显示标记,就像下面的示例一样

但是标记没有出现。我想我的代码中缺少了,这是我保存到数据库中的坐标

53.198524,-105.762383
53.198566,-105.765083
53.199001,-105.762314
53.199394,-105.765083
53.199409,-105.765091
53.199421,-105.762123
53.199425,-105.763580
我很感激有人能帮我弄清楚如何得到这份工作

        var map;
        var polySides = 7;
        var polyLat  = new Array();

        polyLat[0]=53.198524;
        polyLat[1]=53.198566;
        polyLat[2]=53.199001;
        polyLat[3]=53.199394;
        polyLat[4]=53.199409;
        polyLat[5]=53.199421;
        polyLat[6]=53.199425;
        polyLat[7]=53.198524;


        var polyLng =  new Array();

        polyLng[0]=-105.762383;
        polyLng[1]=-105.765083;
        polyLng[2]=-105.762314;
        polyLng[3]=-105.765083;
        polyLng[4]=-105.765091;
        polyLng[5]=-105.762123;
        polyLng[6]=-105.763580;
        polyLng[7]=-105.762383;



        var maxLat = Math.max.apply(null,polyLat);
        var minLat = Math.min.apply(null,polyLat);
        var maxLng = Math.max.apply(null,polyLng);
        var minLng = Math.min.apply(null,polyLng);

        var bounds = new google.maps.LatLngBounds;
      function initialize() {

            initial = new google.maps.LatLng(53.199246241276875,-105.76864242553711);

            var mapOptions = {
                zoom: 16,
                center: initial,
                zoomControl: true,
                zoomControlOptions: {
                    style: google.maps.ZoomControlStyle.LARGE
                },
                mapTypeControl: false


            };
            map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);

        }



    $(function () {
            $.ajax({
                  type:'post',
                  dataType:'json',
                  data:'maxLat='+maxLat +'&minLat='+minLat +'&maxLng='+maxLng +'&minLng='+minLng,
                  url:'polygeofence.php',
                  success: function(data){

                      bounds  = new google.maps.LatLngBounds();
                      $.each(data,function(i,dat){

                                 if (pointInPolygon(polySides,polyLat,polyLng,dat.lat,dat.lng)){
                                       var latlng = new google.maps.LatLng(parseFloat(dat.lat),parseFloat(dat.lng));

                                      addMarker(latlng);
                                      bounds.extend(latlng);

                                  }

                      });
                      map.fitBounds(bounds);

                  }

            });
        });


     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;
        }

     function addMarker(latlng){
            marker = new google.maps.Marker({
                position: latlng,
                map: map,
                draggable: false

            });
          marker.setMap(map);
     }







        google.maps.event.addDomListener(window, 'load', initialize);
var映射;
var polySides=7;
var polyLat=新数组();
polyLat[0]=53.198524;
polyLat[1]=53.198566;
polyLat[2]=53.199001;
polyLat[3]=53.199394;
polyLat[4]=53.199409;
polyLat[5]=53.199421;
polyLat[6]=53.199425;
polyLat[7]=53.198524;
var polyLng=新数组();
polyLng[0]=-105.762383;
polyLng[1]=-105.765083;
polyLng[2]=-105.762314;
polyLng[3]=-105.765083;
polyLng[4]=-105.765091;
polyLng[5]=-105.762123;
polyLng[6]=-105.763580;
polyLng[7]=-105.762383;
var maxLat=Math.max.apply(null,polyLat);
var minLat=Math.min.apply(null,polyLat);
var maxLng=Math.max.apply(null,polyLng);
var minLng=Math.min.apply(null,polyLng);
var bounds=new google.maps.LatLngBounds;
函数初始化(){
初始值=新的google.maps.LatLng(53.1992462441276875,-105.76864242553711);
变量映射选项={
缩放:16,
中心:首字母,
动物控制:对,
ZoomControl选项:{
样式:google.maps.ZoomControlStyle.LARGE
},
mapTypeControl:false
};
map=new google.maps.map(document.getElementById('map_canvas'),mapOptions);
}
$(函数(){
$.ajax({
类型:'post',
数据类型:'json',
数据:'maxLat='+maxLat+'&minLat='+minLat+'&maxLng='+maxLng+'&minLng='+minLng,
url:'polygeofense.php',
成功:功能(数据){
bounds=新的google.maps.LatLngBounds();
$。每个(数据、函数(i、dat){
if(点多边形(多边、多段、多段、基准纬度、基准液化天然气)){
var latlng=新的google.maps.latlng(parseFloat(dat.lat)、parseFloat(dat.lng));
添加标记(latlng);
边界扩展(latlng);
}
});
映射边界(bounds);
}
});
});
函数点多边形(多边形,多边形x,多边形y,x,y){
var j=多糖苷-1;
oddNodes=0;
对于(i=0;i数组(),
“lng'=>数组(),
);
而($row=mysql\u fetch\u数组($queryresult,mysql\u两者)){
$results['lat'][]=$row['lat'];
$results['lng'][=$row['lng'];
}
echo json_编码($results);

编辑:编辑代码后,我的suces dat出现问题。lat和dat.lng未定义。

代码中有很多问题。您缺少许多变量声明和其他内容

我对我的大部分更改都这样评论:

// missing bounds object here
var bounds = new google.maps.LatLngBounds();
我删除了AJAX部分,因为它当然不起作用。我只是创建了一个标记。没有多边形。但至少这显示了一个正确的LatLng对象被传递到
addMarker()
函数

希望这有帮助

编辑:

下面是您应该如何创建JSON输出

$sql = "SELECT * FROM geofencetbl WHERE (lat>='$minlat' AND lat<='$maxlat') AND (lng>='$minlng' AND lng<='$maxlng')";

$result = $db->query($sql) or die($db->error);

while ($obj = $result->fetch_object()) {

    $results[] = $obj;
}

echo json_encode($results);

$sql=“从geofencetbl中选择*(lat>='$minlat'和lat='$minlng'和lngAt我猜通过AJAX接收回来的坐标被Javascript视为字符串。Google Maps期望传递给LatLng构造函数的值是数字。尝试将它们包装在parseFloat:
var LatLng=new Google.Maps.LatLng(parseFloat(dat.lat)、parseFloat(dat.lng))中
@duncan,我尝试了你的解决方案,但仍然没有标记显示如果你在
addMarker()函数中
console.log(latlng)
怎么办?@MrUpsidown,lat[“53.199394”,“53.198566”,“53.199409”,另外两个…]0“53.199394”1“53.198566”2“53.199409”3“53.199425”4“53.199001”lng[“-105.765083”-105.765083“,“-105.765091”,还有两个…]0“-105.765083”1“-105.765083”2“-105.765091”3“-105.763580”4“-105.762314”@MrUpsidown,我在控制台中只有7个lat和7个lng。log(latlng)ajax的响应是这样的,lat[“53.199394”,“53.198524”,“53.198566”,还有4个…]lng[“-105.765083”,“105.762383”-105.765083“,4更多…]我的dat.lat在我的成功中是未定义的,ajaxi将标记放在这样的$数据上。每个(data.marker,function(i,dat),映射加载但没有标记显示
var latlng=new google.maps.latlng(dat.lat[i],dat.lng[i]);
?我放控制台.log(“latlng”,latlng);但它没有执行,我也删除了data.marker,因为jquery将得到错误“a未定义”,所以我返回$.each(data.marker,function(i,dat)
$sql = "SELECT * FROM geofencetbl WHERE (lat>='$minlat' AND lat<='$maxlat') AND (lng>='$minlng' AND lng<='$maxlng')";

$result = $db->query($sql) or die($db->error);

while ($obj = $result->fetch_object()) {

    $results[] = $obj;
}

echo json_encode($results);