Google maps API: на карте появляются маркеры - PullRequest
0 голосов
/ 25 апреля 2020

Я создаю веб-страницу, где у меня есть карта Google, которая (или должна) заполняться данными из моей базы данных MySQL, расположенной на PHPmyAdmin. Однако маркеры не отображаются на карте.

Я сделал спокойный сервер в python, где я использую маршрут для получения данных, а затем клиент ПОЛУЧАЕТ эти данные для размещения на карте, которые я могу без проблем в моем браузере.

После отладки в браузере я вижу, что данные действительно поступают в мой клиент в виде строки json и сортируются по моему для l oop.

Изображение, показывающее данные в клиенте

Поражает функцию displaylocation(location) [см. Изображение], однако я действительно не могу понять, почему маркеры не появляются на карта. Во время отладки location.address, location.name, location.lat et c показывают, что адрес, имя и лат не определены. Я не уверен, в этом ли проблема или как я бы решил это. У меня были проблемы с API и передачи данных моему клиенту, однако я считаю, что я решил эти проблемы. Я могу только предположить, что проблема связана с функцией displaylocation, но я уверен, что кто-то с большим знанием JavaScript мог бы сказать мне так или иначе.

Вот мой код, любые подсказки будут очень получены .

<!DOCTYPE html>

<html lang="en">

<head>
    <meta charset="utf-8" />
    <title>AWD_CLient</title>
    <style type="text/css">
        body {
            font: normal 14px Verdana;
        }

        h1 {
            font-size: 24px;
        }

        h2 {
            font-size: 18px;
        }

        #sidebar {
            float: right;
            width: 30%;
        }

        #main {
            padding-right: 15px;
        }

        .infoWindow {
            width: 220px;
        }

    </style>

    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDNMFE1XBzVnhPOI5IH90FrwumF"></script>
    <script type="text/javascript">
        var map;

        // York City Centre
        var center = new google.maps.LatLng(53.957741, -1.082260);



        var geocoder = new google.maps.Geocoder();
        var infowindow = new google.maps.InfoWindow();

        function initMap() {

            var mapOptions = {
                zoom: 13,
                center: center,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            }

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

            makeRequest(function(data) {

                var data = JSON.parse(data.responseText);

                for (var i = 0; i < data.length; i++) {
                    displayLocation(data[i]);
                }
            });
        }

        //Displays the data points on the map
        function displayLocation(location) {

            var content = '<div class="infoWindow"><strong>' + location.name + '</strong>' +
                '<br/>' + location.address +
                '<br/>' + location.description + '</div>';

            if (parseInt(location.lat) == 0) {
                geocoder.geocode({
                    'address': location.address
                }, function(results, status) {
                    if (status == google.maps.GeocoderStatus.OK) {

                        var marker = new google.maps.Marker({
                            map: map,
                            position: results[0].geometry.location,
                            title: location.name
                        });

                        google.maps.event.addListener(marker, 'click', function() {
                            infowindow.setContent(content);
                            infowindow.open(map, marker);
                        });
                    }
                });
            } else {
                var position = new google.maps.LatLng(parseFloat(location.lat), parseFloat(location.lon));
                var marker = new google.maps.Marker({
                    map: map,
                    position: position,
                    title: location.name
                });

                google.maps.event.addListener(marker, 'click', function() {
                    infowindow.setContent(content);
                    infowindow.open(map, marker);
                });
            }
        }
        //Makes a request for the data from the server route
        function makeRequest(callback) {
            var request;
            if (window.XMLHttpRequest) {
                request = new XMLHttpRequest(); 
            } else {
                request = new ActiveXObject("Microsoft.XMLHTTP"); 
            }
            request.onreadystatechange = function() {
                if (request.readyState == 4 && request.status == 200) {
                    callback(request);
                }
            }
            //var jsonString = "{id : \"dbMap\"}";
            request.open("GET", "http://0.0.0.0:8080/dbMap", true);
            request.send();
        }

    </script>
</head>

<body onload="initMap();">

    <h1>Team Locations</h1>

    <section id="sidebar">
        <div id="directions_panel"></div>
    </section>

    <section id="main">
        <div id="map_canvas" style="width: 70%; height: 500px;"></div>
    </section>

</body>

</html>

* * * * * * JSON с моего сервера выглядит так, когда я просматриваю конечную точку в своем браузере, если это вообще помогает. Приносим извинения за неправильное отображение.

[
  [
    1, 
    "Test1", 
    "york", 
    53.95734, 
    -1.086833, 
    "test1"
  ], 
  [
    2, 
    "Test2", 
    "york", 
    53.961533, 
    -1.085244, 
    "test2"
  ], 
  [
    3, 
    "Test3", 
    "york", 
    53.963051, 
    -1.078202, 
    "test3"
  ], 
  [
    4, 
    "Test4", 
    "york", 
    53.963104, 
    -1.082185, 
    "test4"
  ], 
  [
    5, 
    "Test5", 
    "york", 
    53.962978, 
    -1.08532, 
    "test5"
  ], 
  [
    6, 
    "Test6", 
    "york", 
    53.9575, 
    -1.09227, 
    "test6"
  ], 
  [
    7, 
    "Test7", 
    "york", 
    53.964924, 
    -1.074406, 
    "test7"
  ], 
  [
    8, 
    "Test8", 
    "york", 
    53.961391, 
    -1.073976, 
    "test8"
  ]
]

Вот конечная точка на моем сервере.

@testRestServer.route("/dbMap", methods=['GET', 'POST'])
def getData():
    cursor.execute("SELECT * FROM markers ")
    return jsonify(cursor.fetchall())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...