北京经济技术开发区经开区虚拟城市项目-【前端】-Web
lixuliang
2024-10-09 61eb5a39f95962d021e8170e83286fdc790d1567
src/components/menu/tools/special.vue
@@ -32,11 +32,17 @@
      <div class="specialTool" @click="qytj">
        <el-tooltip class="item" effect="dark" content="数据汇聚" placement="top-start" popper-class="item_tooltip">
          <el-button> <img src="@/assets/img/left/ztfx/yqfk.png" /> </el-button></el-tooltip>
          <el-button>
            <img src="@/assets/img/left/ztfx/yqfk.png" />
          </el-button>
        </el-tooltip>
      </div>
      <div class="specialTool" @click="rangeQuery()">
        <el-tooltip class="item" effect="dark" content="范围查询" placement="top-start" popper-class="item_tooltip">
          <el-button> <img src="@/assets/img/left/ztfx/sjxq.png" /> </el-button></el-tooltip>
          <el-button>
            <img src="@/assets/img/left/ztfx/sjxq.png" />
          </el-button>
        </el-tooltip>
      </div>
      <!-- <div class="specialTool" @click="guanxian(openGX)">
        <el-tooltip
@@ -48,7 +54,7 @@
        >
          <el-button> <img src="@/assets/img/left/ztfx/spl.png" /> </el-button
        ></el-tooltip>
      </div> -->
      </div>-->
      <!-- <div class="specialTool" @click="sceneRoaming">
        <el-tooltip
          class="item"
@@ -60,7 +66,7 @@
          <el-button>
            <img src="@/assets/img/left/ztfx/rkqxksh.png" /> </el-button
        ></el-tooltip>
      </div> -->
      </div>-->
      <!-- <div class="specialTool" @click="shipinronghe(videoList)">
        <el-tooltip
@@ -72,7 +78,7 @@
        >
          <el-button> <img src="@/assets/img/left/ztfx/spl.png" /> </el-button
        ></el-tooltip>
      </div> -->
      </div>-->
    </div>
  </div>
</template>
@@ -186,28 +192,46 @@
  background: rgba(0, 168, 255, 0.16);
}
</style>
<style>
#pointInfoBox {
  width: 500px;
  padding: 20px;
  text-align: left;
  background: url("~@/assets/img/new/listbg.png") 100%/100%;
  /* border: 5px #08235f solid; */
  /* border-radius: 7px; */
  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.5);
  color: #fff;
}
</style>
<script>
import Vue from "vue";
import store from "@/utils/store";
import poiLayer from "@/components/poplayer/main";
import rpc from "@/assets/js/rpc";
import mapData from "../../../../static/mapData";
import mapMsg from "@/assets/js/mapMsg";
import vueEvents from "@/utils/vueEvent.js";
let PoiLayerConstructor = Vue.extend(poiLayer);
import axios from "axios";
import { mapState, mapMutations } from "vuex";
import Bus from "../../tools/Bus";
import { roman } from "../../../assets/json/index.js";
import URLInCode from "@/assets/js/urlInCode";
let handler;
let pickFeature;
import keyName from "@/utils/poiKeys";
import LayerField from "@/utils/NameConf";
let handler, buildingPolygon, objdata, video, promiseS3M;
window.divPoint3 = null;
window.instance = null;
let tooltipHTML;
let divPoint1;
let imgUrl;
let scale;
let tooltip;
let lineArr = [];
let video;
let video2;
let video3;
let video4;
let promiseS3M;
window.divPoint1 = null;
window.pickFeature = null;
window.imgUrl = null;
window.scale = null;
//交通图层
let panoramaLayer;
window.panoramaLayer = null;
export default {
  name: "special",
  data() {
@@ -217,7 +241,7 @@
      romanOption: [
        { name: "核心区" },
        { name: "景观绿地" },
        { name: "政务服务" },
        { name: "政务服务" }
      ],
      showFlag: false,
      showQYTJ: false,
@@ -239,8 +263,8 @@
          alpha: 1,
          // 透明度
          far: 3000,
          cameraIndexCode: "2b046ef675704975a8d45f1b00cd946b",
        },
          cameraIndexCode: "2b046ef675704975a8d45f1b00cd946b"
        }
        // {
        //   name: "video3",
        //   lon: 116.5146339,
@@ -311,12 +335,12 @@
      alpha: 1,
      // 透明度
      far: 166,
      videoarrList: [],
      videoarrList: []
    };
  },
  computed: {
    ...mapState(["viewer1Show", "yqfk", "cesiumInit"]),
    ...mapState(["viewer1Show", "yqfk", "qyEchartsShow"]),
    ...mapState(["viewer1Show", "yqfk", "qyEchartsShow"])
  },
  mounted() { },
  watch: {
@@ -337,8 +361,8 @@
        }
      },
      deep: true,
      immediate: true,
    },
      immediate: true
    }
  },
  methods: {
    // ...mapMutations(["setViewer1Show", "setYqfk"]),
@@ -350,9 +374,9 @@
          0.0001: "rgb(0,191,255)",
          0.001: "rgb(0,128,0)",
          0.01: "rgb(255,165,0)",
          0.1: "rgb(255,0,0)",
          0.1: "rgb(255,0,0)"
        },
        style: "clustering",
        style: "clustering"
      });
      window.sxtkGeojson.dataSource.clustering.minimumClusterSize = 5;
@@ -360,10 +384,10 @@
      let url;
      axios
        .get(url)
        .then((data) => {
        .then(data => {
          // console.log(data);
          let features = data.data.features;
          features.forEach((feature) => {
          features.forEach(feature => {
            let geom = feature.geometry.coordinates;
            let properties = feature.properties;
            let point = new SmartEarth.Degrees(geom[0], geom[1]);
@@ -372,7 +396,7 @@
            // };
            let entitie = window.sxtkGeojson.add(point, {
              image: SmartEarthRootUrl + "Workers/image/sxt.png",
              image: SmartEarthRootUrl + "Workers/image/sxt.png"
            });
            entitie.properties = properties;
            entitie.tag = "sxt";
@@ -382,7 +406,7 @@
          window.sxthandler = new Cesium.ScreenSpaceEventHandler(
            sgworld.Viewer.scene.canvas
          );
          window.sxthandler.setInputAction((event) => {
          window.sxthandler.setInputAction(event => {
            let pick = sgworld.Viewer.scene.pick(event.position);
            if (pick && pick.id && pick.id.tag == "sxt") {
              //关闭地块信息弹窗
@@ -422,13 +446,13 @@
                    sgworld.drawObj &&
                      sgworld.drawObj.end &&
                      sgworld.drawObj.end("cancel");
                  },
                },
                  }
                }
              });
            }
          }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
        })
        .catch((err) => {
        .catch(err => {
          console.log(err);
        });
    },
@@ -466,8 +490,8 @@
          {
            url: urls,
            queryParameters: {
              layers: "",
            },
              layers: ""
            }
          },
          {},
          "0",
@@ -477,7 +501,7 @@
        window.panoramaHandler = new Cesium.ScreenSpaceEventHandler(
          Viewer.scene.canvas
        );
        window.panoramaHandler.setInputAction((event) => {
        window.panoramaHandler.setInputAction(event => {
          let p;
          p = sgworld.Navigate.getMouseDegrees(event);
          let panorama = new yzPanorama();
@@ -485,13 +509,13 @@
            id: "qjMap",
            closeId: "panoramaClose",
            lng: p.lon,
            lat: p.lat,
            lat: p.lat
          });
          // let StreetUrl = "http://10.10.4.116:8085/yzAdapter/";
          // let _StreetscapeYZ = new StreetscapeYZ(sgworld, {
          //   StreetUrl: StreetUrl,
          //   lon: p.lon,
          //     lng: p.lon,
          //   lat: p.lat
          // });
        }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
@@ -521,34 +545,40 @@
      }
    },
    clearSelectObject() {
      if (pickFeature && pickFeature.primitive) {
        pickFeature.primitive.image = imgUrl;
        pickFeature.primitive.scale = scale;
        pickFeature = null;
      if (window.pickFeature && window.pickFeature.primitive) {
        window.pickFeature.primitive.image = imgUrl;
        window.pickFeature.primitive.scale = scale;
        window.pickFeature = null;
      }
    },
    setCesuimHandle() {
      var that = this;
      Bus.$on("clearSelectObject", this.clearSelectObject);
      handler && handler.destroy();
      handler = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas);
      handler.setInputAction((event) => {
      handler.setInputAction(event => {
        let nPickFeature = sgworld.Viewer.scene.pick(event.position);
        if (Cesium.defined(nPickFeature)) {
          this.resetImg();
          if (buildingPolygon) {
            sgworld.Creator.DeleteObject(buildingPolygon);
            buildingPolygon = null;
          }
          if (nPickFeature.primitive instanceof Cesium.Billboard) {
            if (nPickFeature.id.length > 0) {
              return;
            }
            this.resetImg();
            this.resetBorder();
            pickFeature = nPickFeature;
            // this.resetBorder();
            window.pickFeature = nPickFeature;
            // console.log(nPickFeature);
            imgUrl = nPickFeature.primitive.image;
            scale = nPickFeature.primitive.scale;
            nPickFeature.primitive.scale = 1;
            nPickFeature.primitive.image =
              window.SmartEarthRootUrl + "Workers/image/point.png";
            nPickFeature.primitive.scale = 1;
            //点击弹框
            let obj = {};
            let lng;
            let lon;
            let lat;
            let isCamera = false;
            if (nPickFeature.id.tag) {
@@ -556,68 +586,256 @@
              let propertyNames = nPickFeature.id.properties.propertyNames;
              if (propertyNames.indexOf("监控名") !== -1) {
                isCamera = true;
                // obj["JK名称"] = properties["JK名称"]._value;
                obj["JK名称"] = properties["JK名称"]._value;
                // obj["JK类型"] = properties["JK类型"]._value;
                // obj["功能"] = properties["功能"]._value;
                // obj["所在区"] = properties["所在区"]._value;
                // obj["JK编号"] = properties["JK编号"]._value;
                // obj["JK内码"] = properties["JK内码"]._value;
                obj["JK内码"] = properties["JK内码"]._value;
              } else {
                propertyNames.forEach((item) => {
                propertyNames.forEach(item => {
                  obj[item] = properties[item]._value;
                });
              }
              let cartographic =
                window.Viewer.scene.globe.ellipsoid.cartesianToCartographic(
                  nPickFeature.id.position._value
                );
              lng = Cesium.Math.toDegrees(cartographic.longitude);
              let cartographic = window.Viewer.scene.globe.ellipsoid.cartesianToCartographic(
                nPickFeature.id.position._value
              );
              lon = Cesium.Math.toDegrees(cartographic.longitude);
              lat = Cesium.Math.toDegrees(cartographic.latitude);
            } else {
              obj = nPickFeature.id.attributes;
              lng = nPickFeature.id.positions[0];
              lon = nPickFeature.id.positions[0];
              lat = nPickFeature.id.positions[1];
            }
            if (divPoint1) {
              divPoint1.deleteObject();
            }
            if (!isCamera) {
              tooltipHTML = "";
              // console.log(obj);
              //重置LayerField数据
              for (let item in LayerField) {
                LayerField[item] = 0;
              }
              // 删除字段
              let {
                OBJECTID,
                ID,
                BZDZ,
                Latitude,
                Longtitude,
                ...userData
              } = obj;
              // 判断展示的类型
              if (
                userData.hasOwnProperty("部件名称") ||
                userData.hasOwnProperty("井编号")
              ) {
                //修改LayerField数据
                for (let itemName in userData) {
                  let CnName = keyName[itemName] || itemName;
                  if (LayerField.hasOwnProperty(CnName)) {
                    LayerField[CnName] = userData[itemName];
                    if (CnName == "经度" || CnName == "纬度") {
                      let str = Number(LayerField[CnName]);
                      LayerField[CnName] = str.toFixed(6);
                    }
                  }
                }
                // 展示LayerField数据
                for (let item in LayerField) {
                  let value = LayerField[item];
                  value && (tooltipHTML += `<p>${item}:${value || "无"}</p>`);
                }
              } else if (
                userData.hasOwnProperty("当事人名称") ||
                userData.hasOwnProperty("案件编号")
              ) {
                //修改LayerField数据
                let newOBJ = {
                  当事人名称: userData["当事人名称"],
                  案件编号: userData["案件编号"],
                  案件名称: userData["案件名称"],
                  立案时间: userData["立案时间"],
                  住所: userData["住所"],
                  案件来源: userData["案件来源"],
                  办案部门: userData["办案部门"],
                  办案人员: userData["办案人员"],
                  调查情形: userData["调查情形"]
                };
                // 展示LayerField数据
                for (let itemName in newOBJ) {
                  let CnName = itemName;
                  let value = userData[itemName];
              for (let i in obj) {
                let value = obj[i];
                value && (tooltipHTML += `<p>${i}:${value || "无"}</p>`);
                  value &&
                    (tooltipHTML += `<p style="margin-top:7px;">${CnName}:${value ||
                      "无"}</p>`);
                  // console.log(tooltipHTML);
                }
              } else {
                for (let itemName in userData) {
                  let CnName = itemName;
                  let value = userData[itemName];
                  value &&
                    (tooltipHTML += `<p style="margin-top:7px;">${CnName}:${value ||
                      "无"}</p>`);
                }
              }
              if (tooltip) {
                tooltip.show(false);
                tooltip = null;
              }
              tooltip = sgworld.Core.CreateResultTooltip(window.Viewer, {
                color: "black",
                addY: -40,
                far: 200000,
                closeBtn: true,
                close: () => {
                  this.resetImg();
                  this.resetBorder();
              let description = `
                   <div id="pointInfoBox" class="pointInfoBox" style="pointer-events:auto;">
                    <span style="position: absolute; right: 12px; top: 6px;">×</span>
                    ${tooltipHTML}
                  </div>
                `;
              divPoint1 = sgworld.Creator.createDivPoint(
                "详细信息",
                {
                  lon: lon,
                  lat: lat,
                  height: 50
                },
              });
              let description = `<div style='background:
                                      rgba(14, 50, 143, 0.6);
                                      border: 1px solid #205fbc;
                                       border-radius: 5px;
                                       color: #fff;
                                       padding: 15px;
                                       box-shadow: 0px 1px 10px 0px rgba(3, 10, 26, 0.38);
                                       '>${tooltipHTML}</div>`;
              tooltip.showAt(
                Cesium.Cartesian3.fromDegrees(lng, lat, 0),
                description
                {
                  type: "custom",
                  offset: ["c", 50],
                  description,
                  onclick(data) {
                    // sgworld.Creator.DeleteObject(divPoint1);
                    divPoint1 && divPoint1.deleteObject();
                    if (window.pickFeature && window.pickFeature.primitive) {
                      window.pickFeature.primitive.image = imgUrl;
                      window.pickFeature.primitive.scale = scale;
                      window.pickFeature = null;
                    }
                  }
                }
              );
              // if (tooltip) {
              //   tooltip.show(false);
              //   tooltip = null;
              // }
              // tooltip = sgworld.Core.CreateResultTooltip(window.Viewer, {
              //   color: "black",
              //   addY: -40,
              //   far: 200000,
              //   closeBtn: true,
              //   close: () => {
              //     this.resetImg();
              //   },
              // });
              // let description = `<div style='background:
              //                         rgba(14, 50, 143, 0.6);
              //                         border: 1px solid #205fbc;
              //                          border-radius: 5px;
              //                          color: #fff;
              //                          padding: 15px;
              //                          box-shadow: 0px 1px 10px 0px rgba(3, 10, 26, 0.38);
              //                          '>${tooltipHTML}</div>`;
              // tooltip.showAt(
              //   Cesium.Cartesian3.fromDegrees(lon, lat, 0),
              //   description
              // );
            }
            //关闭地块信息弹窗
            Bus.$emit("closeLandInfoPop", true);
            layuiLayer.close(SmartEarthPopupData.layerProp);
            this.$store.commit("description", obj);
          } else if (nPickFeature.primitive instanceof Cesium.Cesium3DTileset) {
            // // let cartographic =
            // //   window.Viewer.scene.globe.ellipsoid.cartesianToCartographic(
            // //     nPickFeature.content.tile.boundingSphere.center
            // //   );
            // // let lon = Cesium.Math.toDegrees(cartographic.longitude);
            // // let lat = Cesium.Math.toDegrees(cartographic.latitude);
            // let p = sgworld.Navigate.getMouseDegrees(event);
            // let lon = p.lon;
            // let lat = p.lat;
            // axios
            //   .get(
            //     "http://10.10.4.121:8070/gisserver/wfsserver/yizhuang-building-wfs-1207",
            //     {
            //       params: {
            //         version: "1.3.0",
            //         request: "GetFeature",
            //         typename: `亦庄建筑外轮廓4326`,
            //         propertyname: "*",
            //         format: "json",
            //         filter: `<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"><ogc:Intersects><ogc:PropertyName>SAHEP</ogc:PropertyName><gml:Point > <gml:pos>${lon} ${lat}</gml:pos></gml:Point></ogc:Intersects></ogc:Filter>`
            //       }
            //     }
            //   )
            //   .then(response => {
            //     if (response.data.features.length > 0) {
            //       var geometry = [];
            //       let POIs = response.data.features[0].geometry.coordinates[0];
            //       for (let i = 0; i < POIs.length; i++) {
            //         geometry.push({
            //           x: parseFloat(POIs[i][0]),
            //           y: parseFloat(POIs[i][1]),
            //           z: 0
            //         });
            //       }
            //       buildingPolygon = sgworld.Creator.createPolygon(
            //         geometry,
            //         {
            //           fillColor: "#00ff0050",
            //           outlineColor: "#ff0000",
            //           outlineWidth: 2
            //         },
            //         1,
            //         0,
            //         "面"
            //       );
            //     }
            //   });
          } else if (
            nPickFeature.id.fid &&
            nPickFeature.id.fid.includes("免费住所空间0131")
          ) {
            let obj = nPickFeature.id.attributes;
            let lon = 116.50592;
            let lat = 39.798999;
            if (divPoint1) {
              divPoint1.deleteObject();
            }
            tooltipHTML = "";
            //重置LayerField数据
            for (let item in LayerField) {
              LayerField[item] = 0;
            }
            // 删除字段
            let { Id, ...userData } = obj;
            // 直接展示
            for (let itemName in userData) {
              let value = userData[itemName];
              let CnName = keyName[itemName] || itemName;
              value && (tooltipHTML += `<p>${CnName}:${value || "无"}</p>`);
            }
            let description = `
                   <div id="pointInfoBox" class="pointInfoBox" style="pointer-events:auto;">
                    <span style="position: absolute; right: 12px; top: 6px;">×</span>
                    ${tooltipHTML}
                  </div>
                `;
            divPoint1 = sgworld.Creator.createDivPoint(
              "详细信息",
              {
                lon: lon,
                lat: lat,
                height: 50
              },
              {
                type: "custom",
                offset: ["c", 50],
                description,
                onclick(data) {
                  divPoint1 && divPoint1.deleteObject();
                }
              }
            );
            //关闭地块信息弹窗
            Bus.$emit("closeLandInfoPop", true);
            layuiLayer.close(SmartEarthPopupData.layerProp);
@@ -719,20 +937,20 @@
      this.$parent.$parent.$parent.isShowSpeAnalyse = false;
    },
    resetImg() {
      if (pickFeature && pickFeature.primitive) {
        pickFeature.primitive.image = imgUrl;
        pickFeature.primitive.scale = scale;
        pickFeature = null;
      if (window.pickFeature && window.pickFeature.primitive) {
        window.pickFeature.primitive.image = imgUrl;
        window.pickFeature.primitive.scale = scale;
        window.pickFeature = null;
      }
    },
    resetBorder() {
      lineArr.forEach((item, index) => {
        if (lineArr[index]) {
          sgworld.Creator.DeleteObject(lineArr[index]);
          lineArr[index] = null;
        }
      });
    },
    // resetBorder() {
    //   lineArr.forEach((item, index) => {
    //     if (lineArr[index]) {
    //       sgworld.Creator.DeleteObject(lineArr[index]);
    //       lineArr[index] = null;
    //     }
    //   });
    // },
    stdsjHandle() {
      window.open(
        "http://10.9.2.29:8080/#/login?token=1ed14c5157acb8088efe65bc93a032c3"
@@ -755,20 +973,20 @@
    setRomanFly(result) {
      this.showFlag = false;
      document.getElementById("scroll").style.display = "none";
      var val = roman.filter((res) => {
      var val = roman.filter(res => {
        if (res.name == result.name) {
          return res;
        }
      });
      var degreesArr = val[0].value;
      sgworld.Creator.getFlyData(degreesArr, (data) => {
      sgworld.Creator.getFlyData(degreesArr, data => {
        data.showPoint = false;
        data.showLine = true;
        data.mode = 1;
        // 弹窗数据
        window.PathAnimationData = {
          flyData: data,
          flyData: data
        };
        window.PathAnimationData.winIndex = layer.open({
          type: 2,
@@ -780,7 +998,7 @@
          content: SmartEarthRootUrl + "Workers/path/Path.html",
          end: function () {
            PathAnimationData.fly && PathAnimationData.fly.exit();
          },
          }
        });
      });
    },
@@ -836,10 +1054,10 @@
                useLine: false, //是否试用辅助线
                success() {
                  sgworld.Navigate.flyToObj(video);
                },
                }
              });
              that.videoarrList.push(video);
            },
            }
          });
        }
      }
@@ -852,7 +1070,7 @@
          alpha: this.alpha, //透明度
          far: this.far, //透明度
          heading: this.heading, //透明度
          pitch: this.pitch, //透明度
          pitch: this.pitch //透明度
        });
    },
    // 清除
@@ -867,13 +1085,213 @@
        );
        this.openGX = "close";
      } else {
        promiseS3M.then((res) => {
          res.forEach((item) => {
        promiseS3M.then(res => {
          res.forEach(item => {
            item.visible = false;
          });
        });
      }
    },
  },
    read(wkt) {
      var regExes = {
        typeStr: /^\s*(\w+)\s*\(\s*(.*)\s*\)\s*$/,
        emptyTypeStr: /^\s*(\w+)\s*EMPTY\s*$/,
        spaces: /\s+/,
        parenComma: /\)\s*,\s*\(/,
        doubleParenComma: /\)\s*\)\s*,\s*\(\s*\(/, // can't use {2} here
        trimParens: /^\s*\(?(.*?)\)?\s*$/
      };
      /**
       * Object with properties corresponding to the geometry types. Property values
       * are functions that do the actual parsing.
       * @private
       */
      var parse$1 = {
        /**
         * Return point geometry given a point WKT fragment.
         *
         * @param {String} str A WKT fragment representing the point.
         * @return {Point} A point geometry.
         * @private
         */
        point: function point(str) {
          if (str === undefined) {
            return [];
          }
          var coords = str.trim().split(regExes.spaces);
          return [Number.parseFloat(coords[0]), Number.parseFloat(coords[1])];
        },
        /**
         * Return a multipoint geometry given a multipoint WKT fragment.
         *
         * @param {String} str A WKT fragment representing the multipoint.
         * @return {Point} A multipoint feature.
         * @private
         */
        multipoint: function multipoint(str) {
          var this$1 = this;
          if (str === undefined) {
            return [];
          }
          var point;
          var points = str.trim().split(",");
          var components = [];
          for (var i = 0, len = points.length; i < len; ++i) {
            point = points[i].replace(regExes.trimParens, "$1");
            components.push(parse$1.point(point));
          }
          return components;
        },
        /**
         * Return a linestring geometry given a linestring WKT fragment.
         *
         * @param {String} str A WKT fragment representing the linestring.
         * @return {LineString} A linestring geometry.
         * @private
         */
        linestring: function linestring(str) {
          if (str === undefined) {
            return [];
          }
          var points = str.trim().split(",");
          var components = [];
          var coords;
          for (var i = 0, len = points.length; i < len; ++i) {
            coords = points[i].trim().split(regExes.spaces);
            components.push([
              Number.parseFloat(coords[0]),
              Number.parseFloat(coords[1])
            ]);
          }
          return components;
        },
        /**
         * Return a linearring geometry given a linearring WKT fragment.
         *
         * @param {String} str A WKT fragment representing the linearring.
         * @return {LinearRing} A linearring geometry.
         * @private
         */
        linearring: function linearring(str) {
          if (str === undefined) {
            return [];
          }
          var points = str.trim().split(",");
          var components = [];
          var coords;
          for (var i = 0, len = points.length; i < len; ++i) {
            coords = points[i].trim().split(regExes.spaces);
            components.push([
              Number.parseFloat(coords[0]),
              Number.parseFloat(coords[1])
            ]);
          }
          return components;
        },
        /**
         * Return a multilinestring geometry given a multilinestring WKT fragment.
         *
         * @param {String} str A WKT fragment representing the multilinestring.
         * @return {MultiLineString} A multilinestring geometry.
         * @private
         */
        multilinestring: function multilinestring(str) {
          var this$1 = this;
          if (str === undefined) {
            return [];
          }
          var line;
          var lines = str.trim().split(regExes.parenComma);
          var components = [];
          for (var i = 0, len = lines.length; i < len; ++i) {
            line = lines[i].replace(regExes.trimParens, "$1");
            components.push(parse$1.linestring(line));
          }
          return components;
        },
        /**
         * Return a polygon geometry given a polygon WKT fragment.
         *
         * @param {String} str A WKT fragment representing the polygon.
         * @return {Polygon} A polygon geometry.
         * @private
         */
        polygon: function polygon(str) {
          var this$1 = this;
          if (str === undefined) {
            return [];
          }
          var ring, linestring, linearring;
          var rings = str.trim().split(regExes.parenComma);
          var shell;
          var holes = [];
          //for (var i = 0, len = rings.length; i < len; ++i) {
          ring = rings[0].replace(regExes.trimParens, "$1");
          linestring = ring;
          //}
          return linestring;
        },
        /**
         * Return a multipolygon geometry given a multipolygon WKT fragment.
         *
         * @param {String} str A WKT fragment representing the multipolygon.
         * @return {MultiPolygon} A multipolygon geometry.
         * @private
         */
        multipolygon: function multipolygon(str) {
          var this$1 = this;
          if (str === undefined) {
            return [];
          }
          var polygon;
          var polygons = str.trim().split(regExes.doubleParenComma);
          var components = [];
          for (var i = 0, len = polygons.length; i < len; ++i) {
            polygon = polygons[i].replace(regExes.trimParens, "$1");
            components.push(parse$1.polygon(polygon));
          }
          return components;
        }
      };
      var geometry, type, str;
      wkt = wkt.replace(/[\n\r]/g, " ");
      var matches = regExes.typeStr.exec(wkt);
      if (wkt.search("EMPTY") !== -1) {
        matches = regExes.emptyTypeStr.exec(wkt);
        matches[2] = undefined;
      }
      if (matches) {
        type = matches[1].toLowerCase();
        str = matches[2];
        if (parse$1[type]) {
          geometry = parse$1[type].apply(this, [str]);
        }
      }
      if (geometry === undefined) {
        throw new Error("Could not parse WKT " + wkt);
      }
      return geometry;
    }
  }
};
</script>