123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- /*
- * 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.
- */
- var _util = require("zrender/lib/core/util");
- var each = _util.each;
- var parseGeoJson = require("./parseGeoJson");
- var _model = require("../../util/model");
- var makeInner = _model.makeInner;
- var fixNanhai = require("./fix/nanhai");
- var fixTextCoord = require("./fix/textCoord");
- var fixGeoCoord = require("./fix/geoCoord");
- var fixDiaoyuIsland = require("./fix/diaoyuIsland");
- /*
- * 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.
- */
- // Built-in GEO fixer.
- var inner = makeInner();
- var _default = {
- /**
- * @param {string} mapName
- * @param {Object} mapRecord {specialAreas, geoJSON}
- * @param {string} nameProperty
- * @return {Object} {regions, boundingRect}
- */
- load: function (mapName, mapRecord, nameProperty) {
- var parsed = inner(mapRecord).parsed;
- if (parsed) {
- return parsed;
- }
- var specialAreas = mapRecord.specialAreas || {};
- var geoJSON = mapRecord.geoJSON;
- var regions; // https://jsperf.com/try-catch-performance-overhead
- try {
- regions = geoJSON ? parseGeoJson(geoJSON, nameProperty) : [];
- } catch (e) {
- throw new Error('Invalid geoJson format\n' + e.message);
- }
- fixNanhai(mapName, regions);
- each(regions, function (region) {
- var regionName = region.name;
- fixTextCoord(mapName, region);
- fixGeoCoord(mapName, region);
- fixDiaoyuIsland(mapName, region); // Some area like Alaska in USA map needs to be tansformed
- // to look better
- var specialArea = specialAreas[regionName];
- if (specialArea) {
- region.transformTo(specialArea.left, specialArea.top, specialArea.width, specialArea.height);
- }
- });
- return inner(mapRecord).parsed = {
- regions: regions,
- boundingRect: getBoundingRect(regions)
- };
- }
- };
- function getBoundingRect(regions) {
- var rect;
- for (var i = 0; i < regions.length; i++) {
- var regionRect = regions[i].getBoundingRect();
- rect = rect || regionRect.clone();
- rect.union(regionRect);
- }
- return rect;
- }
- module.exports = _default;
|