Отображать различные маркеры карты и полилинию в зависимости от выбора выпадающего списка - PullRequest
0 голосов
/ 07 августа 2011

Я работаю над проектом, который использует API Карт Google.Я хотел бы создать страницу, которая по умолчанию отображает встроенную карту с центром в Сан-Франциско, но добавляет определенные маркеры и полилинии в зависимости от того, какой из пунктов выпадающего меню был выбран.Я не уверен, как настроить этот список для изменения отображения карты и маркера в зависимости от выбора пользователя.

Я думаю, что мне нужно сделать, это настроить функцию переключения с JavaScript для выполнения на разных кусках кодав зависимости от ввода пользователя.Я полностью новичок в JavaScript, поэтому не знаю, как это сделать.

Прямо сейчас я настроил только раскрывающийся список и отображение карты по умолчанию.Любой совет будет принята с благодарностью.

<!DOCTYPE html>
<!-- The majority of this embedding code was borrowed from code.google.com/apis/maps/documentation/javascript/examples/map-simple.html -->
<html>
<head>
<meta name="viewport" content="width=page-width, initial-scale=1.0, user-scalable=no" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css" rel="stylesheet" type="text/css" />
<link href="styles.css" rel="stylesheet" type="text/css" />
<title>Project 2: BART Route Map</title>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=true"></script>
<script type="text/javascript">

function initialize() {
    var myLatlng = new google.maps.LatLng(37.786453,-122.416649);
    var myOptions = {
      zoom: 12,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
    scrollwheel: false
    }
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    var marker = new google.maps.Marker({
        position: myLatlng, 
        map: map,
        title:"San Francisco"
    });  
    }
</script>

</head>
<body onload="initialize()">
<h1> BART Route Map </h1>
<h2> Select a route: </h2>
<form id="routeselector">
    <select name="mapchange">
    <option value="DALY-DUBL">Daly City - Dublin/Pleasanton</option>
    <option value="DALY-FRMT">Daly City - Fremont</option>
    <option value="DUBL-DALY">Dublin/Pleasanton - Daly City</option>
    <option value="FRMT-DALY">Fremont - Daly City</option>
    <option value="FRMT-RICH">Fremont - Richmond</option>
    <option value="MLBR-RICH">Millbrae/Daly City - Richmond</option>
    <option value="SFIA-PITT">Millbrae/SFIA - Pittsburg/Bay Point</option>
    <option value="PITT-SFIA">Pittsburg/Bay Point - SFIA/Millbrae</option>
    <option value="RICH-FRMT">Richmond - Fremont</option>
    <option value="RICH-MLBR">Richmond - Daly City/Millbrae</option>
    </select>
</form>

<div id="map_canvas" style="height=100%; width=100%">
</div><!-- map_canvas -->

</body>

</html>

1 Ответ

0 голосов
/ 07 августа 2011

Вы можете использовать addDomListener() для прослушивания подходящего события DOM (вероятно, onChange) элемента управления <select>. Внутри обработчика для этого события вам нужно будет установить существующую карту маркера на null и установить карту маркера, которую вы хотите показать, на map. Если у вас есть разумное количество маркеров, вы можете создать их все заранее. Если вы имеете дело с тысячами маркеров, это другая история. Если вам необходимо создавать маркеры по мере необходимости, убедитесь, что вы понимаете, как работает область видимости в обработчике.

Я не работал с полилиниями, но процесс, вероятно, похож, возможно, даже идентичен.

Я действительно не думаю, что оператор switch - это то, что вы хотите использовать в этом случае, но, поскольку вы спрашиваете, вы можете просто воспользоваться Google оператором переключения JavaScript и найти достойные объяснения. Даже у очень клеветнических w3schools есть приемлемое быстрое вступление (хотя в нем отсутствуют детали). Вот их способ показать синтаксис:

switch(n)
{
case 1:
  execute code block 1
  break;
case 2:
  execute code block 2
  break;
default:
  code to be executed if n is different from case 1 and 2
}
...