/** * 地图参数 * key为地图类型: { * getGeoJson: 地图数据加载 * } */ define(function (require) { function decode(json) { if (!json.UTF8Encoding) { return json; } var features = json.features; for (var f = 0; f < features.length; f++) { var feature = features[f]; var coordinates = feature.geometry.coordinates; var encodeOffsets = feature.geometry.encodeOffsets; for (var c = 0; c < coordinates.length; c++) { var coordinate = coordinates[c]; if (feature.geometry.type === 'Polygon') { coordinates[c] = decodePolygon( coordinate, encodeOffsets[c] ); } else if (feature.geometry.type === 'MultiPolygon') { for (var c2 = 0; c2 < coordinate.length; c2++) { var polygon = coordinate[c2]; coordinate[c2] = decodePolygon( polygon, encodeOffsets[c][c2] ); } } } } // Has been decoded json.UTF8Encoding = false; return json; } function decodePolygon(coordinate, encodeOffsets) { 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 deocding x += prevX; y += prevY; prevX = x; prevY = y; // Dequantize result.push([x / 1024, y / 1024]); } return result; } var mapParams = { 'none': { getGeoJson: function(callback) { callback({ type: 'FeatureCollection', features: [{ type: 'Feature', geometry: { coordinates: [], encodeOffsets: [], type: 'Polygon' }, properties: { } }] }); } }, 'world': { getGeoJson: function (callback) { require(['./geoJson/world_geo'], function (md){ callback(decode(md)); }); } }, 'china': { getGeoJson: function (callback) { require(['./geoJson/china_geo'], function (md){ callback(decode(md)); }); } }, '南海诸岛': { textCoord: [126, 25], getPath: function (leftTop, scale) { // scale.x: width = 10.51 : 64 var pList = [ [ [0,3.5],[7,11.2],[15,11.9],[30,7],[42,0.7],[52,0.7], [56,7.7],[59,0.7],[64,0.7],[64,0],[5,0],[0,3.5] ], [ [13,16.1],[19,14.7],[16,21.7],[11,23.1],[13,16.1] ], [ [12,32.2],[14,38.5],[15,38.5],[13,32.2],[12,32.2] ], [ [16,47.6],[12,53.2],[13,53.2],[18,47.6],[16,47.6] ], [ [6,64.4],[8,70],[9,70],[8,64.4],[6,64.4] ], [ [23,82.6],[29,79.8],[30,79.8],[25,82.6],[23,82.6] ], [ [37,70.7],[43,62.3],[44,62.3],[39,70.7],[37,70.7] ], [ [48,51.1],[51,45.5],[53,45.5],[50,51.1],[48,51.1] ], [ [51,35],[51,28.7],[53,28.7],[53,35],[51,35] ], [ [52,22.4],[55,17.5],[56,17.5],[53,22.4],[52,22.4] ], [ [58,12.6],[62,7],[63,7],[60,12.6],[58,12.6] ], [ [0,3.5],[0,93.1],[64,93.1],[64,0],[63,0],[63,92.4], [1,92.4],[1,3.5],[0,3.5] ] ]; var str = ''; var left = leftTop[0]; var top = leftTop[1]; for (var i = 0, l = pList.length; i < l; i++) { str += 'M ' + ((pList[i][0][0] * scale+ left).toFixed(2) - 0) + ' ' + ((pList[i][0][1] * scale + top).toFixed(2) - 0) + ' '; for (var j = 1, k = pList[i].length; j < k; j++) { str += 'L ' + ((pList[i][j][0] * scale + left).toFixed(2) - 0) + ' ' + ((pList[i][j][1] * scale + top).toFixed(2) - 0) + ' '; } } return str + ' Z'; } }, '新疆': { getGeoJson: function (callback) { require(['./geoJson/xin_jiang_geo'], function (md){ callback(decode(md)); }); } }, '西藏': { getGeoJson: function (callback) { require(['./geoJson/xi_zang_geo'], function (md){ callback(decode(md)); }); } }, '内蒙古': { getGeoJson: function (callback) { require(['./geoJson/nei_meng_gu_geo'], function (md){ callback(decode(md)); }); } }, '青海': { getGeoJson: function (callback) { require(['./geoJson/qing_hai_geo'], function (md){ callback(decode(md)); }); } }, '四川': { getGeoJson: function (callback) { require(['./geoJson/si_chuan_geo'], function (md){ callback(decode(md)); }); } }, '黑龙江': { getGeoJson: function (callback) { require(['./geoJson/hei_long_jiang_geo'], function (md){ callback(decode(md)); }); } }, '甘肃': { getGeoJson: function (callback) { require(['./geoJson/gan_su_geo'], function (md){ callback(decode(md)); }); } }, '云南': { getGeoJson: function (callback) { require(['./geoJson/yun_nan_geo'], function (md){ callback(decode(md)); }); } }, '广西': { getGeoJson: function (callback) { require(['./geoJson/guang_xi_geo'], function (md){ callback(decode(md)); }); } }, '湖南': { getGeoJson: function (callback) { require(['./geoJson/hu_nan_geo'], function (md){ callback(decode(md)); }); } }, '陕西': { getGeoJson: function (callback) { require(['./geoJson/shan_xi_1_geo'], function (md){ callback(decode(md)); }); } }, '广东': { getGeoJson: function (callback) { require(['./geoJson/guang_dong_geo'], function (md){ callback(decode(md)); }); } }, '吉林': { getGeoJson: function (callback) { require(['./geoJson/ji_lin_geo'], function (md){ callback(decode(md)); }); } }, '河北': { getGeoJson: function (callback) { require(['./geoJson/he_bei_geo'], function (md){ callback(decode(md)); }); } }, '湖北': { getGeoJson: function (callback) { require(['./geoJson/hu_bei_geo'], function (md){ callback(decode(md)); }); } }, '贵州': { getGeoJson: function (callback) { require(['./geoJson/gui_zhou_geo'], function (md){ callback(decode(md)); }); } }, '山东': { getGeoJson: function (callback) { require(['./geoJson/shan_dong_geo'], function (md){ callback(decode(md)); }); } }, '江西': { getGeoJson: function (callback) { require(['./geoJson/jiang_xi_geo'], function (md){ callback(decode(md)); }); } }, '河南': { getGeoJson: function (callback) { require(['./geoJson/he_nan_geo'], function (md){ callback(decode(md)); }); } }, '辽宁': { getGeoJson: function (callback) { require(['./geoJson/liao_ning_geo'], function (md){ callback(decode(md)); }); } }, '山西': { getGeoJson: function (callback) { require(['./geoJson/shan_xi_2_geo'], function (md){ callback(decode(md)); }); } }, '安徽': { getGeoJson: function (callback) { require(['./geoJson/an_hui_geo'], function (md){ callback(decode(md)); }); } }, '福建': { getGeoJson: function (callback) { require(['./geoJson/fu_jian_geo'], function (md){ callback(decode(md)); }); } }, '浙江': { getGeoJson: function (callback) { require(['./geoJson/zhe_jiang_geo'], function (md){ callback(decode(md)); }); } }, '江苏': { getGeoJson: function (callback) { require(['./geoJson/jiang_su_geo'], function (md){ callback(decode(md)); }); } }, '重庆': { getGeoJson: function (callback) { require(['./geoJson/chong_qing_geo'], function (md){ callback(decode(md)); }); } }, '宁夏': { getGeoJson: function (callback) { require(['./geoJson/ning_xia_geo'], function (md){ callback(decode(md)); }); } }, '海南': { getGeoJson: function (callback) { require(['./geoJson/hai_nan_geo'], function (md){ callback(decode(md)); }); } }, '台湾': { getGeoJson: function (callback) { require(['./geoJson/tai_wan_geo'], function (md){ callback(decode(md)); }); } }, '北京': { getGeoJson: function (callback) { require(['./geoJson/bei_jing_geo'], function (md){ callback(decode(md)); }); } }, '天津': { getGeoJson: function (callback) { require(['./geoJson/tian_jin_geo'], function (md){ callback(decode(md)); }); } }, '上海': { getGeoJson: function (callback) { require(['./geoJson/shang_hai_geo'], function (md){ callback(decode(md)); }); } }, '香港': { getGeoJson: function (callback) { require(['./geoJson/xiang_gang_geo'], function (md){ callback(decode(md)); }); } }, '澳门': { getGeoJson: function (callback) { require(['./geoJson/ao_men_geo'], function (md){ callback(decode(md)); }); } } }; return { decode: decode, params: mapParams }; });