Render placemark names for points in KML format
This commit is contained in:
@@ -10,6 +10,8 @@ goog.require('goog.Uri');
|
|||||||
goog.require('goog.array');
|
goog.require('goog.array');
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.dom.NodeType');
|
goog.require('goog.dom.NodeType');
|
||||||
|
goog.require('goog.object');
|
||||||
|
goog.require('goog.string');
|
||||||
goog.require('ol');
|
goog.require('ol');
|
||||||
goog.require('ol.Feature');
|
goog.require('ol.Feature');
|
||||||
goog.require('ol.FeatureStyleFunction');
|
goog.require('ol.FeatureStyleFunction');
|
||||||
@@ -240,16 +242,27 @@ ol.format.KML.DEFAULT_STROKE_STYLE_ = new ol.style.Stroke({
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @const
|
||||||
|
* @type {ol.style.Stroke}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
ol.format.KML.DEFAULT_TEXT_STROKE_STYLE_ = new ol.style.Stroke({
|
||||||
|
color: [51, 51, 51, 1],
|
||||||
|
width: 2
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @const
|
* @const
|
||||||
* @type {ol.style.Text}
|
* @type {ol.style.Text}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ol.format.KML.DEFAULT_TEXT_STYLE_ = new ol.style.Text({
|
ol.format.KML.DEFAULT_TEXT_STYLE_ = new ol.style.Text({
|
||||||
font: 'normal 16px Helvetica',
|
font: 'bold 16px Helvetica',
|
||||||
fill: ol.format.KML.DEFAULT_FILL_STYLE_,
|
fill: ol.format.KML.DEFAULT_FILL_STYLE_,
|
||||||
stroke: ol.format.KML.DEFAULT_STROKE_STYLE_,
|
stroke: ol.format.KML.DEFAULT_TEXT_STROKE_STYLE_,
|
||||||
scale: 1
|
scale: 0.8
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@@ -286,29 +299,109 @@ ol.format.KML.ICON_ANCHOR_UNITS_MAP_ = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {ol.style.Style|undefined} foundStyle Style.
|
||||||
|
* @param {string} name Name.
|
||||||
|
* @return {ol.style.Style} style Style.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
ol.format.KML.createNameStyleFunction_ = function(foundStyle, name) {
|
||||||
|
/** @type {?ol.style.Text} */
|
||||||
|
var textStyle = null;
|
||||||
|
var textOffset = [0, 0];
|
||||||
|
var textAlign = 'start';
|
||||||
|
if (foundStyle.getImage()) {
|
||||||
|
var imageSize = foundStyle.getImage().getImageSize();
|
||||||
|
if (!goog.object.isEmpty(imageSize)) {
|
||||||
|
// Offset the label to be centered to the right of the icon, if there is
|
||||||
|
// one.
|
||||||
|
textOffset[0] = foundStyle.getImage().getScale() * imageSize[0] / 2;
|
||||||
|
textOffset[1] = -foundStyle.getImage().getScale() * imageSize[1] / 2;
|
||||||
|
textAlign = 'left';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!goog.object.isEmpty(foundStyle.getText())) {
|
||||||
|
textStyle = /** @type {ol.style.Text} */
|
||||||
|
(goog.object.clone(foundStyle.getText()));
|
||||||
|
textStyle.setText(name);
|
||||||
|
textStyle.setTextAlign(textAlign);
|
||||||
|
textStyle.setOffsetX(textOffset[0]);
|
||||||
|
textStyle.setOffsetY(textOffset[1]);
|
||||||
|
} else {
|
||||||
|
textStyle = new ol.style.Text({
|
||||||
|
text: name,
|
||||||
|
offsetX: textOffset[0],
|
||||||
|
offsetY: textOffset[1],
|
||||||
|
textAlign: textAlign
|
||||||
|
});
|
||||||
|
}
|
||||||
|
var nameStyle = new ol.style.Style({
|
||||||
|
fill: undefined,
|
||||||
|
image: undefined,
|
||||||
|
text: textStyle,
|
||||||
|
stroke: undefined,
|
||||||
|
zIndex: undefined
|
||||||
|
});
|
||||||
|
return nameStyle;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Array.<ol.style.Style>|undefined} style Style.
|
* @param {Array.<ol.style.Style>|undefined} style Style.
|
||||||
* @param {string} styleUrl Style URL.
|
* @param {string} styleUrl Style URL.
|
||||||
* @param {Array.<ol.style.Style>} defaultStyle Default style.
|
* @param {Array.<ol.style.Style>} defaultStyle Default style.
|
||||||
* @param {Object.<string, (Array.<ol.style.Style>|string)>} sharedStyles
|
* @param {Object.<string, (Array.<ol.style.Style>|string)>} sharedStyles Shared
|
||||||
* Shared styles.
|
* styles.
|
||||||
* @return {ol.FeatureStyleFunction} Feature style function.
|
* @return {ol.FeatureStyleFunction} Feature style function.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ol.format.KML.createFeatureStyleFunction_ = function(
|
ol.format.KML.createFeatureStyleFunction_ = function(style, styleUrl,
|
||||||
style, styleUrl, defaultStyle, sharedStyles) {
|
defaultStyle, sharedStyles) {
|
||||||
return (
|
return (
|
||||||
/**
|
/**
|
||||||
* @param {number} resolution Resolution.
|
* @param {number}
|
||||||
|
* resolution Resolution.
|
||||||
* @return {Array.<ol.style.Style>} Style.
|
* @return {Array.<ol.style.Style>} Style.
|
||||||
* @this {ol.Feature}
|
* @this {ol.Feature}
|
||||||
*/
|
*/
|
||||||
function(resolution) {
|
function(resolution) {
|
||||||
|
var drawName = false;
|
||||||
|
/** @type {ol.style.Style|undefined} */
|
||||||
|
var nameStyle;
|
||||||
|
/** @type {string} */
|
||||||
|
var name = '';
|
||||||
|
if (this.getGeometry()) {
|
||||||
|
drawName = (this.getGeometry().getType() ===
|
||||||
|
ol.geom.GeometryType.POINT);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (drawName) {
|
||||||
|
name = /** @type {string} */ (this.getProperties()['name']);
|
||||||
|
drawName = drawName && !goog.string.isEmptySafe(name);
|
||||||
|
}
|
||||||
|
|
||||||
if (style) {
|
if (style) {
|
||||||
|
if (drawName) {
|
||||||
|
nameStyle = ol.format.KML.createNameStyleFunction_(style[0],
|
||||||
|
name);
|
||||||
|
return [style, nameStyle];
|
||||||
|
}
|
||||||
return style;
|
return style;
|
||||||
}
|
}
|
||||||
if (styleUrl) {
|
if (styleUrl) {
|
||||||
return ol.format.KML.findStyle_(styleUrl, defaultStyle, sharedStyles);
|
var foundStyle = ol.format.KML.findStyle_(styleUrl, defaultStyle,
|
||||||
|
sharedStyles);
|
||||||
|
if (drawName) {
|
||||||
|
nameStyle = ol.format.KML.createNameStyleFunction_(foundStyle[0],
|
||||||
|
name);
|
||||||
|
return foundStyle.concat(nameStyle);
|
||||||
|
}
|
||||||
|
return foundStyle;
|
||||||
|
}
|
||||||
|
if (drawName) {
|
||||||
|
nameStyle = ol.format.KML.createNameStyleFunction_(defaultStyle[0],
|
||||||
|
name);
|
||||||
|
return defaultStyle.concat(nameStyle);
|
||||||
}
|
}
|
||||||
return defaultStyle;
|
return defaultStyle;
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user