2016-12-07 101 views
-2

我需要根据所选地点显示地图。我需要知道如何根据下拉菜单更改地图。这是我迄今为止,但我似乎无法弄清楚如何使用从下拉列表中选择实际更改地图。我在这里完全消隐。任何引用或帮助非常感谢。这是我现在的代码。如何根据从下拉菜单中选择的城市显示Google地图

<script> 
    function myMap() { 
     var mapCanvas = document.getElementById("map"); 
     var mapOptions = { 
     center: new google.maps.LatLng(40.685646, -76.195499), zoom: 10 
    }; 
    var map = new google.maps.Map(mapCanvas, mapOptions); 
} 

</script> 

<div> 
    <h2>Please Choose a City</h2> 
</div> 
<form> 
    <fieldset> 
     <label> 
      Cities 
     </label> 
     <select id="myCity" name="myCity"> 
      <option value="None">Select a City</option> 
      <option value="PHI">Philadelphia, PA</option> 
      <option value="NYC">New York, NY</option> 
      <option value="HAR">Hartford, CT</option> 
     </select> 
    </fieldset> 
</form> 
+0

我认为你需要的坐标添加为值选项,并在每次选择一个城市时重新加载地图。你有什么尝试?你的问题中的代码似乎并不多。 – Ionut

+0

阅读此篇http://stackoverflow.com/questions/32693958/how-to-highlite-region-of-dropdown-selected-area-on-google-map @Brandy Kimmel – simon

+0

我有坐标,只是不知道如何添加它们。这些是每个城市的Lat&Long:latLong for PHI(39.95228,-75.16245) latLong for NYC(40.712784,-74.005941) latLong for HAR(41.763711,-72.685093) –

回答

0

只需按城市钥匙存储坐标。当select发生变化时,取值,得到坐标并用这些坐标调用方法setCenterdocs

让我知道如果有什么不清楚。

var map; 
 
function myMap() { 
 
    var mapCanvas = document.getElementById("map"); 
 
    var mapOptions = { 
 
    center: new google.maps.LatLng(40.685646, -76.195499), 
 
    zoom: 10 
 
    }; 
 
    map = new google.maps.Map(mapCanvas, mapOptions); 
 
} 
 

 
myMap(); 
 

 
var coords = { 
 
    'PHI': '39.953050,-75.163961', 
 
    'NYC': '40.875597,-77.776226', 
 
    'HAR': '41.763633,-72.682662' 
 
}; 
 

 
function changeMap(city) { 
 
    var c = coords[city].split(','); 
 
    map.setCenter(new google.maps.LatLng(c[0], c[1])); 
 
}
#map { 
 
    height: 200px; 
 
}
<script src="https://maps.googleapis.com/maps/api/js"></script> 
 

 
<div> 
 
    <h2>Please Choose a City</h2> 
 
</div> 
 
<form> 
 
    <fieldset> 
 
    <label> 
 
     Cities 
 
    </label> 
 
    <select id="myCity" name="myCity" onchange="changeMap(this.value)"> 
 
     <option value="None">Select a City</option> 
 
     <option value="PHI">Philadelphia, PA</option> 
 
     <option value="NYC">New York, PA</option> 
 
     <option value="HAR">Hartford, CT</option> 
 
    </select> 
 
    </fieldset> 
 
</form> 
 
<div id="map"></div>

http://output.jsbin.com/suhiveb

+0

我相信这是最接近我试图实现的。我只是无法找出值的第二个函数。 –

+0

'带值的第二个函数'你是什么意思?什么麻烦? –

+0

这是我昨天以来一直试图做的事情。在看到你的代码之前,我只是不确定如何使它工作。显然,我仍然不知道如何让它起作用。我不确定我做错了什么。无论我做什么,我都无法让它在我的系统上运行。我完全理解你的代码。我出于某种原因无法使其工作。我甚至删除了我所拥有的一切,并直接复制并粘贴了你的所有内容,而这对我来说并不起作用。 –

0

检查这个例子。数据是储存在selectdata,我通过change event得到select这个数据,并使用setCenter新数据

var map; 
 

 
function initialize() { 
 
    
 
    map = new google.maps.Map(document.getElementById('map'), { 
 
    center: {lat: 40.712784, lng: -74.005941}, 
 
    zoom: 8 
 
    }); 
 

 
} 
 

 
$("#dropdown").change(function() { 
 
    var lat = $("#dropdown option:selected").data('lat'); 
 
    var lng = $("#dropdown option:selected").data('lng'); 
 
    changeLoc(lat, lng); 
 
}); 
 

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

 
function changeLoc(lat, lng) { 
 
    map.setCenter(new google.maps.LatLng(lat,lng)); 
 
}
html, 
 
body, 
 
#map, 
 
.map-container { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
}
<script src="https://maps.googleapis.com/maps/api/js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select id="dropdown"> 
 
    <option value="1" data-lat="40.712784" data-lng="-74.005941" selected>New York City</option> 
 
    <option value="2" data-lat="39.95228" data-lng="-75.16245" >Philadelphia</option> 
 
</select> 
 

 

 
<div class="map-container"> 
 
    <div id="map"></div> 
 
    <!--the google map is loaded already--> 
 
</div>

1

一种选择是使用地理编码器来放大地图至合适范围为城市:

<select id="myCity" name="myCity" onchange="geocodeAddress(this.value);"> 
    <option value="None">Select a City</option> 
    <option value="Philadelphia, PA">Philadelphia, PA</option> 
    <option value="New York, NY">New York, NY</option> 
    <option value="Hartford, CT">Hartford, CT</option> 
</select> 

function geocodeAddress(address) { 
    geocoder.geocode({'address': address}, function(results, status) { 
     if (status === 'OK') { 
     if (results[0].geometry.viewport) { 
     map.fitBounds(results[0].geometry.viewport); 
     } else { 
     map.fitBounds(results[0].geometry.bounds); 
     } 
     } else { 
     alert('Geocode was not successful for the following reason: ' + status); 
     } 
    }); 
    } 

proof of concept fiddle

代码片段:

html, 
 
body { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px; 
 
} 
 
#map { 
 
    height: 70%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px; 
 
}
<script> 
 
    var geocoder; 
 
    var map; 
 

 
    function myMap() { 
 
    var mapCanvas = document.getElementById("map"); 
 
    var mapOptions = { 
 
     center: new google.maps.LatLng(40.685646, -76.195499), 
 
     zoom: 10 
 
    }; 
 
    map = new google.maps.Map(mapCanvas, mapOptions); 
 
    geocoder = new google.maps.Geocoder(); 
 
    } 
 

 
    function geocodeAddress(address) { 
 
    if (address != "None") { 
 
     geocoder.geocode({ 
 
     'address': address 
 
     }, function(results, status) { 
 
     if (status === 'OK') { 
 
      if (results[0].geometry.viewport) { 
 
      map.fitBounds(results[0].geometry.viewport); 
 
      } else { 
 
      map.fitBounds(results[0].geometry.bounds); 
 
      } 
 
     } else { 
 
      alert('Geocode was not successful for the following reason: ' + status); 
 
     } 
 
     }); 
 
    } else { // set back to initial zoom and center 
 
     map.setOptions({ 
 
     center: new google.maps.LatLng(40.685646, -76.195499), 
 
     zoom: 10 
 
     }); 
 
    } 
 
    } 
 
</script> 
 
<div id="map"></div> 
 
<script src="https://maps.googleapis.com/maps/api/js?callback=myMap"></script> 
 
<div> 
 
    <h2>Please Choose a City</h2> 
 
</div> 
 
<form> 
 
    <fieldset> 
 
    <label> 
 
     Cities 
 
    </label> 
 
    <select id="myCity" name="myCity" onchange="geocodeAddress(this.value);"> 
 
     <option value="None">Select a City</option> 
 
     <option value="Philadelphia, PA">Philadelphia, PA</option> 
 
     <option value="New York, NY">New York, NY</option> 
 
     <option value="Hartford, CT">Hartford, CT</option> 
 
    </select> 
 
    </fieldset> 
 
</form>