谷歌地图与当地教堂,如何构建API调用?

问题描述 投票:0回答:1

有没有办法使用 API 从 Google 检索地图,以便显示带有标记的当地教堂列表?

我有基本的语法,并且有基本的 API 帐户设置,但我不知道如何/是否可以使用类型字段。

var mapOptions = {
    center: new google.maps.LatLng("-33.8670522", "151.1957362"),
    zoom: 11,
    scrollwheel: false,
    streetViewControl: false,
    mapTypeId: google.maps.MapTypeId.ROADMAP
};

var map = new google.maps.Map(document.getElementById("googlemaps"), mapOptions);
javascript google-maps google-places-api
1个回答
5
投票

是的,您可以使用 Google Places API 来完成此操作。

我将使用 JavaScript API,因为看起来你正在使用 JS。

文档中所述:

地点服务是一个独立的库,独立于主要的 Maps API JavaScript 代码。要使用此库中包含的功能,您必须首先使用 Maps API 引导 URL 中的库参数加载它:

<script src="https://maps.googleapis.com/maps/api/js?libraries=places"></script>

此后,使用 JavaScript Places API,您可以按类型和半径(以米为单位)请求地点。允许的最大半径为 50.000 米。

这里有一段代码演示了这一点:

var request = {
    location: sydney,
    radius: 5000,
    types: ['church']
};

var service = new gm.places.PlacesService(map);
service.nearbySearch(request, handlePlaceResponse);

Obs.:在此示例中,

handlePlaceResponse
是处理响应并创建标记的回调。在完整的示例中查看它是如何工作的。

这将请求距悉尼点 5 公里半径范围内的教堂

lat:
-33.8670522,
lng:
151.1957362)。

要覆盖标记,您需要处理响应。在示例中,我仅使用

name
作为
InfoWindow
的内容。您可以在此处查看有关回复的详细信息:地点详细信息回复

因此,创建标记的函数如下所示:

/**
 * Creates marker with place information from the response
 */
function createMarker(place) {
    var marker = new google.maps.Marker({
        map: map,
        position: place.geometry.location
    });
    
    var infowindow = new google.maps.InfoWindow();
    
    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(place.name);
        infowindow.open(map, this);
    });
}

有关 API 支持的类型,请查看此链接:地点类型

这是一个示例,使用您问题中的点作为中心点,并使用 5000 米作为

radius

<html>
<head>
    <title>Google Maps - Places Sample</title>
    <style>
        body {
            margin: 0;
        }
        #map {
            height: 100%;
            width: 100%;
        }
    </style>
    <script src="https://maps.googleapis.com/maps/api/js?key=${YOUR_API_KEY}&libraries=places"></script>
    <script>
        var gm = google.maps;
        
        var map;
        var bounds;
        var service;
        var infowindow;
        
        var sydney = new gm.LatLng(-33.8670522, 151.1957362);

        function initialize() {
            var options = {
                zoom: 15,
                center: sydney,
                mapTypeId: gm.MapTypeId.ROADMAP,
                streetViewControl: false,
                scrollwheel: false
            };

            map = new gm.Map(document.getElementById("map"), options);
            
            var request = {
                location: sydney,
                radius: 5000,
                types: ['church']
            };

            bounds = new gm.LatLngBounds();
            infowindow = new gm.InfoWindow();
            service = new gm.places.PlacesService(map);
            service.nearbySearch(request, handlePlaceResponse);
        }
        
        /**
         * Handle place response and call #createMarker to creat marker for every place returned
         */
        function handlePlaceResponse(results, status) {
            if (status == gm.places.PlacesServiceStatus.OK) {
                for (var i = 0; i < results.length; i++) {
                    createMarker(results[i]);
                }
            }
            map.fitBounds(bounds);
            map.setCenter(bounds.getCenter());
        }

        /**
         * Creates marker with place information from response
         */
        function createMarker(place) {
            var location = place.geometry.location;
            var marker = new gm.Marker({
                map: map,
                position: location
            });
            
            bounds.extend(location);

            gm.event.addListener(marker, 'click', function() {
                infowindow.setContent(place.name);
                infowindow.open(map, this);
            });
        }

        gm.event.addDomListener(window, 'load', initialize);
    </script>
</head>
<body>
    <div id="map"></div>
</body>
</html>

P.S.:请务必将

${YOUR_API_KEY}
替换为您自己的密钥。

© www.soinside.com 2019 - 2024. All rights reserved.