potato-map3d-ui2 0.0.32 → 0.0.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -473,13 +473,19 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
473
473
  _hoisted_1$5
474
474
  ]),
475
475
  createElementVNode("span", {
476
- class: normalizeClass(["m-control-text", __props.placement === "left" ? "m-control-textLeft" : "m-control-textRight"])
476
+ class: normalizeClass([
477
+ "m-control-text",
478
+ __props.placement === "left" ? "m-control-textLeft" : "m-control-textRight"
479
+ ])
477
480
  }, [
478
481
  renderSlot(_ctx.$slots, "default", {}, () => [
479
482
  createTextVNode("全屏")
480
483
  ]),
481
484
  createElementVNode("div", {
482
- class: normalizeClass(["m-control-triangle", __props.placement === "left" ? "m-control-triangleLeft" : "m-control-triangleRight"])
485
+ class: normalizeClass([
486
+ "m-control-triangle",
487
+ __props.placement === "left" ? "m-control-triangleLeft" : "m-control-triangleRight"
488
+ ])
483
489
  }, null, 2)
484
490
  ], 2)
485
491
  ]);
@@ -524,7 +530,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
524
530
  ])
525
531
  }, [
526
532
  renderSlot(_ctx.$slots, "default", {}, () => [
527
- createTextVNode("全屏")
533
+ createTextVNode("复位")
528
534
  ]),
529
535
  createElementVNode("div", {
530
536
  class: normalizeClass([
@@ -943,6 +949,363 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
943
949
  };
944
950
  }
945
951
  });
952
+ function wktToGeometry(wkt) {
953
+ try {
954
+ const typeStr = wkt.match(/^[A-Z]+(?=\()/);
955
+ if (!typeStr) {
956
+ console.log("wkt数据格式不对,没有解析到type");
957
+ return;
958
+ }
959
+ const type = typeStr[0];
960
+ let geometry;
961
+ if (type === "POINT") {
962
+ const res = wkt.match(/(-*\d+\.*\d*\s-*\d+\.*\d*)/g);
963
+ if (!res) {
964
+ console.log("没有解析到POINT的坐标");
965
+ return;
966
+ }
967
+ const coords = res[0].split(" ").map(Number);
968
+ geometry = { type: "Point", coordinates: coords };
969
+ } else if (type === "LINESTRING") {
970
+ const res = wkt.match(/(-*\d+\.*\d*\s-*\d+\.*\d*)/g);
971
+ if (!res) {
972
+ console.log("没有解析到LINESTRING的坐标");
973
+ return;
974
+ }
975
+ const coords = [];
976
+ res.forEach((item) => {
977
+ coords.push(item.split(" ").map(Number));
978
+ });
979
+ geometry = { type: "LineString", coordinates: coords };
980
+ } else if (type === "MULTIPOINT") {
981
+ const res = wkt.match(/(-*\d+\.*\d*\s-*\d+\.*\d*)/g);
982
+ if (!res) {
983
+ console.log("没有解析到MULTIPOINT的坐标");
984
+ return;
985
+ }
986
+ const coords = [];
987
+ res.forEach((item) => {
988
+ coords.push(item.split(" ").map(Number));
989
+ });
990
+ geometry = { type: "MultiPoint", coordinates: coords };
991
+ } else if (type === "POLYGON") {
992
+ const resArr = wkt.split(/,(?=\()/);
993
+ const coords = [];
994
+ for (let i = 0; i < resArr.length; i++) {
995
+ const res = resArr[i].match(/(-*\d+\.*\d*\s-*\d+\.*\d*)/g);
996
+ if (!res) {
997
+ console.log("没有解析到POLYGON的坐标");
998
+ return;
999
+ }
1000
+ const ringCoords = [];
1001
+ res.forEach((ele) => {
1002
+ ringCoords.push(ele.split(" ").map(Number));
1003
+ });
1004
+ coords.push(ringCoords);
1005
+ }
1006
+ geometry = { type: "Polygon", coordinates: coords };
1007
+ } else if (type === "MULTILINESTRING") {
1008
+ const resArr = wkt.split(/,(?=\()/);
1009
+ const coords = [];
1010
+ for (let i = 0; i < resArr.length; i++) {
1011
+ const res = resArr[i].match(/(-*\d+\.*\d*\s-*\d+\.*\d*)/g);
1012
+ if (!res) {
1013
+ console.log("没有解析到MULTILINESTRING的坐标");
1014
+ return;
1015
+ }
1016
+ const ringCoords = [];
1017
+ res.forEach((ele) => {
1018
+ ringCoords.push(ele.split(" ").map(Number));
1019
+ });
1020
+ coords.push(ringCoords);
1021
+ }
1022
+ geometry = { type: "MultiLineString", coordinates: coords };
1023
+ } else if (type === "MULTIPOLYGON") {
1024
+ const resArr1 = wkt.split(/,(?=\(\()/);
1025
+ const coords = [];
1026
+ for (let i = 0; i < resArr1.length; i++) {
1027
+ const resArr2 = resArr1[i].split(/,(?=\()/);
1028
+ const polyCoords = [];
1029
+ for (let j = 0; j < resArr2.length; j++) {
1030
+ const res = resArr2[j].match(/(-*\d+\.*\d*\s-*\d+\.*\d*)/g);
1031
+ if (!res) {
1032
+ console.log("没有解析到MULTIPOLYGON的坐标");
1033
+ return;
1034
+ }
1035
+ const ringCoords = [];
1036
+ res.forEach((ele) => {
1037
+ ringCoords.push(ele.split(" ").map(Number));
1038
+ });
1039
+ polyCoords.push(ringCoords);
1040
+ }
1041
+ coords.push(polyCoords);
1042
+ }
1043
+ geometry = { type: "MultiPolygon", coordinates: coords };
1044
+ }
1045
+ return geometry;
1046
+ } catch (error) {
1047
+ console.log("格式解析出错", error);
1048
+ }
1049
+ }
1050
+ function wktToGeojson(wkt) {
1051
+ try {
1052
+ wkt = wkt.replaceAll("\n", "").replaceAll(" ", "").replaceAll(" ,", ",").replaceAll(", ", ",").replaceAll(" (", "(").replaceAll("( ", "(").replaceAll(" )", ")").replaceAll(") ", ")").toUpperCase();
1053
+ const typeStr = wkt.match(/^[A-Z]+(?=\()/);
1054
+ if (!typeStr) {
1055
+ console.log("wkt数据格式不对,没有解析到type");
1056
+ return;
1057
+ }
1058
+ const type = typeStr[0];
1059
+ if (type === "GEOMETRYCOLLECTION") {
1060
+ wkt = wkt.substring(19, wkt.length - 1);
1061
+ const resArr = wkt.split(/,(?=[A-Z]+)/);
1062
+ const features = [];
1063
+ for (let i = 0; i < resArr.length; i++) {
1064
+ const geometry = wktToGeometry(resArr[i]);
1065
+ if (!geometry)
1066
+ return;
1067
+ features.push({ type: "Feature", geometry });
1068
+ }
1069
+ return { type: "FeatureCollection", features };
1070
+ } else {
1071
+ const resArr = wkt.split(/,(?=[A-Z]+)/);
1072
+ if (resArr.length > 1) {
1073
+ const features = [];
1074
+ for (let i = 0; i < resArr.length; i++) {
1075
+ const geometry = wktToGeometry(resArr[i]);
1076
+ if (!geometry)
1077
+ return;
1078
+ features.push({ type: "Feature", geometry });
1079
+ }
1080
+ return { type: "FeatureCollection", features };
1081
+ } else {
1082
+ if ([
1083
+ "POINT",
1084
+ "LINESTRING",
1085
+ "POLYGON",
1086
+ "MULTIPOINT",
1087
+ "MULTILINESTRING",
1088
+ "MULTIPOLYGON"
1089
+ ].includes(type)) {
1090
+ const geometry = wktToGeometry(wkt);
1091
+ if (!geometry)
1092
+ return;
1093
+ return { type: "Feature", geometry };
1094
+ } else {
1095
+ console.log("wkt数据的type不太对-->", type);
1096
+ return;
1097
+ }
1098
+ }
1099
+ }
1100
+ } catch (error) {
1101
+ console.log("格式解析出错", error);
1102
+ }
1103
+ }
1104
+ function geometryToWkt(geometry) {
1105
+ if (!geometry) {
1106
+ console.log("没有geojson数据");
1107
+ return "";
1108
+ }
1109
+ const { type } = geometry;
1110
+ if (!type) {
1111
+ console.log("数据中没有type");
1112
+ return "";
1113
+ }
1114
+ if (typeof type !== "string") {
1115
+ console.log("数据中的type不是字符串");
1116
+ return "";
1117
+ }
1118
+ const coords = geometry.coordinates;
1119
+ if (!coords) {
1120
+ console.log("数据中没有coordinates");
1121
+ return "";
1122
+ }
1123
+ if (!(coords instanceof Array)) {
1124
+ console.log("数据的coordinates不是数组");
1125
+ return "";
1126
+ }
1127
+ if (coords.length === 0) {
1128
+ console.log("数据的coordinates是空的");
1129
+ return "";
1130
+ }
1131
+ const wktCoords = [];
1132
+ switch (type.toUpperCase()) {
1133
+ case "POINT":
1134
+ if (coords.length < 2) {
1135
+ console.log("type为Point的coordinates格式不对-->", geometry);
1136
+ return "";
1137
+ }
1138
+ for (let i = 0; i < coords.length; i++) {
1139
+ if (typeof coords[i] !== "number" || isNaN(coords[i])) {
1140
+ console.log("type为Point的coordinates格式不对-->", geometry);
1141
+ return "";
1142
+ }
1143
+ }
1144
+ wktCoords.push(coords.slice(0, 2).join(" "));
1145
+ break;
1146
+ case "LINESTRING":
1147
+ case "MULTIPOINT":
1148
+ for (let i = 0; i < coords.length; i++) {
1149
+ const coord = coords[i];
1150
+ if (!(coord instanceof Array) || coord.length < 2) {
1151
+ console.log("type为MultiPoint或LineString的coordinates格式不对-->", geometry);
1152
+ return "";
1153
+ }
1154
+ for (let j = 0; j < coord.length; j++) {
1155
+ if (typeof coord[j] !== "number" || isNaN(coord[j])) {
1156
+ console.log("type为MultiPoint或LineString的coordinates格式不对-->", geometry);
1157
+ return "";
1158
+ }
1159
+ }
1160
+ wktCoords.push(coord.slice(0, 2).join(" "));
1161
+ }
1162
+ break;
1163
+ case "POLYGON":
1164
+ case "MULTILINESTRING":
1165
+ for (let i = 0; i < coords.length; i++) {
1166
+ const item = coords[i];
1167
+ const ringCoords = [];
1168
+ if (!(item instanceof Array)) {
1169
+ console.log("type为Polygon或MultiLineString的coordinates格式不对-->", geometry);
1170
+ return "";
1171
+ }
1172
+ for (let j = 0; j < item.length; j++) {
1173
+ const ele = item[j];
1174
+ if (!(ele instanceof Array) || ele.length < 2) {
1175
+ console.log("type为Polygon或MultiLineString的coordinates格式不对-->", geometry);
1176
+ return "";
1177
+ }
1178
+ for (let k = 0; k < ele.length; k++) {
1179
+ if (typeof ele[k] !== "number" || isNaN(ele[k])) {
1180
+ console.log("type为Polygon或MultiLineString的coordinates格式不对-->", geometry);
1181
+ return "";
1182
+ }
1183
+ }
1184
+ ringCoords.push(ele.slice(0, 2).join(" "));
1185
+ }
1186
+ wktCoords.push(`(${ringCoords.join(",")})`);
1187
+ }
1188
+ break;
1189
+ case "MULTIPOLYGON":
1190
+ for (let i = 0; i < coords.length; i++) {
1191
+ const item = coords[i];
1192
+ const polyCoords = [];
1193
+ if (!(item instanceof Array)) {
1194
+ console.log("type为MultiPolygon的coordinates格式不对-->", geometry);
1195
+ return "";
1196
+ }
1197
+ for (let j = 0; j < item.length; j++) {
1198
+ const ele = item[j];
1199
+ const ringCoords = [];
1200
+ if (!(ele instanceof Array)) {
1201
+ console.log("type为MultiPolygon的coordinates格式不对-->", geometry);
1202
+ return "";
1203
+ }
1204
+ for (let k = 0; k < ele.length; k++) {
1205
+ const mem = ele[k];
1206
+ if (!(mem instanceof Array) || mem.length < 2) {
1207
+ console.log("type为MultiPolygon的coordinates格式不对-->", geometry);
1208
+ return "";
1209
+ }
1210
+ for (let n = 0; n < mem.length; n++) {
1211
+ if (typeof mem[n] !== "number" || isNaN(mem[n])) {
1212
+ console.log("type为Polygon或MultiLineString的coordinates格式不对-->", geometry);
1213
+ return "";
1214
+ }
1215
+ }
1216
+ ringCoords.push(mem.slice(0, 2).join(" "));
1217
+ }
1218
+ polyCoords.push(`(${ringCoords.join(",")})`);
1219
+ }
1220
+ wktCoords.push(`(${polyCoords.join(",")})`);
1221
+ }
1222
+ break;
1223
+ default:
1224
+ console.log(`这个geojson中的type值好像不太对--> type: ${type}`);
1225
+ return "";
1226
+ }
1227
+ return `${type.toUpperCase()}(${wktCoords.join(",")})`;
1228
+ }
1229
+ function geojsonToWkt(geojson) {
1230
+ if (!geojson) {
1231
+ console.log("没有geojson数据");
1232
+ return "";
1233
+ }
1234
+ const { type } = geojson;
1235
+ if (!type) {
1236
+ console.log("这个geojson没有type");
1237
+ return "";
1238
+ }
1239
+ if (typeof type !== "string") {
1240
+ console.log("这个geojson的type不是字符串");
1241
+ return "";
1242
+ }
1243
+ if ([
1244
+ "POINT",
1245
+ "LINESTRING",
1246
+ "POLYGON",
1247
+ "MULTIPOINT",
1248
+ "MULTILINESTRING",
1249
+ "MULTIPOLYGON"
1250
+ ].includes(type.toUpperCase())) {
1251
+ return geometryToWkt(geojson);
1252
+ } else if (type.toUpperCase() === "FEATURE") {
1253
+ const { geometry } = geojson;
1254
+ if (!geometry) {
1255
+ console.log("type为Feature的数据没有geometry-->", geojson);
1256
+ return "";
1257
+ }
1258
+ return geometryToWkt(geometry);
1259
+ } else if (type.toUpperCase() === "GEOMETRYCOLLECTION") {
1260
+ const wkts = [];
1261
+ const { geometries } = geojson;
1262
+ if (!geometries) {
1263
+ console.log("type为GeometryCollection的数据没有geometries-->", geojson);
1264
+ return "";
1265
+ }
1266
+ if (!(geometries instanceof Array)) {
1267
+ console.log("type为GeometryCollection的数据中geometries不是数组-->", geojson);
1268
+ return "";
1269
+ }
1270
+ for (let i = 0; i < geometries.length; i++) {
1271
+ wkts.push(geometryToWkt(geometries[i]));
1272
+ }
1273
+ return `GEOMETRYCOLLECTION(${wkts.join(",")})`;
1274
+ } else if (type.toUpperCase() === "FEATURECOLLECTION") {
1275
+ const wkts = [];
1276
+ const { features } = geojson;
1277
+ if (!features) {
1278
+ console.log("type为FeatureCollection的数据没有features-->", geojson);
1279
+ return "";
1280
+ }
1281
+ if (!(features instanceof Array)) {
1282
+ console.log("type为FeatureCollection的数据中features不是数组-->", geojson);
1283
+ return "";
1284
+ }
1285
+ for (let i = 0; i < features.length; i++) {
1286
+ const item = features[i];
1287
+ const { type: type2 } = item;
1288
+ if (!type2) {
1289
+ console.log("这个feature没有type-->", item);
1290
+ return "";
1291
+ }
1292
+ if (typeof type2 !== "string") {
1293
+ console.log("这个feature的type不是字符串-->", item);
1294
+ return "";
1295
+ }
1296
+ const { geometry } = item;
1297
+ if (!geometry) {
1298
+ console.log("这个feature没有geometry-->", item);
1299
+ return "";
1300
+ }
1301
+ wkts.push(geometryToWkt(geometry));
1302
+ }
1303
+ return `GEOMETRYCOLLECTION(${wkts.join(",")})`;
1304
+ } else {
1305
+ console.log(`这个geojson的type值好像不太对--> type: ${type}`);
1306
+ return "";
1307
+ }
1308
+ }
946
1309
  const potatoMap3dUi2 = {
947
1310
  install: (app) => {
948
1311
  app.component("Map3dT", _sfc_main$9);
@@ -955,6 +1318,10 @@ const potatoMap3dUi2 = {
955
1318
  app.component("ControlFaceNorth", _sfc_main$3);
956
1319
  app.component("ControlSquarelyView", _sfc_main$2);
957
1320
  app.component("ControlBaseMap", _sfc_main$1);
1321
+ },
1322
+ functions: {
1323
+ geojsonToWkt,
1324
+ wktToGeojson
958
1325
  }
959
1326
  };
960
1327
  export {
@@ -476,13 +476,19 @@
476
476
  _hoisted_1$5
477
477
  ]),
478
478
  vue.createElementVNode("span", {
479
- class: vue.normalizeClass(["m-control-text", __props.placement === "left" ? "m-control-textLeft" : "m-control-textRight"])
479
+ class: vue.normalizeClass([
480
+ "m-control-text",
481
+ __props.placement === "left" ? "m-control-textLeft" : "m-control-textRight"
482
+ ])
480
483
  }, [
481
484
  vue.renderSlot(_ctx.$slots, "default", {}, () => [
482
485
  vue.createTextVNode("全屏")
483
486
  ]),
484
487
  vue.createElementVNode("div", {
485
- class: vue.normalizeClass(["m-control-triangle", __props.placement === "left" ? "m-control-triangleLeft" : "m-control-triangleRight"])
488
+ class: vue.normalizeClass([
489
+ "m-control-triangle",
490
+ __props.placement === "left" ? "m-control-triangleLeft" : "m-control-triangleRight"
491
+ ])
486
492
  }, null, 2)
487
493
  ], 2)
488
494
  ]);
@@ -527,7 +533,7 @@
527
533
  ])
528
534
  }, [
529
535
  vue.renderSlot(_ctx.$slots, "default", {}, () => [
530
- vue.createTextVNode("全屏")
536
+ vue.createTextVNode("复位")
531
537
  ]),
532
538
  vue.createElementVNode("div", {
533
539
  class: vue.normalizeClass([
@@ -946,6 +952,363 @@
946
952
  };
947
953
  }
948
954
  });
955
+ function wktToGeometry(wkt) {
956
+ try {
957
+ const typeStr = wkt.match(/^[A-Z]+(?=\()/);
958
+ if (!typeStr) {
959
+ console.log("wkt数据格式不对,没有解析到type");
960
+ return;
961
+ }
962
+ const type = typeStr[0];
963
+ let geometry;
964
+ if (type === "POINT") {
965
+ const res = wkt.match(/(-*\d+\.*\d*\s-*\d+\.*\d*)/g);
966
+ if (!res) {
967
+ console.log("没有解析到POINT的坐标");
968
+ return;
969
+ }
970
+ const coords = res[0].split(" ").map(Number);
971
+ geometry = { type: "Point", coordinates: coords };
972
+ } else if (type === "LINESTRING") {
973
+ const res = wkt.match(/(-*\d+\.*\d*\s-*\d+\.*\d*)/g);
974
+ if (!res) {
975
+ console.log("没有解析到LINESTRING的坐标");
976
+ return;
977
+ }
978
+ const coords = [];
979
+ res.forEach((item) => {
980
+ coords.push(item.split(" ").map(Number));
981
+ });
982
+ geometry = { type: "LineString", coordinates: coords };
983
+ } else if (type === "MULTIPOINT") {
984
+ const res = wkt.match(/(-*\d+\.*\d*\s-*\d+\.*\d*)/g);
985
+ if (!res) {
986
+ console.log("没有解析到MULTIPOINT的坐标");
987
+ return;
988
+ }
989
+ const coords = [];
990
+ res.forEach((item) => {
991
+ coords.push(item.split(" ").map(Number));
992
+ });
993
+ geometry = { type: "MultiPoint", coordinates: coords };
994
+ } else if (type === "POLYGON") {
995
+ const resArr = wkt.split(/,(?=\()/);
996
+ const coords = [];
997
+ for (let i = 0; i < resArr.length; i++) {
998
+ const res = resArr[i].match(/(-*\d+\.*\d*\s-*\d+\.*\d*)/g);
999
+ if (!res) {
1000
+ console.log("没有解析到POLYGON的坐标");
1001
+ return;
1002
+ }
1003
+ const ringCoords = [];
1004
+ res.forEach((ele) => {
1005
+ ringCoords.push(ele.split(" ").map(Number));
1006
+ });
1007
+ coords.push(ringCoords);
1008
+ }
1009
+ geometry = { type: "Polygon", coordinates: coords };
1010
+ } else if (type === "MULTILINESTRING") {
1011
+ const resArr = wkt.split(/,(?=\()/);
1012
+ const coords = [];
1013
+ for (let i = 0; i < resArr.length; i++) {
1014
+ const res = resArr[i].match(/(-*\d+\.*\d*\s-*\d+\.*\d*)/g);
1015
+ if (!res) {
1016
+ console.log("没有解析到MULTILINESTRING的坐标");
1017
+ return;
1018
+ }
1019
+ const ringCoords = [];
1020
+ res.forEach((ele) => {
1021
+ ringCoords.push(ele.split(" ").map(Number));
1022
+ });
1023
+ coords.push(ringCoords);
1024
+ }
1025
+ geometry = { type: "MultiLineString", coordinates: coords };
1026
+ } else if (type === "MULTIPOLYGON") {
1027
+ const resArr1 = wkt.split(/,(?=\(\()/);
1028
+ const coords = [];
1029
+ for (let i = 0; i < resArr1.length; i++) {
1030
+ const resArr2 = resArr1[i].split(/,(?=\()/);
1031
+ const polyCoords = [];
1032
+ for (let j = 0; j < resArr2.length; j++) {
1033
+ const res = resArr2[j].match(/(-*\d+\.*\d*\s-*\d+\.*\d*)/g);
1034
+ if (!res) {
1035
+ console.log("没有解析到MULTIPOLYGON的坐标");
1036
+ return;
1037
+ }
1038
+ const ringCoords = [];
1039
+ res.forEach((ele) => {
1040
+ ringCoords.push(ele.split(" ").map(Number));
1041
+ });
1042
+ polyCoords.push(ringCoords);
1043
+ }
1044
+ coords.push(polyCoords);
1045
+ }
1046
+ geometry = { type: "MultiPolygon", coordinates: coords };
1047
+ }
1048
+ return geometry;
1049
+ } catch (error) {
1050
+ console.log("格式解析出错", error);
1051
+ }
1052
+ }
1053
+ function wktToGeojson(wkt) {
1054
+ try {
1055
+ wkt = wkt.replaceAll("\n", "").replaceAll(" ", "").replaceAll(" ,", ",").replaceAll(", ", ",").replaceAll(" (", "(").replaceAll("( ", "(").replaceAll(" )", ")").replaceAll(") ", ")").toUpperCase();
1056
+ const typeStr = wkt.match(/^[A-Z]+(?=\()/);
1057
+ if (!typeStr) {
1058
+ console.log("wkt数据格式不对,没有解析到type");
1059
+ return;
1060
+ }
1061
+ const type = typeStr[0];
1062
+ if (type === "GEOMETRYCOLLECTION") {
1063
+ wkt = wkt.substring(19, wkt.length - 1);
1064
+ const resArr = wkt.split(/,(?=[A-Z]+)/);
1065
+ const features = [];
1066
+ for (let i = 0; i < resArr.length; i++) {
1067
+ const geometry = wktToGeometry(resArr[i]);
1068
+ if (!geometry)
1069
+ return;
1070
+ features.push({ type: "Feature", geometry });
1071
+ }
1072
+ return { type: "FeatureCollection", features };
1073
+ } else {
1074
+ const resArr = wkt.split(/,(?=[A-Z]+)/);
1075
+ if (resArr.length > 1) {
1076
+ const features = [];
1077
+ for (let i = 0; i < resArr.length; i++) {
1078
+ const geometry = wktToGeometry(resArr[i]);
1079
+ if (!geometry)
1080
+ return;
1081
+ features.push({ type: "Feature", geometry });
1082
+ }
1083
+ return { type: "FeatureCollection", features };
1084
+ } else {
1085
+ if ([
1086
+ "POINT",
1087
+ "LINESTRING",
1088
+ "POLYGON",
1089
+ "MULTIPOINT",
1090
+ "MULTILINESTRING",
1091
+ "MULTIPOLYGON"
1092
+ ].includes(type)) {
1093
+ const geometry = wktToGeometry(wkt);
1094
+ if (!geometry)
1095
+ return;
1096
+ return { type: "Feature", geometry };
1097
+ } else {
1098
+ console.log("wkt数据的type不太对-->", type);
1099
+ return;
1100
+ }
1101
+ }
1102
+ }
1103
+ } catch (error) {
1104
+ console.log("格式解析出错", error);
1105
+ }
1106
+ }
1107
+ function geometryToWkt(geometry) {
1108
+ if (!geometry) {
1109
+ console.log("没有geojson数据");
1110
+ return "";
1111
+ }
1112
+ const { type } = geometry;
1113
+ if (!type) {
1114
+ console.log("数据中没有type");
1115
+ return "";
1116
+ }
1117
+ if (typeof type !== "string") {
1118
+ console.log("数据中的type不是字符串");
1119
+ return "";
1120
+ }
1121
+ const coords = geometry.coordinates;
1122
+ if (!coords) {
1123
+ console.log("数据中没有coordinates");
1124
+ return "";
1125
+ }
1126
+ if (!(coords instanceof Array)) {
1127
+ console.log("数据的coordinates不是数组");
1128
+ return "";
1129
+ }
1130
+ if (coords.length === 0) {
1131
+ console.log("数据的coordinates是空的");
1132
+ return "";
1133
+ }
1134
+ const wktCoords = [];
1135
+ switch (type.toUpperCase()) {
1136
+ case "POINT":
1137
+ if (coords.length < 2) {
1138
+ console.log("type为Point的coordinates格式不对-->", geometry);
1139
+ return "";
1140
+ }
1141
+ for (let i = 0; i < coords.length; i++) {
1142
+ if (typeof coords[i] !== "number" || isNaN(coords[i])) {
1143
+ console.log("type为Point的coordinates格式不对-->", geometry);
1144
+ return "";
1145
+ }
1146
+ }
1147
+ wktCoords.push(coords.slice(0, 2).join(" "));
1148
+ break;
1149
+ case "LINESTRING":
1150
+ case "MULTIPOINT":
1151
+ for (let i = 0; i < coords.length; i++) {
1152
+ const coord = coords[i];
1153
+ if (!(coord instanceof Array) || coord.length < 2) {
1154
+ console.log("type为MultiPoint或LineString的coordinates格式不对-->", geometry);
1155
+ return "";
1156
+ }
1157
+ for (let j = 0; j < coord.length; j++) {
1158
+ if (typeof coord[j] !== "number" || isNaN(coord[j])) {
1159
+ console.log("type为MultiPoint或LineString的coordinates格式不对-->", geometry);
1160
+ return "";
1161
+ }
1162
+ }
1163
+ wktCoords.push(coord.slice(0, 2).join(" "));
1164
+ }
1165
+ break;
1166
+ case "POLYGON":
1167
+ case "MULTILINESTRING":
1168
+ for (let i = 0; i < coords.length; i++) {
1169
+ const item = coords[i];
1170
+ const ringCoords = [];
1171
+ if (!(item instanceof Array)) {
1172
+ console.log("type为Polygon或MultiLineString的coordinates格式不对-->", geometry);
1173
+ return "";
1174
+ }
1175
+ for (let j = 0; j < item.length; j++) {
1176
+ const ele = item[j];
1177
+ if (!(ele instanceof Array) || ele.length < 2) {
1178
+ console.log("type为Polygon或MultiLineString的coordinates格式不对-->", geometry);
1179
+ return "";
1180
+ }
1181
+ for (let k = 0; k < ele.length; k++) {
1182
+ if (typeof ele[k] !== "number" || isNaN(ele[k])) {
1183
+ console.log("type为Polygon或MultiLineString的coordinates格式不对-->", geometry);
1184
+ return "";
1185
+ }
1186
+ }
1187
+ ringCoords.push(ele.slice(0, 2).join(" "));
1188
+ }
1189
+ wktCoords.push(`(${ringCoords.join(",")})`);
1190
+ }
1191
+ break;
1192
+ case "MULTIPOLYGON":
1193
+ for (let i = 0; i < coords.length; i++) {
1194
+ const item = coords[i];
1195
+ const polyCoords = [];
1196
+ if (!(item instanceof Array)) {
1197
+ console.log("type为MultiPolygon的coordinates格式不对-->", geometry);
1198
+ return "";
1199
+ }
1200
+ for (let j = 0; j < item.length; j++) {
1201
+ const ele = item[j];
1202
+ const ringCoords = [];
1203
+ if (!(ele instanceof Array)) {
1204
+ console.log("type为MultiPolygon的coordinates格式不对-->", geometry);
1205
+ return "";
1206
+ }
1207
+ for (let k = 0; k < ele.length; k++) {
1208
+ const mem = ele[k];
1209
+ if (!(mem instanceof Array) || mem.length < 2) {
1210
+ console.log("type为MultiPolygon的coordinates格式不对-->", geometry);
1211
+ return "";
1212
+ }
1213
+ for (let n = 0; n < mem.length; n++) {
1214
+ if (typeof mem[n] !== "number" || isNaN(mem[n])) {
1215
+ console.log("type为Polygon或MultiLineString的coordinates格式不对-->", geometry);
1216
+ return "";
1217
+ }
1218
+ }
1219
+ ringCoords.push(mem.slice(0, 2).join(" "));
1220
+ }
1221
+ polyCoords.push(`(${ringCoords.join(",")})`);
1222
+ }
1223
+ wktCoords.push(`(${polyCoords.join(",")})`);
1224
+ }
1225
+ break;
1226
+ default:
1227
+ console.log(`这个geojson中的type值好像不太对--> type: ${type}`);
1228
+ return "";
1229
+ }
1230
+ return `${type.toUpperCase()}(${wktCoords.join(",")})`;
1231
+ }
1232
+ function geojsonToWkt(geojson) {
1233
+ if (!geojson) {
1234
+ console.log("没有geojson数据");
1235
+ return "";
1236
+ }
1237
+ const { type } = geojson;
1238
+ if (!type) {
1239
+ console.log("这个geojson没有type");
1240
+ return "";
1241
+ }
1242
+ if (typeof type !== "string") {
1243
+ console.log("这个geojson的type不是字符串");
1244
+ return "";
1245
+ }
1246
+ if ([
1247
+ "POINT",
1248
+ "LINESTRING",
1249
+ "POLYGON",
1250
+ "MULTIPOINT",
1251
+ "MULTILINESTRING",
1252
+ "MULTIPOLYGON"
1253
+ ].includes(type.toUpperCase())) {
1254
+ return geometryToWkt(geojson);
1255
+ } else if (type.toUpperCase() === "FEATURE") {
1256
+ const { geometry } = geojson;
1257
+ if (!geometry) {
1258
+ console.log("type为Feature的数据没有geometry-->", geojson);
1259
+ return "";
1260
+ }
1261
+ return geometryToWkt(geometry);
1262
+ } else if (type.toUpperCase() === "GEOMETRYCOLLECTION") {
1263
+ const wkts = [];
1264
+ const { geometries } = geojson;
1265
+ if (!geometries) {
1266
+ console.log("type为GeometryCollection的数据没有geometries-->", geojson);
1267
+ return "";
1268
+ }
1269
+ if (!(geometries instanceof Array)) {
1270
+ console.log("type为GeometryCollection的数据中geometries不是数组-->", geojson);
1271
+ return "";
1272
+ }
1273
+ for (let i = 0; i < geometries.length; i++) {
1274
+ wkts.push(geometryToWkt(geometries[i]));
1275
+ }
1276
+ return `GEOMETRYCOLLECTION(${wkts.join(",")})`;
1277
+ } else if (type.toUpperCase() === "FEATURECOLLECTION") {
1278
+ const wkts = [];
1279
+ const { features } = geojson;
1280
+ if (!features) {
1281
+ console.log("type为FeatureCollection的数据没有features-->", geojson);
1282
+ return "";
1283
+ }
1284
+ if (!(features instanceof Array)) {
1285
+ console.log("type为FeatureCollection的数据中features不是数组-->", geojson);
1286
+ return "";
1287
+ }
1288
+ for (let i = 0; i < features.length; i++) {
1289
+ const item = features[i];
1290
+ const { type: type2 } = item;
1291
+ if (!type2) {
1292
+ console.log("这个feature没有type-->", item);
1293
+ return "";
1294
+ }
1295
+ if (typeof type2 !== "string") {
1296
+ console.log("这个feature的type不是字符串-->", item);
1297
+ return "";
1298
+ }
1299
+ const { geometry } = item;
1300
+ if (!geometry) {
1301
+ console.log("这个feature没有geometry-->", item);
1302
+ return "";
1303
+ }
1304
+ wkts.push(geometryToWkt(geometry));
1305
+ }
1306
+ return `GEOMETRYCOLLECTION(${wkts.join(",")})`;
1307
+ } else {
1308
+ console.log(`这个geojson的type值好像不太对--> type: ${type}`);
1309
+ return "";
1310
+ }
1311
+ }
949
1312
  const potatoMap3dUi2 = {
950
1313
  install: (app) => {
951
1314
  app.component("Map3dT", _sfc_main$9);
@@ -958,6 +1321,10 @@
958
1321
  app.component("ControlFaceNorth", _sfc_main$3);
959
1322
  app.component("ControlSquarelyView", _sfc_main$2);
960
1323
  app.component("ControlBaseMap", _sfc_main$1);
1324
+ },
1325
+ functions: {
1326
+ geojsonToWkt,
1327
+ wktToGeojson
961
1328
  }
962
1329
  };
963
1330
  return potatoMap3dUi2;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "potato-map3d-ui2",
3
3
  "private": false,
4
- "version": "0.0.32",
4
+ "version": "0.0.33",
5
5
  "main": "./dist/map3d-ui2.umd.js",
6
6
  "module": "./dist/map3d-ui2.es.js",
7
7
  "type": "module",
@@ -21,6 +21,7 @@
21
21
  "preview": "vite preview"
22
22
  },
23
23
  "dependencies": {
24
+ "ant-design-vue": "^4.0.0",
24
25
  "axios": "^1.4.0",
25
26
  "vite-plugin-dts": "^2.2.0",
26
27
  "vue": "^2.0.0 || >=3.0.0"