Add scale to/from resolution calculations
This commit is contained in:
committed by
Bart van den Eijnden
parent
76454516f5
commit
5abedf66d9
@@ -25,6 +25,7 @@
|
||||
</sld:PolygonSymbolizer>
|
||||
</sld:Rule>
|
||||
<sld:Rule>
|
||||
<sld:MaxScaleDenominator>20000000</sld:MaxScaleDenominator>
|
||||
<sld:TextSymbolizer>
|
||||
<sld:Label>
|
||||
<ogc:PropertyName>name</ogc:PropertyName>
|
||||
|
||||
@@ -44,12 +44,7 @@
|
||||
</div>
|
||||
<div id="tags">vector, geojson, style, SLD, Styled Layer Descriptor</div>
|
||||
</div>
|
||||
<div class="span4 offset4">
|
||||
<div id="info" class="alert alert-success">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
goog.require('ol.Map');
|
||||
goog.require('ol.RendererHint');
|
||||
goog.require('ol.View2D');
|
||||
goog.require('ol.control');
|
||||
goog.require('ol.control.ScaleLine');
|
||||
goog.require('ol.layer.Tile');
|
||||
goog.require('ol.layer.Vector');
|
||||
goog.require('ol.parser.GeoJSON');
|
||||
@@ -22,7 +24,20 @@ xhr.open('GET', 'data/countries.sld', true);
|
||||
*/
|
||||
xhr.onload = function() {
|
||||
if (xhr.status == 200) {
|
||||
var sld = new ol.parser.ogc.SLD().read(xhr.responseText);
|
||||
var map = new ol.Map({
|
||||
controls: ol.control.defaults().extend([
|
||||
new ol.control.ScaleLine()
|
||||
]),
|
||||
layers: [raster],
|
||||
renderer: ol.RendererHint.CANVAS,
|
||||
target: 'map',
|
||||
view: new ol.View2D({
|
||||
center: [0, 0],
|
||||
zoom: 1
|
||||
})
|
||||
});
|
||||
var units = map.getView().getProjection().getUnits();
|
||||
var sld = new ol.parser.ogc.SLD().read(xhr.responseText, units);
|
||||
var style = sld.namedLayers['countries'].userStyles[0];
|
||||
var vector = new ol.layer.Vector({
|
||||
source: new ol.source.Vector({
|
||||
@@ -31,15 +46,7 @@ xhr.onload = function() {
|
||||
}),
|
||||
style: style
|
||||
});
|
||||
new ol.Map({
|
||||
layers: [raster, vector],
|
||||
renderer: ol.RendererHint.CANVAS,
|
||||
target: 'map',
|
||||
view: new ol.View2D({
|
||||
center: [0, 0],
|
||||
zoom: 1
|
||||
})
|
||||
});
|
||||
map.getLayers().push(vector);
|
||||
}
|
||||
};
|
||||
xhr.send();
|
||||
|
||||
@@ -567,6 +567,12 @@
|
||||
* @todo stability experimental
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} ol.parser.SLDReadOptions
|
||||
* @property {ol.proj.Units} units The units to use in scale to resolution
|
||||
* calculations.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} ol.source.BingMapsOptions
|
||||
* @property {string|undefined} culture Culture.
|
||||
|
||||
@@ -76,10 +76,12 @@ ol.parser.ogc.SLD_v1 = function() {
|
||||
rule.elseFilter = true;
|
||||
},
|
||||
'MinScaleDenominator': function(node, rule) {
|
||||
rule.minScaleDenominator = parseFloat(this.getChildValue(node));
|
||||
rule.minResolution = this.getResolutionFromScale_(
|
||||
parseFloat(this.getChildValue(node)));
|
||||
},
|
||||
'MaxScaleDenominator': function(node, rule) {
|
||||
rule.maxScaleDenominator = parseFloat(this.getChildValue(node));
|
||||
rule.maxResolution = this.getResolutionFromScale_(
|
||||
parseFloat(this.getChildValue(node)));
|
||||
},
|
||||
'TextSymbolizer': function(node, rule) {
|
||||
var config = {};
|
||||
@@ -188,6 +190,7 @@ ol.parser.ogc.SLD_v1 = function() {
|
||||
var ogcreaders = this.readers['http://www.opengis.net/ogc'];
|
||||
var radius = ogcreaders._expression.call(this, node);
|
||||
if (goog.isDef(radius)) {
|
||||
symbolizer.haloRadius = radius;
|
||||
}
|
||||
},
|
||||
'RasterSymbolizer': function(node, rule) {
|
||||
@@ -412,11 +415,31 @@ ol.parser.ogc.SLD_v1.cssMap_ = {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @param {number} scaleDenominator The scale denominator to convert to
|
||||
* resolution.
|
||||
* @return {number} resolution.
|
||||
*/
|
||||
ol.parser.ogc.SLD_v1.prototype.getResolutionFromScale_ =
|
||||
function(scaleDenominator) {
|
||||
var dpi = 25.4 / 0.28;
|
||||
var mpu = ol.METERS_PER_UNIT[this.units];
|
||||
return 1 / ((1 / scaleDenominator) * (mpu * 39.37) * dpi);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string|Document|Element} data Data to read.
|
||||
* @param {ol.parser.SLDReadOptions=} opt_options Read options.
|
||||
* @return {Object} An object representing the document.
|
||||
*/
|
||||
ol.parser.ogc.SLD_v1.prototype.read = function(data) {
|
||||
ol.parser.ogc.SLD_v1.prototype.read = function(data, opt_options) {
|
||||
var units = 'm';
|
||||
if (goog.isDef(opt_options) && goog.isDef(opt_options.units)) {
|
||||
units = opt_options.units;
|
||||
}
|
||||
this.units = units;
|
||||
if (goog.isString(data)) {
|
||||
data = goog.dom.xml.loadXml(data);
|
||||
}
|
||||
@@ -425,5 +448,6 @@ ol.parser.ogc.SLD_v1.prototype.read = function(data) {
|
||||
}
|
||||
var obj = {namedLayers: {}};
|
||||
this.readNode(data, obj);
|
||||
delete this.units;
|
||||
return obj;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user