我有一个大问题。我正在使用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 © <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,否则地图不会将用户定位到他的位置。