|   | 
| /* | 
| * 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. | 
| */ | 
|   | 
|   | 
| /** | 
|  * AUTO-GENERATED FILE. DO NOT MODIFY. | 
|  */ | 
|   | 
| /* | 
| * 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. | 
| */ | 
| /** | 
|  * Parse and decode geo json | 
|  */ | 
| import * as zrUtil from 'zrender/lib/core/util.js'; | 
| import { GeoJSONLineStringGeometry, GeoJSONPolygonGeometry, GeoJSONRegion } from './Region.js'; | 
| function decode(json) { | 
|   if (!json.UTF8Encoding) { | 
|     return json; | 
|   } | 
|   var jsonCompressed = json; | 
|   var encodeScale = jsonCompressed.UTF8Scale; | 
|   if (encodeScale == null) { | 
|     encodeScale = 1024; | 
|   } | 
|   var features = jsonCompressed.features; | 
|   zrUtil.each(features, function (feature) { | 
|     var geometry = feature.geometry; | 
|     var encodeOffsets = geometry.encodeOffsets; | 
|     var coordinates = geometry.coordinates; | 
|     // Geometry may be appeded 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': | 
|         decodeRings(coordinates, encodeOffsets, encodeScale); | 
|         break; | 
|       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; | 
|   return jsonCompressed; | 
| } | 
| 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 deocding | 
|     x += prevX; | 
|     y += prevY; | 
|     prevX = x; | 
|     prevY = y; | 
|     // Dequantize | 
|     result.push([x / encodeScale, y / encodeScale]); | 
|   } | 
|   return result; | 
| } | 
| export default function parseGeoJSON(geoJson, nameProperty) { | 
|   geoJson = decode(geoJson); | 
|   return zrUtil.map(zrUtil.filter(geoJson.features, function (featureObj) { | 
|     // Output of mapshaper may have geometry null | 
|     return featureObj.geometry && featureObj.properties && featureObj.geometry.coordinates.length > 0; | 
|   }), function (featureObj) { | 
|     var properties = featureObj.properties; | 
|     var geo = featureObj.geometry; | 
|     var geometries = []; | 
|     switch (geo.type) { | 
|       case 'Polygon': | 
|         var coordinates = geo.coordinates; | 
|         // According to the GeoJSON specification. | 
|         // First must be exterior, and the rest are all interior(holes). | 
|         geometries.push(new GeoJSONPolygonGeometry(coordinates[0], coordinates.slice(1))); | 
|         break; | 
|       case 'MultiPolygon': | 
|         zrUtil.each(geo.coordinates, function (item) { | 
|           if (item[0]) { | 
|             geometries.push(new GeoJSONPolygonGeometry(item[0], item.slice(1))); | 
|           } | 
|         }); | 
|         break; | 
|       case 'LineString': | 
|         geometries.push(new GeoJSONLineStringGeometry([geo.coordinates])); | 
|         break; | 
|       case 'MultiLineString': | 
|         geometries.push(new GeoJSONLineStringGeometry(geo.coordinates)); | 
|     } | 
|     var region = new GeoJSONRegion(properties[nameProperty || 'name'], geometries, properties.cp); | 
|     region.properties = properties; | 
|     return region; | 
|   }); | 
| } |