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

📄 gml.js

📁 用来在地图上做操作GIS,在地图上做标记
💻 JS
📖 第 1 页 / 共 2 页
字号:
        },                /**         * Method: parseGeometry.polygon         * Given a GML node representing a polygon geometry, create an         *     OpenLayers polygon geometry.         *         * Parameters:         * node - {DOMElement} A GML node.         *         * Returns:         * {<OpenLayers.Geometry.Polygon>} A polygon geometry.         */        polygon: function(node) {            var nodeList = this.getElementsByTagNameNS(node, this.gmlns,                                                       "LinearRing");            var components = [];            if(nodeList.length > 0) {                // this assumes exterior ring first, inner rings after                var ring;                for(var i=0; i<nodeList.length; ++i) {                    ring = this.parseGeometry.linestring.apply(this,                                                        [nodeList[i], true]);                    if(ring) {                        components.push(ring);                    }                }            }            return new OpenLayers.Geometry.Polygon(components);        },                /**         * Method: parseGeometry.multipolygon         * Given a GML node representing a multipolygon geometry, create an         *     OpenLayers multipolygon geometry.         *         * Parameters:         * node - {DOMElement} A GML node.         *         * Returns:         * {<OpenLayers.Geometry.MultiPolygon>} A multipolygon geometry.         */        multipolygon: function(node) {            var nodeList = this.getElementsByTagNameNS(node, this.gmlns,                                                       "Polygon");            var components = [];            if(nodeList.length > 0) {                var polygon;                for(var i=0; i<nodeList.length; ++i) {                    polygon = this.parseGeometry.polygon.apply(this,                                                               [nodeList[i]]);                    if(polygon) {                        components.push(polygon);                    }                }            }            return new OpenLayers.Geometry.MultiPolygon(components);        }    },        /**     * Method: parseAttributes     *     * Parameters:     * node - {<DOMElement>}     *     * Returns:     * {Object} An attributes object.     */    parseAttributes: function(node) {        var attributes = {};        // assume attributes are children of the first type 1 child        var childNode = node.firstChild;        var children, i, child, grandchildren, grandchild, name, value;        while(childNode) {            if(childNode.nodeType == 1) {                // attributes are type 1 children with one type 3 child                children = childNode.childNodes;                for(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;                            }                        }                    }                }                break;            }            childNode = childNode.nextSibling;        }        return attributes;    },        /**     * APIMethod: write     * Generate a GML document string given a list of features.      *      * Parameters:     * features - {Array(<OpenLayers.Feature.Vector>)} List of features to     *     serialize into a string.     *     * Returns:     * {String} A string representing the GML document.     */    write: function(features) {        if(!(features instanceof Array)) {            features = [features];        }        var gml = this.createElementNS("http://www.opengis.net/wfs",                                       "wfs:" + this.collectionName);        for(var i=0; i<features.length; i++) {            gml.appendChild(this.createFeatureXML(features[i]));        }        return OpenLayers.Format.XML.prototype.write.apply(this, [gml]);    },    /**      * Method: createFeatureXML     * Accept an OpenLayers.Feature.Vector, and build a GML node for it.     *     * Parameters:     * feature - {<OpenLayers.Feature.Vector>} The feature to be built as GML.     *     * Returns:     * {DOMElement} A node reprensting the feature in GML.     */    createFeatureXML: function(feature) {        var geometry = feature.geometry;        var geometryNode = this.buildGeometryNode(geometry);        var geomContainer = this.createElementNS(this.featureNS,                                                 this.featurePrefix + ":" +                                                 this.geometryName);        geomContainer.appendChild(geometryNode);        var featureNode = this.createElementNS(this.gmlns,                                               "gml:" + this.featureName);        var featureContainer = this.createElementNS(this.featureNS,                                                    this.featurePrefix + ":" +                                                    this.layerName);        var fid = feature.fid || feature.id;        featureContainer.setAttribute("fid", fid);        featureContainer.appendChild(geomContainer);        for(var attr in feature.attributes) {            var attrText = this.createTextNode(feature.attributes[attr]);             var nodename = attr.substring(attr.lastIndexOf(":") + 1);            var attrContainer = this.createElementNS(this.featureNS,                                                     this.featurePrefix + ":" +                                                     nodename);            attrContainer.appendChild(attrText);            featureContainer.appendChild(attrContainer);        }            featureNode.appendChild(featureContainer);        return featureNode;    },        /**     * APIMethod: buildGeometryNode     */    buildGeometryNode: function(geometry) {        var className = geometry.CLASS_NAME;        var type = className.substring(className.lastIndexOf(".") + 1);        var builder = this.buildGeometry[type.toLowerCase()];        return builder.apply(this, [geometry]);    },    /**     * Property: buildGeometry     * Object containing methods to do the actual geometry node building     *     based on geometry type.     */    buildGeometry: {        // TBD retrieve the srs from layer        // srsName is non-standard, so not including it until it's right.        // gml.setAttribute("srsName",        //                  "http://www.opengis.net/gml/srs/epsg.xml#4326");        /**         * Method: buildGeometry.point         * Given an OpenLayers point geometry, create a GML point.         *         * Parameters:         * geometry - {<OpenLayers.Geometry.Point>} A point geometry.         *         * Returns:         * {DOMElement} A GML point node.         */        point: function(geometry) {            var gml = this.createElementNS(this.gmlns, "gml:Point");            gml.appendChild(this.buildCoordinatesNode(geometry));            return gml;        },                /**         * Method: buildGeometry.multipoint         * Given an OpenLayers multipoint geometry, create a GML multipoint.         *         * Parameters:         * geometry - {<OpenLayers.Geometry.MultiPoint>} A multipoint geometry.         *         * Returns:         * {DOMElement} A GML multipoint node.         */        multipoint: function(geometry) {            var gml = this.createElementNS(this.gmlns, "gml:MultiPoint");            var points = geometry.components;            var pointMember, pointGeom;            for(var i=0; i<points.length; i++) {                 pointMember = this.createElementNS(this.gmlns,                                                   "gml:pointMember");                pointGeom = this.buildGeometry.point.apply(this,                                                               [points[i]]);                pointMember.appendChild(pointGeom);                gml.appendChild(pointMember);            }            return gml;                    },                /**         * Method: buildGeometry.linestring         * Given an OpenLayers linestring geometry, create a GML linestring.         *         * Parameters:         * geometry - {<OpenLayers.Geometry.LineString>} A linestring geometry.         *         * Returns:         * {DOMElement} A GML linestring node.         */        linestring: function(geometry) {            var gml = this.createElementNS(this.gmlns, "gml:LineString");            gml.appendChild(this.buildCoordinatesNode(geometry));            return gml;        },                /**         * Method: buildGeometry.multilinestring         * Given an OpenLayers multilinestring geometry, create a GML         *     multilinestring.         *         * Parameters:         * geometry - {<OpenLayers.Geometry.MultiLineString>} A multilinestring         *     geometry.         *         * Returns:         * {DOMElement} A GML multilinestring node.         */        multilinestring: function(geometry) {            var gml = this.createElementNS(this.gmlns, "gml:MultiLineString");            var lines = geometry.components;            var lineMember, lineGeom;            for(var i=0; i<lines.length; ++i) {                lineMember = this.createElementNS(this.gmlns,                                                  "gml:lineStringMember");                lineGeom = this.buildGeometry.linestring.apply(this,                                                                   [lines[i]]);                lineMember.appendChild(lineGeom);                gml.appendChild(lineMember);            }            return gml;        },                /**         * Method: buildGeometry.linearring         * Given an OpenLayers linearring geometry, create a GML linearring.         *         * Parameters:         * geometry - {<OpenLayers.Geometry.LinearRing>} A linearring geometry.         *         * Returns:         * {DOMElement} A GML linearring node.         */        linearring: function(geometry) {            var gml = this.createElementNS(this.gmlns, "gml:LinearRing");            gml.appendChild(this.buildCoordinatesNode(geometry));            return gml;        },                /**         * Method: buildGeometry.polygon         * Given an OpenLayers polygon geometry, create a GML polygon.         *         * Parameters:         * geometry - {<OpenLayers.Geometry.Polygon>} A polygon geometry.         *         * Returns:         * {DOMElement} A GML polygon node.         */        polygon: function(geometry) {            var gml = this.createElementNS(this.gmlns, "gml: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.gmlns,                                                  "gml:" + type);                ringGeom = this.buildGeometry.linearring.apply(this,                                                                   [rings[i]]);                ringMember.appendChild(ringGeom);                gml.appendChild(ringMember);            }            return gml;        },                /**         * Method: buildGeometry.multipolygon         * Given an OpenLayers multipolygon geometry, create a GML multipolygon.         *         * Parameters:         * geometry - {<OpenLayers.Geometry.MultiPolygon>} A multipolygon         *     geometry.         *         * Returns:         * {DOMElement} A GML multipolygon node.         */        multipolygon: function(geometry) {            var gml = this.createElementNS(this.gmlns, "gml:MultiPolygon");            var polys = geometry.components;            var polyMember, polyGeom;            for(var i=0; i<polys.length; ++i) {                polyMember = this.createElementNS(this.gmlns,                                                  "gml:polygonMember");                polyGeom = this.buildGeometry.polygon.apply(this,                                                                [polys[i]]);                polyMember.appendChild(polyGeom);                gml.appendChild(polyMember);            }            return gml;        }    },    /**     * Method: buildCoordinates     * builds the coordinates XmlNode     * <gml:coordinates decimal="." cs="," ts=" ">...</gml:coordinates>     *     * Parameters:      * geometry - {<OpenLayers.Geometry>}      *     * Returns:     * {XmlNode} created xmlNode     */    buildCoordinatesNode: function(geometry) {        var coordinatesNode = this.createElementNS(this.gmlns,                                                   "gml:coordinates");        coordinatesNode.setAttribute("decimal", ".");        coordinatesNode.setAttribute("cs", ",");        coordinatesNode.setAttribute("ts", " ");                var points = (geometry.components) ? geometry.components : [geometry];        var parts = [];        for(var i=0; i<points.length; i++) {            parts.push(points[i].x + "," + points[i].y);        }        var txtNode = this.createTextNode(parts.join(" "));        coordinatesNode.appendChild(txtNode);                return coordinatesNode;    },    CLASS_NAME: "OpenLayers.Format.GML" });

⌨️ 快捷键说明

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