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:PolygonSymbolizer>
|
||||||
</sld:Rule>
|
</sld:Rule>
|
||||||
<sld:Rule>
|
<sld:Rule>
|
||||||
|
<sld:MaxScaleDenominator>20000000</sld:MaxScaleDenominator>
|
||||||
<sld:TextSymbolizer>
|
<sld:TextSymbolizer>
|
||||||
<sld:Label>
|
<sld:Label>
|
||||||
<ogc:PropertyName>name</ogc:PropertyName>
|
<ogc:PropertyName>name</ogc:PropertyName>
|
||||||
|
|||||||
@@ -44,12 +44,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div id="tags">vector, geojson, style, SLD, Styled Layer Descriptor</div>
|
<div id="tags">vector, geojson, style, SLD, Styled Layer Descriptor</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="span4 offset4">
|
|
||||||
<div id="info" class="alert alert-success">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
goog.require('ol.Map');
|
goog.require('ol.Map');
|
||||||
goog.require('ol.RendererHint');
|
goog.require('ol.RendererHint');
|
||||||
goog.require('ol.View2D');
|
goog.require('ol.View2D');
|
||||||
|
goog.require('ol.control');
|
||||||
|
goog.require('ol.control.ScaleLine');
|
||||||
goog.require('ol.layer.Tile');
|
goog.require('ol.layer.Tile');
|
||||||
goog.require('ol.layer.Vector');
|
goog.require('ol.layer.Vector');
|
||||||
goog.require('ol.parser.GeoJSON');
|
goog.require('ol.parser.GeoJSON');
|
||||||
@@ -22,7 +24,20 @@ xhr.open('GET', 'data/countries.sld', true);
|
|||||||
*/
|
*/
|
||||||
xhr.onload = function() {
|
xhr.onload = function() {
|
||||||
if (xhr.status == 200) {
|
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 style = sld.namedLayers['countries'].userStyles[0];
|
||||||
var vector = new ol.layer.Vector({
|
var vector = new ol.layer.Vector({
|
||||||
source: new ol.source.Vector({
|
source: new ol.source.Vector({
|
||||||
@@ -31,15 +46,7 @@ xhr.onload = function() {
|
|||||||
}),
|
}),
|
||||||
style: style
|
style: style
|
||||||
});
|
});
|
||||||
new ol.Map({
|
map.getLayers().push(vector);
|
||||||
layers: [raster, vector],
|
|
||||||
renderer: ol.RendererHint.CANVAS,
|
|
||||||
target: 'map',
|
|
||||||
view: new ol.View2D({
|
|
||||||
center: [0, 0],
|
|
||||||
zoom: 1
|
|
||||||
})
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
xhr.send();
|
xhr.send();
|
||||||
|
|||||||
@@ -567,6 +567,12 @@
|
|||||||
* @todo stability experimental
|
* @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
|
* @typedef {Object} ol.source.BingMapsOptions
|
||||||
* @property {string|undefined} culture Culture.
|
* @property {string|undefined} culture Culture.
|
||||||
|
|||||||
@@ -76,10 +76,12 @@ ol.parser.ogc.SLD_v1 = function() {
|
|||||||
rule.elseFilter = true;
|
rule.elseFilter = true;
|
||||||
},
|
},
|
||||||
'MinScaleDenominator': function(node, rule) {
|
'MinScaleDenominator': function(node, rule) {
|
||||||
rule.minScaleDenominator = parseFloat(this.getChildValue(node));
|
rule.minResolution = this.getResolutionFromScale_(
|
||||||
|
parseFloat(this.getChildValue(node)));
|
||||||
},
|
},
|
||||||
'MaxScaleDenominator': function(node, rule) {
|
'MaxScaleDenominator': function(node, rule) {
|
||||||
rule.maxScaleDenominator = parseFloat(this.getChildValue(node));
|
rule.maxResolution = this.getResolutionFromScale_(
|
||||||
|
parseFloat(this.getChildValue(node)));
|
||||||
},
|
},
|
||||||
'TextSymbolizer': function(node, rule) {
|
'TextSymbolizer': function(node, rule) {
|
||||||
var config = {};
|
var config = {};
|
||||||
@@ -188,6 +190,7 @@ ol.parser.ogc.SLD_v1 = function() {
|
|||||||
var ogcreaders = this.readers['http://www.opengis.net/ogc'];
|
var ogcreaders = this.readers['http://www.opengis.net/ogc'];
|
||||||
var radius = ogcreaders._expression.call(this, node);
|
var radius = ogcreaders._expression.call(this, node);
|
||||||
if (goog.isDef(radius)) {
|
if (goog.isDef(radius)) {
|
||||||
|
symbolizer.haloRadius = radius;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'RasterSymbolizer': function(node, rule) {
|
'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 {string|Document|Element} data Data to read.
|
||||||
|
* @param {ol.parser.SLDReadOptions=} opt_options Read options.
|
||||||
* @return {Object} An object representing the document.
|
* @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)) {
|
if (goog.isString(data)) {
|
||||||
data = goog.dom.xml.loadXml(data);
|
data = goog.dom.xml.loadXml(data);
|
||||||
}
|
}
|
||||||
@@ -425,5 +448,6 @@ ol.parser.ogc.SLD_v1.prototype.read = function(data) {
|
|||||||
}
|
}
|
||||||
var obj = {namedLayers: {}};
|
var obj = {namedLayers: {}};
|
||||||
this.readNode(data, obj);
|
this.readNode(data, obj);
|
||||||
|
delete this.units;
|
||||||
return obj;
|
return obj;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user