我做了一个jsfiddle,它:
- 设置了地址
- 使用geosearch查找该地址的坐标
- 在geosearch找到的那个地址的坐标处创建了一个标记。
您可以在此处找到它:
https://jsfiddle.net/Alechan/L6s4nfwg/
“棘手”的部分是处理由geosearch返回的Javascript“Promise”实例,以及地址可能不明确并且在这种情况下可能返回多个坐标。此外,请注意,Leaflet坐标中的第一个位置对应于纬度,第二个位置对应于经度,这与Geosearch“x”和“y”结果相反。
Geosearch返回一个Promise,因为它是一个异步调用。另一种选择将是同步调用,浏览器将被冻结,直到获得答案。有关promises的更多信息 来自MDM(Mozilla)和Google。
在我的示例中,我为找到的每个结果创建一个标记。但是,在这种情况下,地址是明确的,并且只返回一个结果。
代码细节:
<!-- Head, imports of Leaflet CSS and JS, Geosearch JS, etc -->
<div id='map'></div>
<script>
var map = L.map( 'map', {
center: [ 51.5, -0.1],
zoom: 12
});
L.tileLayer( 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>',
subdomains: ['a','b','c']
}).addTo( map );
var query_addr = "99 Southwark St, London SE1 0JF, UK";
const provider = new window.GeoSearch.OpenStreetMapProvider()
var query_promise = provider.search({ query: query_addr});
query_promise.then( value => {
for(i=0;i < value.length; i++){
var x_coor = value[i].x;
var y_coor = value[i].y;
var label = value[i].label;
var marker = L.marker([y_coor,x_coor]).addTo(map)
marker.bindPopup("<b>Found location</b><br>"+label).openPopup();
};
}, reason => {
console.log(reason);
} );
</script>