2016-02-07 76 views
0

我在我的地图中有一个自定义的Google地图,该地图有多个多边形,可以反映路线拾取的各个区域(例如星期一拾取区域,星期二拾取区域等),实质上我想要做的是找出一个特定地址落入哪个多边形。这样,我就可以通过单击一次按钮来确定新用户将会属于哪一天,而不必复制地址,转到地图,粘贴,搜索并查看它登录的多边形。找到哪个多边形地址在

我对Google地图完全陌生,对API或KML/KMZ文件不太熟悉。我发现我可以导出一个自我更新的KML或KMZ文件,所以也许我可以将它存储在服务器上,然后让程序使用它来找出多边形地址在哪里,但我不知道如何使用c#或我需要使用JavaScript,如果是的话,我会怎么做?或者有没有一种方法可以通过GET或其他方式直接查询Google?

UPDATE 使用下面的代码我已经能够加载谷歌提供的网络链接的kml文件。现在我想知道如何才能做到,点击按钮,找到从加载的kml中输入的地址所在的多边形图层。我将继续尝试使用我发现的内容进行更新。

<!DOCTYPE html> 
<html> 
<head> 
<script 
src="http://maps.googleapis.com/maps/api/js"> 
</script> 

<script> 
function initMap() { 
    var map = new google.maps.Map(document.getElementById('googleMap'), { 
    zoom: 11, 
    center: {lat: 39.10342, lng: -76.87271} 
    }); 

    var kmlLayer = new google.maps.KmlLayer(); 
    var kmlUrl =  'http://xxxxxxxxxxx.com/crew/map/test.kml'; 
var kmlOptions = { 
    suppressInfoWindows: true, 
    preserveViewport: false, 
    map: map 
}; 
var kmlLayer = new google.maps.KmlLayer(kmlUrl, kmlOptions); 
} 

google.maps.event.addDomListener(window, 'load', initMap); 
</script> 
</head> 

<body> 
<div id="googleMap" style="width:600px;height:450px;"></div> 

</body> 
</html> 

回答

0

发现原来这就是我结束了混合后及配套各条从不同的站点信息。它加载存储在服务器上的kml,获取用户输入的地址,以kml的多边形搜索它,如果发现它,然后计算出它是哪一天,然后适当设置拾取下拉菜单。

请注意,我隐藏了我的地图,并且未设置任何标记或任何其他标记;我纯粹用它来找出哪个多边形地址属于哪个。

<script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript" src="https://geoxml3.googlecode.com/svn/branches/polys/geoxml3.js"></script> 
<script src="../scripts/v3_epoly.js" type="text/javascript"> </script> 
<script type="text/javascript"> 
    var geoXml = null; 
    var map = null; 
    var geocoder = null; 
    var toggleState = 1; 
    var infowindow = null; 
    var marker = null; 

function initialize() { 
    geocoder = new window.google.maps.Geocoder(); 
    infowindow = new window.google.maps.InfoWindow({size: new window.google.maps.Size(150,50) }); 
    // create the map 
    var myOptions = { 
    zoom: 12, 
    center: new window.google.maps.LatLng(43.502745, -116.240845), 
    mapTypeControl: true, 
    mapTypeControlOptions: {style: window.google.maps.MapTypeControlStyle.DROPDOWN_MENU}, 
    navigationControl: true, 
    mapTypeId: window.google.maps.MapTypeId.ROADMAP 
    } 

    map = new window.google.maps.Map(document.getElementById("map_canvas"), 
           myOptions); 
    geoXml = new window.geoXML3.parser({map: map, singleInfoWindow: true, infoWindow: infowindow}); 

    geoXml.parse('map/routemap-v2.kml'); 
} 
function showAddress() { 
    var address = $("#<%=txtCustomerAddress.ClientID%>").val() + ', ' + $("#<%=txtCustomerCity.ClientID%>").val() + ', ' + $("#<%=txtCustomerState.ClientID%>").val() + ' ' + $("#<%=txtCustomerZipcode.ClientID%>").val(); 
    geocoder.geocode({ 'address': address}, function(results, status) { 
     if (status === window.google.maps.GeocoderStatus.OK) { 
      var point = results[0].geometry.location; 

      for (var i=0; i<geoXml.docs[0].gpolygons.length; i++) { 
       if (geoXml.docs[0].gpolygons[i].Contains(point)) { 
        var layerName = geoXml.docs[0].placemarks[i].name; 
        var day = ""; 
        if (layerName.indexOf("Monday") >= 0) { 
         day = "Monday"; 
        } 
        else if (layerName.indexOf("Tuesday") >= 0) { 
         day = "Tuesday"; 
        } 
        else if (layerName.indexOf("Wednesday") >= 0) { 
         day = "Wednesday"; 
        } 
        else if (layerName.indexOf("Thursday") >= 0) { 
         day = "Thursday"; 
        } 
        else if (layerName.indexOf("Friday") >= 0) { 
         day = "Friday"; 
        } 
        else if (layerName.indexOf("Saturday") >= 0) { 
         day = "Saturday"; 
        } 
        else if (layerName.indexOf("Sunday") >= 0) { 
         day = "Sunday"; 
        } else { 
         day = layerName; 
        } 
        $("#<%=PickUpDay.ClientID%>").val(day); 
        i = 999; // exit loop 
      } 
     } 
     } else { 
      alert("Address, as inputed, is not within the limits of any of the current routes. Please manually consult pick up day or edit address and try again."); 
     } 
    }); 
    } 
</script> 

<body onload="initialize()"> 
    <div id="map_canvas" style="width: 0; height: 0; margin-bottom: 10px; border:1px solid #999; display: none"></div> 
</body> 
0

我得到的是你想知道在哪个多边形地址将落入。如果是这种情况,那么containsLocation可以为你带来好处。将地址'latlng的值传递给每个多边形,看看这些坐标是否在一个内部。

有点像这个

var polygons = []; 

function checkIfPartOfPolygon(addressLatLng, polygon){ 
    return google.maps.geometry.poly.containsLocation(e.latLng, bermudaTriangle); 
} 

function foo(){ 
    var address = {}; 
    for (var i=0; i<polygons.length; i++){ 
     var addressPartOfPolygon = checkIfPartOfPolygon(address.latlng, polygons[i]); 
     if (addressPartOfPolygon){ 
      //address is part of current polygon, do something here 
      break; 
     } 
    } 
} 

为containsLocation的官方样片可在documentation's sample section

相关问题