【记录】自定义svg图片获取geojson格式文件

1.必要性

1.地图资源一般是只有省、市、县级别的 geojson 文件,而我们可能需要更细粒度的地图来展示(如:街道、社区)
2.数据来源不统一(全国、省使用的是百度的加密地图;市、县使用的是高德地图),就有可能在地图合并时,边界不重合,所以在必要时也需要对已有地图进行微调。

2.资源准备

1.http://geojson.io 可以预览及简单编辑 geojson 文件的网站
2.https://www.npmjs.com/package/svg2geojson 将 svg 转换成 geojson 的工具
3.http://datav.aliyun.com/portal/school/atlas/area_selector#&lat=30.316551722910077&lng=106.68898666525287&zoom=3.5 可获取一般地图资源

3.具体步骤

1.绘制 svg 图片,生成的 svg 图片中的描点信息只能包含直线,也尽量使用 path 来绘制,否则在转换成 geojson 时可能会出问题
2.获取 svg 的边界信息(在 chrome 中打开设计好的 svg 图片)

// 打开控制台,然后执行如下指令,用来获取 svg 的边界信息(如果获取不到,或不正确,可能是图的问题,要想别的办法)
var box = document.getElementsByTagName('svg')[0].getBBox();
console.log(box.x, box.y, box.x + box.width, box.y + box.height);

3.获取svg地图的最大最小经纬度(横维竖经)
将想要获取的geojson(比如是想要广州白云区的具体街道,这个时候去拿白云区的轮廓)在http://geojson.io中标点获取
在这里插入图片描述
4. 将第2.3步骤拿到的数据填到相应的位置

<MetaInfo xmlns="http://www.prognoz.ru">
    <Geo>
        <GeoItem 
                X="{{svg图片边界的X坐标(小)}}" Y="{{svg图片边界的Y坐标(小)}}" 
                Latitude="{{geojson边界的伟度坐标(高)}}" Longitude="{{geojson边界的经度坐标(左)}}"
        />
        <GeoItem 
                X="{{svg图片边界的X坐标(大)}}" Y="{{svg图片边界的Y坐标(大)}}" 
                Latitude="{{geojson边界的伟度坐标(低)}}" Longitude="{{geojson边界的经度坐标(右)}}"
        />
    </Geo>
</MetaInfo>

5.在svg图片的根节点中加入这段代码
在这里插入图片描述
6.svg转geojson

// 使用前的全局安装(只需安装一次)
npm install -g svg2geojson
// 然后在svg存放的目录  运行git bash 输入下面的命令 生成 geojson 文件
svg2geojson file.svg

注:可以通过http://geojson.io 去着色和添加区域的信息,自己去摸索吧

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
要给自定义SVG 图片添加动效,可以使用 mxGraph 的内置动画功能。具体步骤如下: 1. 将 SVG 图片换为 mxGraph 的 shape 对象,可以使用以下代码: ``` var svgDoc = mxUtils.parseXml(svgString); var svgNode = svgDoc.documentElement; var shape = new mxImageShape(new mxImage(svgNode.getAttribute('src'), 24, 24), 24, 24); ``` 其中,`svgString` 是 SVG 图片的字符串表示,`24, 24` 是图片的宽高。 2. 创建动画对象,可以使用以下代码: ``` var anim = new mxAnimation({ delay: 0, duration: 1000, timingFunction: mxConstants.EASE_OUT, step: mxUtils.bind(this, function (current) { // update shape state }) }); ``` 其中,`delay` 是动画延迟时间,`duration` 是动画持续时间,`timingFunction` 是动画时间函数,`step` 是动画执行时的回调函数。 3. 将动画对象绑定到 shape 对象上,可以使用以下代码: ``` mxUtils.setPrefixedStyle(shape.node.style, 'animation', anim.css); anim.start(); ``` 其中,`mxUtils.setPrefixedStyle` 是一个工具函数,用于设置浏览器前缀的 CSS 样式。 4. 在动画执行的回调函数中更新 shape 对象的状态,可以使用以下代码: ``` shape.bounds = new mxRectangle( x + current * (targetX - x), y + current * (targetY - y), width + current * (targetWidth - width), height + current * (targetHeight - height) ); ``` 其中,`x, y, width, height` 是初始状态,`targetX, targetY, targetWidth, targetHeight` 是目标状态。 综上,以上是给自定义 SVG 图片添加动效的基本步骤,具体实现需要根据具体需求进行调整。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值