最终效果图:
- 精确到区的可以先去获取区级的轮廓图:
阿里云
右侧有JSON文件,复制进项目即可。 - 需要精确到乡镇、街道,获取对应的街道轮廓KML:
北斗
目前没发现批量下载的方法,几个街道就下载几次,收集好下载的所有kml - 目前准备工作做完了,需要拼接所有信息,获得最终JSON文件:
GeoJson
这里注意一下,目前这个站点不知道是不是地域屏蔽了,第一需要梯子,第二需要梯子选择美国站点才能顺利进去。 - echarts引入JSON,但是区级JSON引入项目报错,目前版本是5.4.0,
Uncaught Error:Invalid geoJson format Cannot read property ‘length‘ of undefind
可以看出来是echarts自己本身解析的问题,没能解析出来“GeometryCollection”
需要在node_modules中把echarts文件改了,路径是
node_modules\echarts\lib\coord\geo\parseGeoJson.js
找到parseGeoJSON函数,直接无脑复制粘贴:
export default function parseGeoJSON(geoJson, nameProperty) {geoJson = decode(geoJson);return zrUtil.map(zrUtil.filter(geoJson.features, function (featureObj) {if (featureObj.geometry.geometries) {let geometry = featureObj.geometry.geometries.map(i => {return i.coordinates;});let { type, properties, ...params } = featureObj;return { type, properties, geometry };}// Output of mapshaper may have geometry nullreturn 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));case 'GeometryCollection': { let geometry = {type: 'Polygon'};let coordinatesArr = featureObj.geometry.geometries.map(i => {return i.coordinates;})geometry.coordinates = coordinatesArr;coordinatesArr.forEach(i => {geometries.push({type: "polygon",exterior: i[0],interiors: i.slice(1)});});break;}}var region = new GeoJSONRegion(properties[nameProperty || 'name'], geometries, properties.cp);region.properties = properties;return region;});
}
再次保存,即可看到街道图
- 但是手动打补丁,本地似乎改好了,但是如果有其他同事拉代码,那包还是没更新,还是没用,所以我们需要把这个补丁打进云端:
下载patch-package
npm install patch-package --save-dev
在package.json中新增一条命令:
“postinstall”: “patch-package”
执行:
npx patch-package 更改依赖的包名
自动生成一个文件:
后续正常提交就可以了,手动打了这个补丁,后续npm i时也会有更改的代码