Google地图和表单输入之间的交互

时间:2015-08-28 11:34:42

标签: javascript jquery google-maps-api-3 google-maps-markers

我有一个像这样的HTML页面:

 <button onclick="initMap()">Regenerate</button><BR>

    Latitude<input style="width: 5em;" id="lat" name="lat" type="number" value="35.9000" step="0.1"/></div><BR>
    Longitude<input style="width: 5em;" id="long" name="long" type="number" value="15.7500" step="0.1"/></div>


    <div id="map"></div>

        <script>

            var map;

            function initMap() {

                var latitude = parseFloat ($('#lat').val());
                var longitude = parseFloat ($('#long').val());

                var mapOptions = {

                    zoom: 13,
                    center: new google.maps.LatLng(latitude, longitude),
                    mapTypeId: google.maps.MapTypeId.TERRAIN

                };

                map = new google.maps.Map(document.getElementById('map'), mapOptions);


            }

        $( "#lat" ).change(function() {
            placeMarkers();
        });

        $( "#long" ).change(function() {
            placeMarkers();
        }); 

function placeMarkers() {

        var latitude = parseFloat ($('#lat').val());
        var longitude = parseFloat ($('#long').val());

        var markerDep = new google.maps.Marker({
          position: {lat: latitude, lng: longitude},
          map: map,
          label: "D",
          draggable: true,
          title: 'Departure'
        });

        var markerArr = new google.maps.Marker({
          position: {lat: latitude+0.01, lng: longitude+0.01},
          map: map,
          label: "A",
          draggable: true,
          title: 'Arrival'
        });

    }

        </script>

我希望与用户在表单和地图中提供的值进行互动。

编辑:部分解决,请参阅上面的代码

每次用户点击/更改值时刷新地图都有点重#34;因此,我不是每次输入更改时调用initMap(),而是只想替换标记?但是PlaceMarkers()并没有设法这样做......除了第一次(加载时)。其他时候,他们创造了新的标记...

1 个答案:

答案 0 :(得分:0)

我有一个可接受的解决方案,对于那些感兴趣的人,这里是:

Departure :
Latitude<input style="width: 5em;" id="latD" name="latD" type="number" value="37" step="0.01"/></div><BR>
Longitude<input style="width: 5em;" id="longD" name="longD" type="number" value="11" step="0.01"/></div>
<BR>
Arrival: <BR>
Latitude<input style="width: 5em;" id="latA" name="latA" type="number" value="38" step="0.01"/></div><BR>
Longitude<input style="width: 5em;" id="longA" name="longA" type="number" value="12" step="0.01"/></div>

<div id="map"></div>

<script>

    var map;
    var markerArr;
    var markerDep;

    //init function
    function initMap() {

        //used for the definition of the map's center
        var latitude = parseFloat ($('#latD').val());
        var longitude = parseFloat ($('#longD').val());

        var mapOptions = {

            zoom: 13,
            center: new google.maps.LatLng(latitude, longitude),
            mapTypeId: google.maps.MapTypeId.TERRAIN

        };

        map = new google.maps.Map(document.getElementById('map'), mapOptions);

        //creates the Departure and Arrival markers
        placeDepMarker();
        placeArrMarker();

    }

    //creates Departure
    function placeDepMarker() {

        var latitude = parseFloat ($('#latD').val());
        var longitude = parseFloat ($('#longD').val());

        markerDep = new google.maps.Marker({
            position: {lat: latitude, lng: longitude},
            map: map,
            label: "D",
            draggable: true,
            title: 'Departure'
        });

    }

    //creates Arrival
    function placeArrMarker() {

        var latitude = parseFloat ($('#latA').val());
        var longitude = parseFloat ($('#longA').val());

        markerArr = new google.maps.Marker({
            position: {lat: latitude+0.01, lng: longitude+0.01},
            map: map,
            label: "A",
            draggable: true,
            title: 'Arrival'
            });                 
    }

    //Erases Arrival marker
    function clearArrMarker() {
        markerArr.setMap(null);
    }

    //erases Departure marker
    function clearDepMarker() {
        markerDep.setMap(null);
    }

    $( "#latD, #longD").change(function() {
        clearDepMarker();
        placeDepMarker();
    });

    $( "#latA, #longA").change(function() {
        clearArrMarker();
        placeArrMarker();
    });



</script>

当然,可以实现许多改进,例如clearDepMarker()和clearArrMarker()可以在同一个函数中实现:

//erases the given marker
    function clearMarker(marker) {
        marker.setMap(null);
    }

现在我需要考虑拖放以刷新表单