/
githubmirror
/
echarts
Обзор
Документация
Войти
/
githubmirror
/
echarts
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
test/data/map/decode.js
100 строк
3 KB
Dirk Stolle
chore: fix typos
27 июн 2025, 13:49
27 июн 2025, 13:49
5ad87d4
Код
Авторство
О чём код?
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ function decode(json) { if (json.UTF8Encoding) { return; } var jsonCompressed = json; var encodeScale = jsonCompressed.UTF8Scale; if (encodeScale == null) { encodeScale = 1024; } var features = jsonCompressed.features; features.forEach(function (feature) { var geometry = feature.geometry; var encodeOffsets = geometry.encodeOffsets; var coordinates = geometry.coordinates; // Geometry may be appended manually in the script after json loaded. // In this case this geometry is usually not encoded. if (!encodeOffsets) { return; } switch (geometry.type) { case 'LineString': geometry.coordinates = decodeRing(coordinates, encodeOffsets, encodeScale); break; case 'Polygon': case 'MultiLineString': decodeRings(coordinates, encodeOffsets, encodeScale); break; case 'MultiPolygon': zrUtil.each(coordinates, function (rings, idx) { return decodeRings(rings, encodeOffsets[idx], encodeScale) }); } }); // Has been decoded jsonCompressed.UTF8Encoding = false; } function decodeRings(rings, encodeOffsets, encodeScale) { for (var c = 0; c < rings.length; c++) { rings[c] = decodeRing( rings[c], encodeOffsets[c], encodeScale ); } } function decodeRing(coordinate, encodeOffsets, encodeScale) { var result = []; var prevX = encodeOffsets[0]; var prevY = encodeOffsets[1]; for (var i = 0; i < coordinate.length; i += 2) { var x = coordinate.charCodeAt(i) - 64; var y = coordinate.charCodeAt(i + 1) - 64; // ZigZag decoding x = (x >> 1) ^ (-(x & 1)); y = (y >> 1) ^ (-(y & 1)); // Delta decoding x += prevX; y += prevY; prevX = x; prevY = y; // Dequantize result.push([x / encodeScale, y / encodeScale]); } return result; } // Export for testing. if (typeof module !== 'undefined') { module.exports = decode; } else { window.decodeGeoJSON = decode; }