如何在map.locate函数

时间:2016-05-19 10:05:26

标签: geolocation leaflet

我有一个大问题。我正在使用leaflet javascript库来显示openstreetmap。我想显示默认大小15,但它总是最终显示缩放大小11.基本上,如果我使用map.locate函数,它只显示直径30公里的整个城市,我的目标是显示直径2公里。有趣的是,有一种方法可以将直径(缩放尺寸)从12增加到10或8,但是无法减小缩放尺寸:(

我正在使用map.locate在地图上自动定位用户位置,但缩放尺寸默认为11或者甚至可以更大,如10,9等,但不能减小缩放(直径)大小。

这是我的代码:

function initMap() {
    map = L.map('map').setView(startingLocation, 15);
    map.on("locationfound", onLocationFound);
    map.on("locationerror", onLocationError);

     L.tileLayer('http://{s}.tile.cloudmade.com/BC9A493B41014CAABB98F0471D759707/997/256/{z}/{x}/{y}.png', {
                maxZoom: 18,
                attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://cloudmade.com">CloudMade</a>'
            }).addTo(map);
}



  map.locate({
            setView: true,
            maxZoom: 16,
            enableHighAccuracy: true,
            timeout: 10000
        });

function onLocationFound(position) {
    marker.setLatLng(position.latlng);
    updateLocationWithRevGeocoding([{name: 'lat', value: position.latlng.lat}, {name: 'lon', value: position.latlng.lng}]);
}

我使用p:remoteCommand(javascript调用)进行函数updateLocationWithRevGeocoding从后端bean调用updateLocationWithReverseGeocoding动作。

 public void updateLocationWithReverseGeocoding() throws URISyntaxException, IOException {
        Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        this.latitude = params.get("lat");
        this.longitude = params.get("lon");
        this.locationName = performReverseGeocoding(this.latitude, this.longitude);
        RequestContext.getCurrentInstance().execute("updateMarkerPopup(\"" + this.locationName + "\")");
    }

我看到下面的代码有缩放等级16,无论我改变多少这个级别,它都保持不变。我只能增加30公里的直径(缩放尺寸11到10,8等)但我无法减小(直径)缩放尺寸:(

 private String performReverseGeocoding(String lat, String lon) throws URISyntaxException, ParseException, IOException {
        URIBuilder uriBuilder = new URIBuilder("http://nominatim.openstreetmap.org/reverse.php?format=json&zoom=16"); //I just removed original URL because of company proprietary.
        uriBuilder.setParameter("accept-language", "de"); // TODO externalize or parametrize
        uriBuilder.setParameter("lat", lat);
        uriBuilder.setParameter("lon", lon);
        //uriBuilder.setParameter("key", appKey);
        URI uri = uriBuilder.build();
        HttpGet request = new HttpGet(uri);
        HttpResponse httpResponse = this.httpClient.execute(request);
        Map<String, Object> jsonResponse = jsonMapper.readValue(EntityUtils.toString(httpResponse.getEntity(), "UTF-8"), Map.class);
        return jsonResponse.get("display_name").toString(); // TODO find something shorter and more informative
    }

我已经从firefox调试了javascript。在控件进入OnLocationFound调用之前,地图缩放大小会自动增加。我有义务使用map.locate,否则地图不会将用户定位到他的位置。

0 个答案:

没有答案