gpt4 book ai didi

javascript - 如何在交互式 map 上使用自定义选项填充谷歌地图自动完成搜索结果?

转载 作者:行者123 更新时间:2023-11-28 05:22:56 25 4
gpt4 key购买 nike

所以我坚持这个 - 我正在构建一个网站,根据用户输入的位置显示用户附近的事件,即如果我在搜索框中输入“肯特,伦敦”或邮政编码,它将显示带有图钉和/或详细说明附近事件的列表的交互式 map - 本质上类似于 Trivago 在您输入位置时显示酒店的功能,您可以查看列表/显示 map 。

到目前为止,我已经通过创建一个输入框并像这样调用 Google Maps API 来设法让自动完成功能在现场工作:

    <head>
...
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places"></script>
...
</head>
<body>
...
<input id="searchTextField" type="text" size="50">
...
</body>

然后调用一个JS函数:

    function initialize() {

var input = document.getElementById('searchTextField');
var autocomplete = new google.maps.places.Autocomplete(input);
}

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

但是我不知道如何:

  1. 获取搜索框,当用户点击输入或点击 “搜索”按钮,显示带有交互式 map 的页面 - 待定 老实说,我认为这将是一个 onClick 函数或类似的东西 如果有人可以澄清并向我提供正确的信息 用这个打开新页面的语法?

    1. 在这个新页面上 - 我希望交互式 map 显示的数据取决于用户输入的位置 - 我可以感谢并非所有地点都适用,我不打算覆盖整个国家 - 相反我想开始一两个位置并在 map 上列出依赖于它们的事件 -因此,如果我输入“肯特”或什至输入邮政编码 - 我将如何得到要显示的 map ?

    2. 至于事件本身,我知道我想放入哪些事件,但根据上述要求输入和调用这些事件的正确方法是什么?我需要创建然后从某种数据库中导入它们吗?这些可以作为图钉填充在 map 上吗?当您单击图钉时,会显示更多信息吗?或者作为 map 侧面或下方的列表?

感谢任何帮助我能理解这是一个复杂的问题,我绝不打算做一些像 Trivago 这样规模的事情——更多的是本着他们的搜索精神的 super 精简版本。

最佳答案

您可以尝试从 Google Maps JavaScript API 提供的不同示例代码开始.

这是关于如何使用 Place Autocomplete 的示例代码.

// This example requires the Places library. Include the libraries=places
// parameter when you first load the API. For example:
// <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places">

function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
center: {lat: -33.8688, lng: 151.2195},
zoom: 13
});
var input = /** @type {!HTMLInputElement} */(
document.getElementById('pac-input'));

var types = document.getElementById('type-selector');
map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);
map.controls[google.maps.ControlPosition.TOP_LEFT].push(types);

var autocomplete = new google.maps.places.Autocomplete(input);
autocomplete.bindTo('bounds', map);

var infowindow = new google.maps.InfoWindow();
var marker = new google.maps.Marker({
map: map,
anchorPoint: new google.maps.Point(0, -29)
});

autocomplete.addListener('place_changed', function() {
infowindow.close();
marker.setVisible(false);
var place = autocomplete.getPlace();
if (!place.geometry) {
window.alert("Autocomplete's returned place contains no geometry");
return;
}



// If the place has a geometry, then present it on a map.
if (place.geometry.viewport) {
map.fitBounds(place.geometry.viewport);
} else {
map.setCenter(place.geometry.location);
map.setZoom(17); // Why 17? Because it looks good.
}
marker.setIcon(/** @type {google.maps.Icon} */({
url: place.icon,
size: new google.maps.Size(71, 71),
origin: new google.maps.Point(0, 0),
anchor: new google.maps.Point(17, 34),
scaledSize: new google.maps.Size(35, 35)
}));
marker.setPosition(place.geometry.location);
marker.setVisible(true);

var address = '';
if (place.address_components) {
address = [
(place.address_components[0] && place.address_components[0].short_name || ''),
(place.address_components[1] && place.address_components[1].short_name || ''),
(place.address_components[2] && place.address_components[2].short_name || '')
].join(' ');
}

infowindow.setContent('<div><strong>' + place.name + '</strong><br>' + address);
infowindow.open(map, marker);
});

// Sets a listener on a radio button to change the filter type on Places
// Autocomplete.
function setupClickListener(id, types) {
var radioButton = document.getElementById(id);
radioButton.addEventListener('click', function() {
autocomplete.setTypes(types);
});
}

setupClickListener('changetype-all', []);
setupClickListener('changetype-address', ['address']);
setupClickListener('changetype-establishment', ['establishment']);
setupClickListener('changetype-geocode', ['geocode']);
}

现在,您可以将此代码作为起点,然后尝试在此处应用您希望应用程序执行的不同功能。

关于javascript - 如何在交互式 map 上使用自定义选项填充谷歌地图自动完成搜索结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38941655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com