⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kml.js

📁 用来在地图上做操作GIS,在地图上做标记
💻 JS
📖 第 1 页 / 共 2 页
字号:
     */    parseAttributes: function(node) {        var attributes = {};        // assume attribute nodes are type 1 children with a type 3 child        var child, grandchildren, grandchild;        var children = node.childNodes;        for(var i=0; i<children.length; ++i) {            child = children[i];            if(child.nodeType == 1) {                grandchildren = child.childNodes;                if(grandchildren.length == 1) {                    grandchild = grandchildren[0];                    if(grandchild.nodeType == 3 || grandchild.nodeType == 4) {                        name = (child.prefix) ?                                child.nodeName.split(":")[1] :                                child.nodeName;                        value = grandchild.nodeValue.replace(                                                this.regExes.trimSpace, "");                        attributes[name] = value;                    }                }            }        }        return attributes;    },    /**     * APIMethod: write     * Accept Feature Collection, and return a string.      *      * Parameters:     * features - An array of <OpenLayers.Feature.Vector> features.     *     * Returns:     * {String} A KML string.     */     write: function(features) {        if(!(features instanceof Array)) {            features = [features];        }        var kml = this.createElementNS(this.kmlns, "kml");        var folder = this.createFolderXML();        for(var i=0; i<features.length; ++i) {            folder.appendChild(this.createPlacemarkXML(features[i]));        }        kml.appendChild(folder);        return OpenLayers.Format.XML.prototype.write.apply(this, [kml]);     },    /**     * Method: createFolderXML     * Creates and returns a KML folder node     *      * Returns:     * {DOMElement}     */    createFolderXML: function() {        // Folder name        var folderName = this.createElementNS(this.kmlns, "name");        var folderNameText = this.createTextNode(this.foldersName);         folderName.appendChild(folderNameText);        // Folder description        var folderDesc = this.createElementNS(this.kmlns, "description");                var folderDescText = this.createTextNode(this.foldersDesc);         folderDesc.appendChild(folderDescText);        // Folder        var folder = this.createElementNS(this.kmlns, "Folder");        folder.appendChild(folderName);        folder.appendChild(folderDesc);                return folder;    },    /**     * Method: createPlacemarkXML     * Creates and returns a KML placemark node representing the given feature.      *      * Parameters:     * feature - {<OpenLayers.Feature.Vector>}     *      * Returns:     * {DOMElement}     */    createPlacemarkXML: function(feature) {                // Placemark name        var placemarkName = this.createElementNS(this.kmlns, "name");        var name = (feature.attributes.name) ?                    feature.attributes.name : feature.id;        placemarkName.appendChild(this.createTextNode(name));        // Placemark description        var placemarkDesc = this.createElementNS(this.kmlns, "description");        var desc = (feature.attributes.description) ?                    feature.attributes.description : this.placemarksDesc;        placemarkDesc.appendChild(this.createTextNode(desc));                // Placemark        var placemarkNode = this.createElementNS(this.kmlns, "Placemark");        if(feature.fid != null) {            placemarkNode.setAttribute("id", feature.fid);        }        placemarkNode.appendChild(placemarkName);        placemarkNode.appendChild(placemarkDesc);        // Geometry node (Point, LineString, etc. nodes)        var geometryNode = this.buildGeometryNode(feature.geometry);        placemarkNode.appendChild(geometryNode);                        // TBD - deal with remaining (non name/description) attributes.        return placemarkNode;    },        /**     * Method: buildGeometryNode     * Builds and returns a KML geometry node with the given geometry.     *      * Parameters:     * geometry - {<OpenLayers.Geometry>}     *      * Returns:     * {DOMElement}     */    buildGeometryNode: function(geometry) {        var className = geometry.CLASS_NAME;        var type = className.substring(className.lastIndexOf(".") + 1);        var builder = this.buildGeometry[type.toLowerCase()];        var node = null;        if(builder) {            node = builder.apply(this, [geometry]);        }        return node;    },    /**     * Property: buildGeometry     * Object containing methods to do the actual geometry node building     *     based on geometry type.     */    buildGeometry: {        // TBD: Anybody care about namespace aliases here (these nodes have        //    no prefixes)?        /**         * Method: buildGeometry.point         * Given an OpenLayers point geometry, create a KML point.         *         * Parameters:         * geometry - {<OpenLayers.Geometry.Point>} A point geometry.         *         * Returns:         * {DOMElement} A KML point node.         */        point: function(geometry) {            var kml = this.createElementNS(this.kmlns, "Point");            kml.appendChild(this.buildCoordinatesNode(geometry));            return kml;        },                /**         * Method: buildGeometry.multipoint         * Given an OpenLayers multipoint geometry, create a KML         *     GeometryCollection.         *         * Parameters:         * geometry - {<OpenLayers.Geometry.Point>} A multipoint geometry.         *         * Returns:         * {DOMElement} A KML GeometryCollection node.         */        multipoint: function(geometry) {            return this.buildGeometry.collection(geometry);        },        /**         * Method: buildGeometry.linestring         * Given an OpenLayers linestring geometry, create a KML linestring.         *         * Parameters:         * geometry - {<OpenLayers.Geometry.LineString>} A linestring geometry.         *         * Returns:         * {DOMElement} A KML linestring node.         */        linestring: function(geometry) {            var kml = this.createElementNS(this.kmlns, "LineString");            kml.appendChild(this.buildCoordinatesNode(geometry));            return kml;        },                /**         * Method: buildGeometry.multilinestring         * Given an OpenLayers multilinestring geometry, create a KML         *     GeometryCollection.         *         * Parameters:         * geometry - {<OpenLayers.Geometry.Point>} A multilinestring geometry.         *         * Returns:         * {DOMElement} A KML GeometryCollection node.         */        multilinestring: function(geometry) {            return this.buildGeometry.collection(geometry);        },        /**         * Method: buildGeometry.linearring         * Given an OpenLayers linearring geometry, create a KML linearring.         *         * Parameters:         * geometry - {<OpenLayers.Geometry.LinearRing>} A linearring geometry.         *         * Returns:         * {DOMElement} A KML linearring node.         */        linearring: function(geometry) {            var kml = this.createElementNS(this.kmlns, "LinearRing");            kml.appendChild(this.buildCoordinatesNode(geometry));            return kml;        },                /**         * Method: buildGeometry.polygon         * Given an OpenLayers polygon geometry, create a KML polygon.         *         * Parameters:         * geometry - {<OpenLayers.Geometry.Polygon>} A polygon geometry.         *         * Returns:         * {DOMElement} A KML polygon node.         */        polygon: function(geometry) {            var kml = this.createElementNS(this.kmlns, "Polygon");            var rings = geometry.components;            var ringMember, ringGeom, type;            for(var i=0; i<rings.length; ++i) {                type = (i==0) ? "outerBoundaryIs" : "innerBoundaryIs";                ringMember = this.createElementNS(this.kmlns, type);                ringGeom = this.buildGeometry.linearring.apply(this,                                                               [rings[i]]);                ringMember.appendChild(ringGeom);                kml.appendChild(ringMember);            }            return kml;        },                /**         * Method: buildGeometry.multipolygon         * Given an OpenLayers multipolygon geometry, create a KML         *     GeometryCollection.         *         * Parameters:         * geometry - {<OpenLayers.Geometry.Point>} A multipolygon geometry.         *         * Returns:         * {DOMElement} A KML GeometryCollection node.         */        multipolygon: function(geometry) {            return this.buildGeometry.collection(geometry);        },        /**         * Method: buildGeometry.collection         * Given an OpenLayers geometry collection, create a KML MultiGeometry.         *         * Parameters:         * geometry - {<OpenLayers.Geometry.Collection>} A geometry collection.         *         * Returns:         * {DOMElement} A KML MultiGeometry node.         */        collection: function(geometry) {            var kml = this.createElementNS(this.kmlns, "MultiGeometry");            var child;            for(var i=0; i<geometry.components.length; ++i) {                child = this.buildGeometryNode.apply(this,                                                     [geometry.components[i]]);                if(child) {                    kml.appendChild(child);                }            }            return kml;        }    },    /**     * Method: buildCoordinatesNode     * Builds and returns the KML coordinates node with the given geometry     * <coordinates>...</coordinates>     *      * Parameters:     * geometry - {<OpenLayers.Geometry>}     *      * Return:     * {DOMElement}     */         buildCoordinatesNode: function(geometry) {        var coordinatesNode = this.createElementNS(this.kmlns, "coordinates");                var path;        var points = geometry.components;        if(points) {            // LineString or LinearRing            var point;            var numPoints = points.length;            var parts = new Array(numPoints);            for(var i=0; i<numPoints; ++i) {                point = points[i];                parts[i] = point.x + "," + point.y;            }            path = parts.join(" ");        } else {            // Point            path = geometry.x + "," + geometry.y;        }                var txtNode = this.createTextNode(path);        coordinatesNode.appendChild(txtNode);                return coordinatesNode;    },        CLASS_NAME: "OpenLayers.Format.KML" });

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -