以前我是用google地图做标注,不过现在google地图不行了。我研究了baidu地图之后感觉挺不错的,完全不用写代码就可以在地图上标注了,用百度地图标注,把url发给朋友,就很方便让他找到聚会的地方,或者放在公司的“联系我们”里也比较方便客户能够找到你的公司。
5.获取代码
本文转自yifangyou 51CTO博客,原文链接:http://blog.51cto.com/yifangyou/611409,如需转载请自行联系原作者
之前用Python+百度地图api实现了多点标注,偶然的机会又看到还有pyecharts这个东东,里面的BMap可以直接生成一个html,真香(试过BMap就知道pyecharts里面的Map或者Geo也不香了),于是趁过年没事赶紧给我的多点标注程序升级到BMap。
要用BMap,首先涉及到百度开放平台的ak,然后导入pyecharts。初学的教程看这篇,从注册ak(比如注意填写*,还有类型选网页,都有讲到,照抄不会错),到导入pyecharts,再到初始化BMap,添加点,生成html,讲得详细又全面。
细节不清楚的,可以参考pyecharts的官方说明。
里面有几点不好上手,需要拿出来说一下:
1、添加点:add_coordinate(‘第一个参数是地点名’, ‘第二个参数是精度’, ‘第三个参数是纬度’),在有经纬度的情况下,写个循环就搞定了。
除此以外还可以用Json格式传值,详情参加官方说明,有示例。
2、初始化地图的那个add函数,里面有个data_pair列表:[('地点名(跟加坐标那个地点名一致)','数字或文字'),('……','……'),('……','……')]
因为BMap可以显示一个地点的状态或者数值,可以理解为这个data_pair是以相同地点名为索引,保存这个值或状态的。可能其他案例中都是保存数值的居多,比如做新冠肺炎数据统计,显示当地的确诊人数,除了存数值还可以存字符串。
3、set_series_opts里面,有个label_opts,是在地图里显示单个地址标签的,如果设置is_show=True,默认是显示经度的,这就坑了。相信很多人都应该是要显示地点名吧!如果要把标签值从经度改成地点名,要用到formatter,对于小白来说就非常不友好了。
首先,这里涉及到一个叫“函数回调”的东东,是啥我至今也没搞懂,感觉像是Python里用字符串嵌套了一个js?(写法在第一篇教程里写得很清楚了)
其次,最坑的是,原来Label数据的Value可以理解成是个列表,0是精度,1是纬度,2个data_pair里添加的那个数值或状态(第二个参数),就是没有地点名字,可把我给难坏了,直到看到这个文章。搞了半天原来label的值是这样的:
[
{"name":"赣州市","value":[ 经度,维度, 数值1,数值2 ] },
{"name":"天津市","value":[ 经度,维度, 数值1,数值2 ] },
]
所以我对照这个文章,把formatter的函数修改如下:
formatter=JsCode("function(params){return params.data.name;}"
才算改好这个标签。
真是翻了好多教程才抄到正确的代码。
4、BMap初始化的时候,需要设置地图的大小,我想做成自适应大小的,网上教程有说改Python源文件的,有说用bs4改html文件的,目前我一个都还没试成功,后续看下咋弄。
以前我是用google地图做标注,不过现在google地图不行了。我研究了baidu地图之后感觉挺不错的,完全不用写代码就可以在地图上标注了,用百度地图标注,把url发给朋友,就很方便让他找到聚会的地方,或者放在公司的“联系我们”里也比较方便客户能够找到你的公司。
5.获取代码
本文转自yifangyou 51CTO博客,原文链接:http://blog.51cto.com/yifangyou/611409,如需转载请自行联系原作者
[1]启动ArcMap,新建空白地图文档;
[2]打开【目录】窗口,定位到【4-Data】->【Symbology.mxd】,双击打开地图文档;
[3]在内容列表中,右键单击【Geo_IN_Rep】图层,选择【属性】,弹出【图层属性】窗口,切换到【标注】页,勾选【标注此图层中的要素】,标注字段选择【Label】,设置字体、大小、颜色等;
[4]单击【确定】,查看地图窗口,标注要素如下图;
[5]保存地图文档。单击【标准工具条】->【保存】。
[1]打开标注工具条。右键单击工具栏空白处,选择【标注】工具条;
[2]在【标注】工具条上,单击【标注管理器】,打开【标注管理器】窗口。通过标注管理器,可以控制图层的标注显示,设置文本样式,设置标注放置规则等,如下图;
[3]单击【表达式…】按钮,弹出【标注表达式】窗口,在这里可以定义标注的内容,使用VBScript脚本还可以控制标注的显示风格,单击【确定】,关闭【标注表达式】窗口;
[4]单击【比例范围】,弹出【比例范围】窗口,设置标注的显示范围,如下图;
[5]单击【确定】,关闭【比例范围】窗口;
[6]单击【属性】,弹出【放置属性】对话框,设置标注放置位置以及冲突检测规则,如下图;
[7]单击【确定】,关闭【放置属性】窗口;
[8]单击【确定】,关闭【标注管理器】窗口;
保存地图文档。单击【标准工具条】->【保存】。
[1]启用Maplex标注引擎。单击【标注工具条】->【使用Maplex标注引擎】;
[2]选择快速显示方式。单击【标注工具条】->【快速】;
[3]单击【标注工具条】->【标注管理器】,打开【标注管理器】窗口。通过标注管理器,可以控制图层的标注显示,设置文本样式,设置标注放置规则等,如下图,对比这些规则与标准标注引擎的区别;
[4]单击【比例范围】,弹出【比例范围】窗口,设置标注的显示范围,如下图;
[5]单击【确定】,关闭【比例范围】窗口;
[6]单击【属性】,弹出【放置属性】窗口,切换到【自适应策略】页;
[7]勾选【超限要素】,单击【选项】,弹出【标注超限】窗口,设置如下图;
[8]单击【确定】,关闭【标注超限】窗口;
[9]勾选【减小字号】,单击【选项】,弹出【标注缩小】窗口,设置如下图;
[10]单击【确定】,关闭【标注缩小】窗口;
[11]切换到【标注密度】页,设置标注缓冲区、标注的最小要素大小、标注最大要素部分,参数如下图;
[12]切换到【冲突解决】页,设置边界要素权重为【1000】;
[13]连续单击【确定】,关闭所有窗口,查看地图窗口;
[14]单击【标注工具条】->【权重等级】,弹出【权重等级】设置窗口,设置点、线要素权重为1000,面边界权重为1000,如下图;
[15]单击【确定】,关闭【权重等级】窗口,查看地图效果,如下图;
[16]保存地图文档。单击【标准工具条】->【保存】。
<map id="myMap" class="myMap" scale="{{scale}}" min-scale="8" longitude="{{longitude}}" latitude="{{latitude}}"
show-location="true" bindregionchange="regionDidChange">
<!-- map content -->
<cover-image class="manpCenter" src="/images/home/map/map_center.png"></cover-image>
</map>
// 设置图片样式
.manpCenter {
width: 48rpx;
height: 77rpx;
position: absolute;
left: calc(50% - 24rpx);
top: calc(50% - 77rpx); // 按道理是-38.5rpx,但是会比实际偏上一点,设置-77rpx视觉上比较符合实际
}
// 如果仅有地图缩放但没有平移,并不会触发此方法。目前未发现有能够监控scale变化的api。如果一定要监控缩放,
// 只能自己设置定时器,监控this.mapCtx.getScale(Object)。但用户体验可能也很差。
// MapContext官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.getScale.html
// 拖动地图触发事件
regionDidChange(e) {
this.getCenterLocation()
},
// 获取地图中心点的经纬度
getCenterLocation: function () {
this.mapCtx.getCenterLocation({
success: function(res){
// console.log(res)
console.log(res.latitude + ',' + res.longitude)
}
})
},