mapbox-gl 实现搜索地名
时间: 2023-07-07 08:31:44 浏览: 317
地名查询系统
4星 · 用户满意度95%
要在 mapbox-gl 中实现搜索地名,你需要使用 Mapbox Geocoding API。首先,在你的 Mapbox 账户中创建一个 access token,然后将其添加到你的代码中。
接下来,你需要在你的 HTML 文件中添加一个搜索框和一个结果列表。当用户在搜索框中输入地名时,你可以使用 Mapbox Geocoding API 发送一个请求并获取结果。你可以使用 JavaScript 来实现这个功能。
以下是一个简单的示例代码:
```
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Mapbox GL Search</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src='https://api.mapbox.com/mapbox-gl-js/v2.2.0/mapbox-gl.js'></script>
<link href='https://api.mapbox.com/mapbox-gl-js/v2.2.0/mapbox-gl.css' rel='stylesheet' />
<style>
body {
margin: 0;
padding: 0;
}
#map {
position: absolute;
top: 0;
bottom: 0;
width: 100%;
}
#search {
position: absolute;
top: 10px;
left: 50%;
transform: translateX(-50%);
z-index: 1;
}
#results {
position: absolute;
top: 60px;
left: 50%;
transform: translateX(-50%);
z-index: 1;
max-height: 200px;
overflow-y: scroll;
background-color: white;
border: 1px solid #ccc;
border-radius: 4px;
padding: 4px;
box-shadow: 0 2px 4px rgba(0,0,0,0.2);
}
.result {
cursor: pointer;
padding: 4px;
margin-bottom: 4px;
border-radius: 4px;
transition: background-color 0.2s;
}
.result:hover {
background-color: #eee;
}
</style>
</head>
<body>
<div id='map'></div>
<div id='search'>
<input type='text' id='search-input' placeholder='Search for a place'>
</div>
<div id='results'></div>
<script>
mapboxgl.accessToken = 'YOUR_ACCESS_TOKEN';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v11',
center: [-122.4194, 37.7749],
zoom: 12
});
var geocoder = new MapboxGeocoder({
accessToken: mapboxgl.accessToken,
mapboxgl: mapboxgl
});
document.getElementById('search').appendChild(geocoder.onAdd(map));
geocoder.on('result', function(e) {
var results = document.getElementById('results');
results.innerHTML = '';
e.result.features.forEach(function(feature) {
var result = document.createElement('div');
result.className = 'result';
result.innerHTML = feature.place_name;
result.addEventListener('click', function() {
map.flyTo({
center: feature.center,
zoom: 14
});
});
results.appendChild(result);
});
});
</script>
</body>
</html>
```
在这个示例代码中,我们使用 Mapbox Geocoding API 来搜索地名。当用户在搜索框中输入地名时,我们发送一个请求并获取结果。然后,我们将结果显示在一个列表中,当用户点击列表中的某个结果时,我们使用 `map.flyTo()` 方法将地图移动到该地点。
请注意,这个示例代码仅仅是一个简单的示例,你可以根据你的实际需求来修改它。例如,你可以将搜索框和结果列表放在不同的位置,或者使用自定义样式来美化它们。
阅读全文