Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.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
Javascript 根据lat和lng值检查多边形中的点_Javascript_Jquery_Google Maps - Fatal编程技术网

Javascript 根据lat和lng值检查多边形中的点

Javascript 根据lat和lng值检查多边形中的点,javascript,jquery,google-maps,Javascript,Jquery,Google Maps,我想看看表单提供的纬度和经度坐标是否在多边形内部,然后提醒用户这两个实例 到目前为止,这里是我的代码。我做了一些研究,据说可以使用光线投射,也可以使用谷歌地图API提供的containsLocation()来实现。但是我不知道如何使用它来实现它 这是一个演示 HTML <input id="location" placeholder="" type="text" class="form-control" autocomplete="off"> <div id="map">

我想看看表单提供的纬度和经度坐标是否在多边形内部,然后提醒用户这两个实例

到目前为止,这里是我的代码。我做了一些研究,据说可以使用光线投射,也可以使用谷歌地图API提供的containsLocation()来实现。但是我不知道如何使用它来实现它

这是一个演示

HTML

<input id="location" placeholder="" type="text" class="form-control" autocomplete="off">
<div id="map"></div>

您无法访问使用KmlLayer显示的KML文件中的多边形数据,您需要将多边形创建为本机Google Maps Javascript API v3多边形。您可以使用第三方KML解析器,如或

< P>因为在地图上没有公开任何获取形状的属性或方法,可以考虑以下解决方案:

  • 将KML文件转换为GeoJSON格式,例如使用()
  • 使用GeoJSON文件在地图上显示数据层,然后使用可以确定点是否位于多边形内,如下所示
/**
*初始化贴图并调用创建多段线的函数。
*/
函数初始化(){
var map=new google.maps.map(document.getElementById('map\u div'){
中心:新谷歌地图拉特宁(-34.93138.64),
缩放:12,
mapTypeId:google.maps.mapTypeId.TERRAIN
});
initGeocompleteControl(映射、函数(结果){
map.data.forEach(函数(f){
var bounds=new google.maps.LatLngBounds();
calcBounds(f.getGeometry(),bounds);
if(bounds.contains(result.geometry.location)){
$(“#结果”).html('找到位置');
}否则{
$(“#结果”).html('未找到位置');
}
});
});
map.data.loadGeoJson('https://gist.githubusercontent.com/vgrem/741d25378f5ab8a19b0b/raw/aef3ce18474db7a3482349f2a52cbd9d71caebc3/polygon-simple.json');
}
函数initGeocompleteControl(映射,完成){
var选项={
类型:['(城市)]
//国家:'GB'
};
$(“#位置”).geoplete(选项).bind(“地理代码:结果”,函数(事件,结果){
完成(结果);
});
}
函数计算边界(几何体、边界){
if(google.maps.LatLng的几何体实例){
扩展(几何);
}
else if(google.maps.Data.Point的几何体实例){
extend(geometry.get());
}
否则{
geometry.getArray().forEach(函数(g){
计算边界(g,边界);
});
}
}
google.maps.event.addDomListener(窗口“加载”,初始化)
html,正文{
身高:100%;
保证金:0;
填充:0;
}
#地图组{
身高:100%;
}


可能重复使用KmlLayer显示的KML文件中的多边形数据无法访问,您需要将多边形创建为本机Google Maps Javascript API v3多边形。您可以使用第三方KML解析器(如或)来实现这一点。谢谢,如果有两个多边形,您可以检测点所在的多边形吗?可能通过json文件中的“properties”标记?事实上,这可以通过属性实现,例如:
properties:{key:“poly_cityname”}
现在开始:1)GeoJSON中引入了新属性2)修改示例演示了如何使用多个多边形读取功能属性它似乎只在一个多边形中工作。请看看这支钢笔
    var option = {
      types: ['(cities)'],
     // country: 'GB'
    };
    var latco, lngco;

 $("#location").geocomplete(option).bind("geocode:result", function(event, result) {
      latco = result.geometry.location.lat()
      lngco = result.geometry.location.lng()

      console.log(result.geometry.location.lng());
      console.log(result.geometry.location.lat());
    });

var map;
var src = 'http://kml-samples.googlecode.com/svn/trunk/kml/Region/polygon-simple.kml';

function initialize() {
  map = new google.maps.Map(document.getElementById('map'), {
    center: new google.maps.LatLng(-19.257753, 146.823688),
    zoom: 2,
    mapTypeId: google.maps.MapTypeId.TERRAIN
  });
  loadKmlLayer(src, map);
}


function loadKmlLayer(src, map) {
  var kmlLayer = new google.maps.KmlLayer(src, {
    suppressInfoWindows: true,
    preserveViewport: false,
    map: map
  });
  google.maps.event.addListener(kmlLayer, 'click', function(event) {
    var content = event.featureData.infoWindowHtml;
    var testimonial = document.getElementById('capture');
    testimonial.innerHTML = content;
  });
}

google.maps.event.addDomListener(window, 'load', initialize);