C# 查找所在的多边形地址
我的地图中有一个自定义的谷歌地图,它有多个多边形,反映了路线取货的不同区域(例如周一取货区域、周二取货区域等),基本上我想做的是找出特定地址属于哪个多边形。这样,我就可以通过单击一个按钮来确定新用户将属于哪一天的路线,而不必复制地址、转到地图、粘贴、点击搜索并查看它所处的多边形 我对谷歌地图一无所知,对它的API或KML/KMZ文件一点也不熟悉。我知道我可以导出一个自我更新的KML或KMZ文件,所以也许我可以将其存储在服务器上,然后让程序使用它来找出多边形地址所在的位置,但我不知道如何使用c#实现这一点,或者我是否需要使用javascript,如果需要,我将如何实现?或者有没有一种方法可以让我直接通过GET或其他方式查询google 更新 使用以下代码,我已经能够加载谷歌提供的网络链接kml文件。现在,我想知道如何通过单击按钮,从加载的kml中找到输入地址所在的多边形层。我将继续尝试并更新我的发现C# 查找所在的多边形地址,c#,google-maps,polygon,kml,kmz,C#,Google Maps,Polygon,Kml,Kmz,我的地图中有一个自定义的谷歌地图,它有多个多边形,反映了路线取货的不同区域(例如周一取货区域、周二取货区域等),基本上我想做的是找出特定地址属于哪个多边形。这样,我就可以通过单击一个按钮来确定新用户将属于哪一天的路线,而不必复制地址、转到地图、粘贴、点击搜索并查看它所处的多边形 我对谷歌地图一无所知,对它的API或KML/KMZ文件一点也不熟悉。我知道我可以导出一个自我更新的KML或KMZ文件,所以也许我可以将其存储在服务器上,然后让程序使用它来找出多边形地址所在的位置,但我不知道如何使用c#实
<!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>
函数initMap(){
var map=new google.maps.map(document.getElementById('googleMap'){
缩放:11,
中心:{lat:39.10342,lng:-76.87271}
});
var kmlLayer=new google.maps.kmlLayer();
var Kmlur='1〕http://xxxxxxxxxxx.com/crew/map/test.kml';
var kmlOptions={
suppressInfoWindows:对,
不正确:错误,
地图:地图
};
var kmlLayer=新的google.maps.kmlLayer(kmlUrl,kmlOptions);
}
google.maps.event.addDomListener(窗口'load',initMap);
我的意思是,您想知道地址将位于哪个多边形。如果是这样的话,那么对你是有益的。将地址“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;
}
}
}
var polygons=[];
函数checkIfPartOfPolygon(AddressLatling,多边形){
返回google.maps.geometry.poly.containsLocation(如latLng、百慕大群岛);
}
函数foo(){
var地址={};
对于(var i=0;i,这就是我在混合和匹配来自不同站点的各种信息后得到的结果。它加载存储在服务器上的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>
var geoXml=null;
var-map=null;
var-geocoder=null;
var-toggleState=1;
var infowindow=null;
var-marker=null;
函数初始化(){
geocoder=newwindow.google.maps.geocoder();
infowindow=newwindow.google.maps.infowindow({size:newwindow.google.maps.size(150,50)});
//创建地图
变量myOptions={
缩放:12,
中心:new window.google.maps.LatLng(43.502745,-116.240845),
mapTypeControl:true,
mapTypeControlOptions:{style:window.google.maps.MapTypeControlStyle.DROPDOWN_MENU},
导航控制:对,
mapTypeId:window.google.maps.mapTypeId.ROADMAP
}
map=newwindow.google.maps.map(document.getElementById(“map_canvas”),
肌肽);
geoXml=newwindow.geoXML3.parser({map:map,singleInfoWindow:true,infoWindow:infoWindow});
parse('map/routemap-v2.kml');
}
函数showAddress(){
变量地址=$(“#”).val()+','+$(“#”).val()+','+$(“#”).val()+'+$(“#”).val();
geocoder.geocode({'address':address},函数(结果,状态){
if(status==window.google.maps.GeocoderStatus.OK){
var point=结果[0]。geometry.location;
对于(变量i=0;i=0){
day=“星期一”;
}
else if(layerName.indexOf(“星期二”)>=0){
day=“星期二”;
}
else if(layerName.indexOf(“星期三”)>=0){
day=“星期三”;
}
else if(layerName.indexOf(“星期四”)>=0){
day=“星期四”;
}
else if(layerName.indexOf(“星期五”)>=0){
day=“星期五”;
}
else if(layerName.indexOf(“星期六”)>=0){
day=“星期六”;
}
else if(layerName.indexOf(“星期日”)>=0){
day=“星期日”;
}否则{
日=层名称;
}
$(“#”)val(日);
i=999;//退出循环
}
}
}否则{
警报(“输入的地址不在任何当前路线的限制范围内。请手动查阅取货日期或编辑地址,然后重试。”);
}
});
}