2015-12-02 62 views
3

在OL3地圖中實現搜索功能的最佳方式是什麼?打開圖層3搜索功能來查找地圖位置?

我需要一個搜索輸入,在搜索時向我顯示一些選項,然後平移和縮放到特定的搜索項。非常像谷歌地圖。

我需要將谷歌地圖整合到我的OL3嗎?

+1

看看,如果這是你在找什麼 - https://github.com/jonataswalker/ol3-geocoder –

+0

這是一個偉大的資源鏈接。真棒!如果我有任何問題,將探索並回來。謝謝@JonatasWalker –

回答

7

Openlayers 3中沒有原生的搜索/地理編碼器。但是您可以使用extension(我寫過)來解決這個問題。

說明位於提供的鏈接。我只是想說明如何我一般使用它:

//Instantiate with some options and add the Control 
var geocoder = new Geocoder('nominatim', { 
    provider: 'google', 
    lang: 'pt-BR', 
    placeholder: 'Pesquise por um endereço', 
    limit: 5, 
    key: '....', 
    keepOpen: false, 
    debug: true 
}); 
map.addControl(geocoder); 

// I don't want/need Geocoder layer to be visible 
geocoder.getLayer().setVisible(false); 

//Listen when an address is chosen 
geocoder.on('addresschosen', function(evt){ 
    var feature = evt.feature; 
    var coord = evt.coordinate; 

    // application specific 
    app.addMarker(feature, coord); 
}); 
+0

我試過改變縮放級別'map.setZoom(7)',但它沒有影響它。任何線索? –

+0

@NicolasT應該是'map.getView()。setZoom(7)'。 –

+1

使用我的自定義搜索字段怎麼樣?這個擴展是否足夠靈活,可以讓我自定義搜索字段的顯示方式? –

0

@Jonatas沃克:當我們搜索的位置,將增加地理編碼層吧?假如我們需要保存這個座標,並且如果我們需要通過添加Geocoder圖層來顯示這個位置,那麼我們應該遵循什麼樣的方式?

基本上,我們可以設置保存的位置,如下

map.setView(new ol.View({ 
    projection: 'EPSG:3857', 
    center: ol.proj.transform([parseFloat(selectedInstallation.Longitude), parseFloat(selectedInstallation.Latitude)], 
           'EPSG:4326', map.getView().getProjection()), 
    zoom: 10 
}));