-
2021-01-12 09:29:01
我有个朋友是一名业务员,大江南北到处跑客户,以前都是用的百度地图的地点收藏功能,把客户的位置收藏在地图上,由于百度地图的收藏点功能过于简单,不能自定义名称,更没法添加自己的备注,也无法进行批量管理。
之前我给他推荐过地图无忧、地图慧等产品,给他他的感觉就是不适合他这种小业务员使用,一个是价格太高,另一个就是使用起来比较复杂。于是我就想着做一款能够把客户标记在地图上的小程序(因为成本低)!
这个小程序想法很纯粹,就是地图标点并添加自己的备注,适合业务逻辑简单的个人使用,比如外勤业务员,卖房租房的房源管理、广告位管理、吃货地图、旅游景点等的标记。大家可以试试!
最主要的是因为我是个人开发的小程序,所以完全免费,以后也不会收费
介绍:
这款小程序可以在地图上标点,并且可以把你标点分标签管理,例如房子中介,可能就需要区分短租房源、长租房源、在售房源等等,我们就可以根据添加这几个标签,分标签去标点。而且还可以根据多个地点进行最短路线规划,支持步行、骑行、驾车。
示例图:
你看,标点图标都不一样,是不是很清晰
搜索方法:
打开微信,搜索小程序【多点钉图标记】
觉得对你有帮助的话,希望得到一个赞哦!!!
更多相关内容 -
电脑离线地图标注软件卫星地图 免费下载
2017-12-29 19:09:35支持添加地图标记,距离测量和面积测量,地点名称显示。 8.支持鹰眼显示缩略地图,截屏功能。 9.支持添加自定义标识图标,用户可以更换图标。 10.分类图层管理,可以隐藏/显示图层。 11.支持批量导入导出标注数据。 ... -
高德地图绘制标记点,点击弹出弹框进入第三方地图软件
2020-09-29 14:48:31需求:根据经纬度绘制标记点,点击标记点弹出弹框和底部按钮,点击顶部弹框进入二级界面,点击底部按钮弹出第三方地图软件选择页,实现跨进程跳转。 项目是公司项目,只放出重要部分代码。 绘制标记点: final ...需求:根据经纬度绘制标记点,点击标记点弹出弹框和底部按钮,点击顶部弹框进入二级界面,点击底部按钮弹出第三方地图软件选择页,实现跨进程跳转。
效果图:
项目是公司项目,只放出重要部分代码。
final Marker marker1 = aMap.addMarker(new MarkerOptions() .position(latLng2) .title("地址标题111111") .snippet("地址内容1111")); final Marker marker2 = aMap.addMarker(new MarkerOptions() .position(latLng3) .title("地址标题22222") .snippet("地址内容2222"));
绘制标记点
//标记点击事件 AMap.OnMarkerClickListener markerClickListener = new AMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { position = marker.getPosition(); title = marker.getTitle(); marker.showInfoWindow(); nav.setVisibility(View.VISIBLE); //导航按钮点击 nav.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { showAnimation(); } }); return true; } };
点击标记后获取到当前标记的经纬度和名称,显示底部按钮,点击按钮弹出第三方地图选择页。
//标记上部弹框点击 AMap.OnInfoWindowClickListener listener = new AMap.OnInfoWindowClickListener() { @Override public void onInfoWindowClick(Marker arg0) { Toast.makeText(FangchanMapActivity.this, "点击了弹框1", Toast.LENGTH_SHORT).show(); } };
点击标记顶部弹框进入二级界面,需要什么值就取什么值,后台还在出接口,我这边没有做操作
//地图点击 AMap.OnMapClickListener mapClickListener = new AMap.OnMapClickListener() { @Override public void onMapClick(LatLng latLng) { marker1.hideInfoWindow(); marker2.hideInfoWindow(); nav.setVisibility(View.GONE); } };
这里只做了显示隐藏的操作
//设置图标 marker1.setIcon(BitmapDescriptorFactory.fromResource(R.mipmap.marker_icon)); //绑定点击事件 aMap.setOnInfoWindowClickListener(listener); aMap.setOnMapClickListener(mapClickListener); aMap.setOnMarkerClickListener(markerClickListener);
千万千万千万记得绑定点击事件
private void showAnimation() { LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View vPopupWindow = inflater.inflate(R.layout.layout_popupwindow, null, false);//引入弹窗布局 popupWindow = new PopupWindow(vPopupWindow, ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.WRAP_CONTENT, true); TextView gaode = vPopupWindow.findViewById(R.id.gaode); TextView baidu = vPopupWindow.findViewById(R.id.baidu); TextView tengxun = vPopupWindow.findViewById(R.id.tengxun); TextView clean_text = vPopupWindow.findViewById(R.id.clean_text); gaode.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (MapUtil.isGdMapInstalled()) { MapUtil.openGaoDeNavi(FangchanMapActivity.this, 0, 0, null, position.latitude, position.longitude, title); } else { //这里必须要写逻辑,不然如果手机没安装该应用,程序会闪退,这里可以实现下载安装该地图应用 Toast.makeText(FangchanMapActivity.this, "尚未安装高德地图", Toast.LENGTH_SHORT).show(); } } }); baidu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (MapUtil.isBaiduMapInstalled()){ MapUtil.openBaiDuNavi(FangchanMapActivity.this, 0, 0, null, position.latitude, position.longitude, title); } else { Toast.makeText(FangchanMapActivity.this, "尚未安装百度地图", Toast.LENGTH_SHORT).show(); } } }); tengxun.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (MapUtil.isTencentMapInstalled()){ MapUtil.openTencentMap(FangchanMapActivity.this, 0, 0, null, position.latitude, position.longitude, title); } else { Toast.makeText(FangchanMapActivity.this, "尚未安装腾讯地图", Toast.LENGTH_SHORT).show(); } } }); clean_text.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { popupWindow.dismiss(); } }); //设置背景透明 addBackground(); //设置进出动画 popupWindow.setAnimationStyle(R.style.PopupWindowAnimation); //引入依附的布局 View parentView = LayoutInflater.from(FangchanMapActivity.this).inflate(R.layout.layout_popupwindow, null); //相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移 popupWindow.showAtLocation(parentView, Gravity.BOTTOM, 0, 0); } private void addBackground() { // 设置背景颜色变暗 WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = 0.7f;//调节透明度 getWindow().setAttributes(lp); //dismiss时恢复原样 popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = 1f; getWindow().setAttributes(lp); } }); }
底部弹框,popupwindow实现
public class MapUtil { public static final String PN_GAODE_MAP = "com.autonavi.minimap";// 高德地图包名 public static final String PN_BAIDU_MAP = "com.baidu.BaiduMap"; // 百度地图包名 public static final String PN_TENCENT_MAP = "com.tencent.map"; // 腾讯地图包名 /** * 检查地图应用是否安装 * @return */ public static boolean isGdMapInstalled(){ return isInstallPackage(PN_GAODE_MAP); } public static boolean isBaiduMapInstalled(){ return isInstallPackage(PN_BAIDU_MAP); } public static boolean isTencentMapInstalled(){ return isInstallPackage(PN_TENCENT_MAP); } private static boolean isInstallPackage(String packageName) { return new File("/data/data/" + packageName).exists(); } /** * 百度转高德 * @param bd_lat * @param bd_lon * @return */ public static double[] bdToGaoDe(double bd_lat, double bd_lon) { double[] gd_lat_lon = new double[2]; double PI = 3.14159265358979324 * 3000.0 / 180.0; double x = bd_lon - 0.0065, y = bd_lat - 0.006; double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * PI); double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * PI); gd_lat_lon[0] = z * Math.cos(theta); gd_lat_lon[1] = z * Math.sin(theta); return gd_lat_lon; } /** * 高德、腾讯转百度 * @param gd_lon * @param gd_lat * @return */ private static double[] gaoDeToBaidu(double gd_lon, double gd_lat) { double[] bd_lat_lon = new double[2]; double PI = 3.14159265358979324 * 3000.0 / 180.0; double x = gd_lon, y = gd_lat; double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * PI); double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * PI); bd_lat_lon[0] = z * Math.cos(theta) + 0.0065; bd_lat_lon[1] = z * Math.sin(theta) + 0.006; return bd_lat_lon; } /** * 打开高德地图导航功能 * @param context * @param slat 起点纬度 * @param slon 起点经度 * @param sname 起点名称 可不填(0,0,null) * @param dlat 终点纬度 * @param dlon 终点经度 * @param dname 终点名称 必填 */ public static void openGaoDeNavi(Context context,double slat, double slon, String sname, double dlat, double dlon, String dname){ String uriString = null; StringBuilder builder = new StringBuilder("amapuri://route/plan?sourceApplication=maxuslife"); if (slat != 0) { builder.append("&sname=").append(sname) .append("&slat=").append(slat) .append("&slon=").append(slon); } builder.append("&dlat=").append(dlat) .append("&dlon=").append(dlon) .append("&dname=").append(dname) .append("&dev=0") .append("&t=0"); uriString = builder.toString(); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setPackage(PN_GAODE_MAP); intent.setData(Uri.parse(uriString)); context.startActivity(intent); } /** * 打开腾讯地图 * params 参考http://lbs.qq.com/uri_v1/guide-route.html * * @param context * @param slat 起点纬度 * @param slon 起点经度 * @param sname 起点名称 可不填(0,0,null) * @param dlat 终点纬度 * @param dlon 终点经度 * @param dname 终点名称 必填 * 驾车:type=drive,policy有以下取值 0:较快捷 1:无高速 2:距离 policy的取值缺省为0 * &from=" + dqAddress + "&fromcoord=" + dqLatitude + "," + dqLongitude + " */ public static void openTencentMap(Context context, double slat, double slon, String sname, double dlat, double dlon, String dname) { String uriString = null; StringBuilder builder = new StringBuilder("qqmap://map/routeplan?type=drive&policy=0&referer=zhongshuo"); if (slat != 0) { builder.append("&from=").append(sname) .append("&fromcoord=").append(slat) .append(",") .append(slon); } builder.append("&to=").append(dname) .append("&tocoord=").append(dlat) .append(",") .append(dlon); uriString = builder.toString(); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setPackage(PN_TENCENT_MAP); intent.setData(Uri.parse(uriString)); context.startActivity(intent); } /** * 打开百度地图导航功能(默认坐标点是高德地图,需要转换) * @param context * @param slat 起点纬度 * @param slon 起点经度 * @param sname 起点名称 可不填(0,0,null) * @param dlat 终点纬度 * @param dlon 终点经度 * @param dname 终点名称 必填 */ public static void openBaiDuNavi(Context context,double slat, double slon, String sname, double dlat, double dlon, String dname){ String uriString = null; //终点坐标转换 // 此方法需要百度地图的BaiduLBS_Android.jar包 // LatLng destination = new LatLng(dlat,dlon); // LatLng destinationLatLng = GCJ02ToBD09(destination); // dlat = destinationLatLng.latitude; // dlon = destinationLatLng.longitude; double destination[] = gaoDeToBaidu(dlat, dlon); dlat = destination[0]; dlon = destination[1]; StringBuilder builder = new StringBuilder("baidumap://map/direction?mode=driving&"); if (slat != 0){ //起点坐标转换 // LatLng origin = new LatLng(slat,slon); // LatLng originLatLng = GCJ02ToBD09(origin); // slat = originLatLng.latitude; // slon = originLatLng.longitude; double[] origin = gaoDeToBaidu(slat, slon); slat = origin[0]; slon = origin[1]; builder.append("origin=latlng:") .append(slat) .append(",") .append(slon) .append("|name:") .append(sname); } builder.append("&destination=latlng:") .append(dlat) .append(",") .append(dlon) .append("|name:") .append(dname); uriString = builder.toString(); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setPackage(PN_BAIDU_MAP); intent.setData(Uri.parse(uriString)); context.startActivity(intent); } }
跳转第三方地图软件的工具类,参考这位老哥写的MapUtil。
结束!芜湖~
-
电子地图标注软件 v6.4.zip
2019-07-11 03:09:088.支持添加地图标记,距离测量显示,地点名称显示。 9.支持保存您当前操作的文件,供日后打开再用,保证操作不会丢失。 10.支持全球地图操作预览。 11.支持添加自定义标识图标,用户可以更换图标。 电子地图... -
电子地图沙盘软件 v3.6官方版.zip
2019-07-03 20:40:155.支持添加地图标记,距离测量显示,地点名称显示。 6.支持在地图上所选择的标注能点击查看详细信息。 7.支持添加自定义标识图标,用户可以更换图标。 8.支持保存您当前操作的文件,供日后打开再用,保证操作不会... -
电脑离线地图软件 全国版 2.0.rar
2019-07-03 20:25:17电脑离线地图软件用户可以标注位置,可以...支持添加地图标记,距离测量显示,地点名称显示。 9.支持保存您当前操作的文件,供日后打开再用,保证操作不会丢失。 10.支持添加自定义标识图标,用户可以更换图标。 -
百度地图类库 添加标注工具
2022-04-29 20:11:19百度地图的添加标注工具类,对外开放。 允许用户在地图上点击后添加一个点标注,允许用户设定标注的图标样式。 主入口类是MarkerTool, 基于Baidu Map API 1.2。 -
地图标注软件
2014-03-03 09:48:25标注地图无需上网,脱机使用51ditu网全部功能,为了方便用户下载,地图数据与软件分开了,用户下载后软件自带全国概要图,如果需要下载城市内详细的地图,请打开“城市列表”,或者双击全国地图上的城市名称即可下载... -
地图标注工具
2017-02-12 23:09:27在谷歌地图,百度地图,高德地图上面标注信息 -
使用Python调用百度地图的API在地图上添加标记
2020-12-14 15:54:26博主的目的是在地图上做一些标记,然后保存为html网页文件,这样方便我的软件调用,前期我使用的folium包,这个包很强大,支持添加各种标记。但有几个缺点: 地图的底图不支持百度地图,博主想用这个包的话,就不得...写在前面
近期博主工作太忙,快一个月没更新博客。今天跑了大半天的腿,被一堆破事儿弄的无比憋屈,写篇博客调节一下心情。
博主的目的是在地图上做一些标记,然后保存为html网页文件,这样方便我的软件调用,前期我使用的folium包,这个包很强大,支持添加各种标记。但有几个缺点:- 地图的底图不支持百度地图,博主想用这个包的话,就不得不将数据点转到高德坐标系下,然后进行下一步工作,然而高德莫名其妙的封了我的账号,说我违规调取数据,简直莫须有;
- 间歇性的出现一些未知的问题,比如添加的标记不显示等等,可以理解,毕竟外国人写的,也还不是很成熟;
- 最要命的是地图加载太慢了,加载出来要接近一分钟。
想一想,既然数据点是百度坐标系下的,百度地图又提供了API,何不直接在百度地图上画呢。
好了,上编译环境。- Python3.7
- Spyder
功能实现
API地址
先上百度地图js API地址。
看看API示例:
语言是JavaScript,展示的界面是添加标记点,我把完整的示例代码贴出来,并解释一下:<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <title>添加点标记</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <style> body, html, #container { overflow: hidden; width: 100%; height: 100%; margin: 0; font-family: "微软雅黑"; } </style> <script src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=您的密钥"></script> </head> <body> <div id="container"></div> </body> </html> <script> var map = new BMapGL.Map('container'); map.centerAndZoom(new BMapGL.Point(116.404, 39.928), 15); map.enableScrollWheelZoom(true); // 创建点标记 var marker1 = new BMapGL.Marker(new BMapGL.Point(116.404, 39.925)); var marker2 = new BMapGL.Marker(new BMapGL.Point(116.404, 39.915)); var marker3 = new BMapGL.Marker(new BMapGL.Point(116.395, 39.935)); var marker4 = new BMapGL.Marker(new BMapGL.Point(116.415, 39.931)); // 在地图上添加点标记 map.addOverlay(marker1); map.addOverlay(marker2); map.addOverlay(marker3); map.addOverlay(marker4); </script>
虽然博主没搞过JavaScript,不过语言大体相通,能看明白写的是什么,前面是网页的基础设置,主体在script标签中,定义了四个点,然后将这四个点添加到地图上。
官方给的示例其实是有问题的,我填上了自己申请的AK,另存为html文件后却怎么也打不开,于是初略看了下代码,发现下面这行就是个坑:<script src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=您的密钥">
我稍微改了下,改成了:
<script src="https://api.map.baidu.com/api?type=webgl&v=1.0&ak=您的密钥">
就能显示了,不过显示还是不完整,猜测是可能缺少加载 BMapGL.Map方法的js包,所以不再纠结,于是在网上找了另外一段可以执行的代码,链接在这里。
这个代码也要加上https才行。有用的代码如下:<!DOCTYPE html> <html xmlns:asp=""> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <style type="text/css"> body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";} </style> <script type="text/javascript" src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=d5Y5C26Xbhr3rBHo3GzzaA7xcXev6NL0"></script> <title>添加信息窗口</title> </head> <body> <div id="allmap"></div> </body> <script> // An highlighted block //百度地图API功能 function loadJScript() { var script = document.createElement("script"); script.type = "text/javascript"; script.src = "//api.map.baidu.com/api?v=2.0&ak=d5Y5C26Xbhr3rBHo3GzzaA7xcXev6NL0&callback=init"; document.body.appendChild(script); } window.init = function() { var map = new BMap.Map("allmap"); // 创建Map实例 //var point = new BMap.Point(109.18592,34.36912); // 创建点坐标 map.centerAndZoom(new BMap.Point(109.19708,34.36820), 15); // 设置中心点,地图初始化 //map.centerAndZoom(points,20); map.setCurrentCity("西安"); //设置当前城市 map.clearOverlays(); map.addControl(new BMap.MapTypeControl()); map.enableScrollWheelZoom(true); //启用滚轮放大缩小 //向地图中添加缩放控件 var ctrlNav = new window.BMap.NavigationControl({ anchor: BMAP_ANCHOR_TOP_LEFT, type: BMAP_NAVIGATION_CONTROL_LARGE }); map.addControl(ctrlNav); //向地图中添加标记点 var myIcon =new BMap.Icon("http://api.map.baidu.com/img/markers.png", new BMap.Size(23, 25), { //小车图片 offset: new BMap.Size(0, -5), //相当于CSS精灵 imageOffset: new BMap.Size(0, 0) //图片的偏移量。为了是图片底部中心对准坐标点。 }); var points = [new BMap.Point(109.19474,34.36847),new BMap.Point(109.19435,34.37712),new BMap.Point(109.19261,34.37617),new BMap.Point(109.19701,34.37728),new BMap.Point(109.19702,34.37776),new BMap.Point(109.19784,34.37738),new BMap.Point(109.19784,34.376911),new BMap.Point(109.1987,34.37333),new BMap.Point(109.19705,34.36824),new BMap.Point(109.1836,34.37393)]; //10个坐标点 var marker1 =new BMap.Marker(points[1],{icon:myIcon}); // 创建10个标注 var marker2 =new BMap.Marker(points[2],{icon:myIcon}); var marker3 =new BMap.Marker(points[3],{icon:myIcon}); var marker4 =new BMap.Marker(points[4],{icon:myIcon}); var marker5 =new BMap.Marker(points[5],{icon:myIcon}); var marker6 =new BMap.Marker(points[6],{icon:myIcon}); var marker7 =new BMap.Marker(points[7],{icon:myIcon}); var marker8 =new BMap.Marker(points[8],{icon:myIcon}); var marker9 =new BMap.Marker(points[9],{icon:myIcon}); var marker0 =new BMap.Marker(points[0],{icon:myIcon}); map.addOverlay(marker1); // 将标注添加到地图中 map.addOverlay(marker2); map.addOverlay(marker3); map.addOverlay(marker4); map.addOverlay(marker5); map.addOverlay(marker6); map.addOverlay(marker7); map.addOverlay(marker8); map.addOverlay(marker9); map.addOverlay(marker0); map.setViewport(points); //调整地图的最佳视野为显示标注数组point loadJScript() </script> <script> layui.use('theme/settings/earth', layui.factory('theme/settings/earth')); </script> <!--<script type="text/javascript" src="js\jquery-2.1.1.min.js"></script>--> </html>
Python实现
好了,网页代码有了,可是博主并不会写html,只会简单的写写Python,如何把上面的代码合理的利用起来,并且将里面的变量改变成自己的点呢?
博主的思路很简单,将上面这些代码分成几个部分的字符串,然后字符串拼接起来,最后形成一个完整的html网页代码。
如果大家有仔细看上面的代码,会发现网页框架可以分成五部分:
第一部分代码:<!DOCTYPE html> <html xmlns:asp=""> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <style type="text/css"> body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";} </style> <script type="text/javascript" src="https://api.map.baidu.com/api?type=webgl&v=1.0&ak=9Rz4tOb6PgQtqBt6K3YbSMBESLk8iYpE"></script> <title>添加信息窗口</title> </head> <body> <div id="allmap"></div> </body> <script> // An highlighted block //百度地图API功能 function loadJScript() { var script = document.createElement("script"); script.type = "text/javascript"; script.src = "https://api.map.baidu.com/api?v=2.0&ak=9Rz4tOb6PgQtqBt6K3YbSMBESLk8iYpE&callback=init"; document.body.appendChild(script); } window.init = function() { var map = new BMap.Map("allmap"); // 创建Map实例 //var point = new BMap.Point(109.18592,34.36912); // 创建点坐标 map.centerAndZoom(new BMap.Point(120.2338341,31.58109976), 15); // 设置中心点,地图初始化 //map.centerAndZoom(points,20); map.setCurrentCity("无锡"); //设置当前城市 map.clearOverlays(); map.addControl(new BMap.MapTypeControl()); map.enableScrollWheelZoom(true); //启用滚轮放大缩小 map.addEventListener('click', function(e) { alert('点击的经纬度:' + e.latlng.lng + ', ' + e.latlng.lat); var mercator = map.lnglatToMercator(e.latlng.lng, e.latlng.lat); alert('点的墨卡托坐标:' + mercator[0] + ', ' + mercator[1]); }); //向地图中添加缩放控件 var ctrlNav = new window.BMap.NavigationControl({ anchor: BMAP_ANCHOR_TOP_LEFT, type: BMAP_NAVIGATION_CONTROL_LARGE }); map.addControl(ctrlNav); //向地图中添加标记点 var myIcon =new BMap.Icon("http://api.map.baidu.com/img/markers.png", new BMap.Size(23, 25), { //小车图片 offset: new BMap.Size(0, -5), //相当于CSS精灵 imageOffset: new BMap.Size(0, 0) //图片的偏移量。为了是图片底部中心对准坐标点。 });
这部分代码是基本不会变化的,改动无非就是那两个经纬度坐标和城市名。
再看第二部分:var points = [new BMap.Point(109.19474,34.36847),new BMap.Point(109.19435,34.37712),new BMap.Point(109.19261,34.37617),new BMap.Point(109.19701,34.37728),new BMap.Point(109.19702,34.37776),new BMap.Point(109.19784,34.37738),new BMap.Point(109.19784,34.376911),new BMap.Point(109.1987,34.37333),new BMap.Point(109.19705,34.36824),new BMap.Point(109.1836,34.37393)]; //10个坐标点
这部分是定义的数据点,就是说如果要更换数据点,应该在这里改。
第三部分:var marker1 =new BMap.Marker(points[1],{icon:myIcon}); // 创建10个标注 var marker2 =new BMap.Marker(points[2],{icon:myIcon}); var marker3 =new BMap.Marker(points[3],{icon:myIcon}); var marker4 =new BMap.Marker(points[4],{icon:myIcon}); var marker5 =new BMap.Marker(points[5],{icon:myIcon}); var marker6 =new BMap.Marker(points[6],{icon:myIcon}); var marker7 =new BMap.Marker(points[7],{icon:myIcon}); var marker8 =new BMap.Marker(points[8],{icon:myIcon}); var marker9 =new BMap.Marker(points[9],{icon:myIcon}); var marker0 =new BMap.Marker(points[0],{icon:myIcon});
第三部分是在为点添加标记,也是根据点来的,有多少点就写多少行。
第四部分:map.addOverlay(marker1); // 将标注添加到地图中 map.addOverlay(marker2); map.addOverlay(marker3); map.addOverlay(marker4); map.addOverlay(marker5); map.addOverlay(marker6); map.addOverlay(marker7); map.addOverlay(marker8); map.addOverlay(marker9); map.addOverlay(marker0);
第四部分是把标记点添加到map图层上去,也是根据自己的数据来的。
第五部分:loadJScript() </script> <script> layui.use('theme/settings/earth', layui.factory('theme/settings/earth')); </script> <!--<script type="text/javascript" src="js\jquery-2.1.1.min.js"></script>--> </html>
这部分也不需要动。
既然代码已经分解清楚了,用Python来把这些代码串起来就很简单了,看看怎么实现的吧:#!/usr/bin/env python #-*- coding:utf-8 -*- # author:HP # datetime:2020/12/11 16:47 import pandas as pd data = pd.read_csv('数据.txt', sep='\t') def get_html(YearData): var_point = [] var_marker = [] addOverlay = [] for i in range(len(YearData)): point = 'new BMap.Point(' + str(YearData.loc[i, 'lon_baidumap']) + ',' + str(YearData.loc[i, 'lat_baidumap']) + ')' marker = 'var marker' + str(i) + '=new BMap.Marker(points[' + str(i) + '],{icon:myIcon});' overlay = 'map.addOverlay(marker' + str(i) + ');' var_point.append(point) var_marker.append(marker) addOverlay.append(overlay) points = ','.join(var_point) markers = '\n '.join(var_marker) overlays = '\n '.join(addOverlay) message1 = ''' <!DOCTYPE html> <html xmlns:asp=""> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <style type="text/css"> body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";} </style> <script type="text/javascript" src="https://api.map.baidu.com/api?type=webgl&v=1.0&ak=9Rz4tOb6PgQtqBt6K3YbSMBESLk8iYpE"></script> <title>添加信息窗口</title> </head> <body> <div id="allmap"></div> </body> <script> // An highlighted block //百度地图API功能 function loadJScript() { var script = document.createElement("script"); script.type = "text/javascript"; script.src = "https://api.map.baidu.com/api?v=2.0&ak=9Rz4tOb6PgQtqBt6K3YbSMBESLk8iYpE&callback=init"; document.body.appendChild(script); } window.init = function() { var map = new BMap.Map("allmap"); // 创建Map实例 //var point = new BMap.Point(109.18592,34.36912); // 创建点坐标 map.centerAndZoom(new BMap.Point(120.2338341,31.58109976), 15); // 设置中心点,地图初始化 //map.centerAndZoom(points,20); map.setCurrentCity("无锡"); //设置当前城市 map.clearOverlays(); map.addControl(new BMap.MapTypeControl()); map.enableScrollWheelZoom(true); //启用滚轮放大缩小 map.addEventListener('click', function(e) { alert('点击的经纬度:' + e.latlng.lng + ', ' + e.latlng.lat); var mercator = map.lnglatToMercator(e.latlng.lng, e.latlng.lat); alert('点的墨卡托坐标:' + mercator[0] + ', ' + mercator[1]); }); //向地图中添加缩放控件 var ctrlNav = new window.BMap.NavigationControl({ anchor: BMAP_ANCHOR_TOP_LEFT, type: BMAP_NAVIGATION_CONTROL_LARGE }); map.addControl(ctrlNav); //向地图中添加标记点 var myIcon =new BMap.Icon("http://api.map.baidu.com/img/markers.png", new BMap.Size(23, 25), { //小车图片 offset: new BMap.Size(0, -5), //相当于CSS精灵 imageOffset: new BMap.Size(0, 0) //图片的偏移量。为了是图片底部中心对准坐标点。 }); ''' message2 = points message3 = markers message4 = overlays message5 = ''' //map.setViewport(points); //调整地图的最佳视野为显示标注数组point } loadJScript() </script> <script> layui.use('theme/settings/earth', layui.factory('theme/settings/earth')); </script> <!--<script type="text/javascript" src="js\jquery-2.1.1.min.js"></script>--> </html> ''' message = message1 + '\n' + ' var points = [' + message2 + '];' + '\n ' + message3 + '\n ' + message4 + '\n' + message5 return message for i in range(2011, 2020): yeardata = data[data.nian == i].reset_index(drop=True) message = get_html(yeardata) filename = 'qroad' + str(i) + '.html' with open(filename, 'w', encoding="utf-8")as f: f.write(message) f.close()
还是简单解释一下代码吧:
前面是数据导入,数据就是我的百度地图坐标系下的经纬度坐标点。
然后是写方法,主要就是循环把点生成字符串,然后五部分加起来。
最后调用方法,生成html文件。
这样下来,文件可以秒开,给大家看下。
这样就算完成了,当然除了添加标记点,也还可以添加其他内容。
最后鼓励一下自己:
保持进步,保持好心情~~ -
敢问路在何方?四款手机地图软件横向测评!
2021-07-28 04:56:03四款手机地图软件横向测评!从爱斯基摩人绘制的海港图到今天的卫星地图,从哥伦布勇闯新大陆的粗糙航海图到今天人们出门精确到米的手机地图,几千年来地图伴随着人类文明进步发生了天翻地覆的变化。▲ 航海图 二十年...原标题:敢问路在何方?四款手机地图软件横向测评!
从爱斯基摩人绘制的海港图到今天的卫星地图,从哥伦布勇闯新大陆的粗糙航海图到今天人们出门精确到米的手机地图,几千年来地图伴随着人类文明进步发生了天翻地覆的变化。
▲ 航海图
二十年前出门在外,纸质地图还是必备的物品,旅游景点里随处可见旅游图、路线图,游客们在地图上摸索前进路线。跑运输的卡车司机、户外探险徒步、地质勘探人员,这些人都会用到纸质地图,在一张张地图指引下走南闯北、勘探探险。
到如今,随着当今时代快速进步,道路交通网络隔几个月就会更新一次,手机地图导航早已取代纸质地图,成为人们出门首选。应用商城里手机地图导航软件很多,基本定位、导航、公交查询功能大同小异,但在细节体验方面差距不小,哪款地图软件路线靠谱,哪款地图能够功能最齐全,渐渐成为茶余饭后闲聊的话题。
▲ 手机地图导航取代纸质地图
口头上争个高低没有意义,亲自试试才是硬道理。从知名度、使用人数等角度考量,高德地图、百度地图、腾讯地图以及苹果地图使用率较高,所以今天小黑就来实际测评一下这四款主流手机地图APP ,从 多个角度综合对比分析。
UI界面对比
苹果自带地图UI设计简简单单,页面主体显示用户所在区域地图,正下方为搜索栏,输入信息可以查找地名或地址,右下角显示所在区域气温,除此之外别无他物。点击搜索栏,还可以选择搜索附近“加油站、美食、购物、咖啡厅”等......
▲ 苹果地图UI界面
高德地图主体界面与苹果地图类似,都是以用户所在区域周围的地图,道路、小区、学校、交通枢纽标记一清二楚。搜索栏也在正下方,不过高德地图功能丰富许多,可以选择驾车、公交地铁、实时公交、打车等多种形式;附近一栏中亦可搜索美食、酒店等上百项品类,其中美食就分为快餐、火锅、茶餐厅等十几项。主界面右上角,点击“层叠”状按钮,还能调整公交地图与卫星地图以及充电站地图、地震地图等额外附加功能。
▲ 高德地图UI界面
再看百度地图,它的UI设计完全不同,搜索栏在正上方,正下方是路线、出行助手与发现周边。主要功能上跟高德地图大同小异,只不过细节多有不同。比如地图类型多了3D俯视图与全景地图,生活便民地图上多了内部全景地图,点开地图上部分酒店、餐厅,可以直接欣赏内部全景。
▲ 百度地图UI界面
腾讯地图的UI设计更像百度地图,无论是正上方的搜索栏与右侧边图层、路况、事实公交,几乎与百度地图如出一辙。在特色地图中,街景、3D俯瞰图与卫星图都有配备,额外还多了景区地图与积水地图。或许最近南方暴雨,多处发生洪涝灾害,腾讯临时新增积水地图,以便车辆行人及时避开。
▲ 腾讯地图UI界面
单比UI界面设计,百度地图功能最全,便民化措施较多,苹果地图功能最简单,除了2D平面地图之外,几乎没什么特别之处。日常使用起来,小黑觉得苹果地图适合极简主义者,稍稍有些额外需求的用户,都会选择百度、高德或者腾讯地图。此外,如果出门之前就想做足攻略,了解各地道路信息,百度地图与腾讯的街景地图特别适用。稍稍令小黑感到意外的是,号称国内用户量最多的高德地图并没有街景地图,这一点颇为遗憾。
路况导航及信号能力测试
小黑身边,地图导航用的最频繁的莫过于有车一族。对于驾驶员来说,导航功能或多或少都会用到。驾驶员开车在路上,最关心的就是路况导航与导航信号稳定性。于是小黑来到上海西站地铁站,在手机信号弱的地下,测试信号能力与路况导航。
首先测试的依旧是苹果地图。本以为功能简单的苹果地图,导航反应时间肯定不慢。谁知道,当小黑输入“人民广场”之后,页面卡住不动,正在载入的提示整整转动了五分多钟,才显示出路况信息。给出的路线有三条,拥挤路段以红色线条表示,最快路线需要37分钟。驾驶偏好只有避开高速公路与收费站两个选项,整体上来看,苹果地图还是与之前一样,过于简单。
▲ 苹果地图显示路况
比起苹果地图,高德地图简直反应神速,虽然右上方一直显示信号弱,但依旧可以秒开页面,立马显示出导航路线。路况显示清晰,路线精确,导航设置里还可以选择躲避拥挤、大路优先、速度最快等设置。小黑选择躲避拥挤后,成功找到交通路—南北高架路的路线,一路过去只要29分钟。
此外,高德地图还有一个独特的优势——导航语音包。在导航设置里可以选择林志玲、李佳琦、郭德纲等人的特色语音包。小黑作为高德地图用户,经常在各种语音包中切换,时而在志玲姐姐悦耳动听的指令下行驶,时而在郭老师诙谐幽默的语气下行驶。伴随着风格各异的导航语音包,枯燥的驾驶时间也变得有趣起来。
▲ 高德地图实时导航
百度地图路况导航路线偏好可选项比高德地图少一点,不过多一个智能推荐,能够记住车主的驾驶习惯,比如走小路避堵,绕路必读等等。小黑身边的朋友Y君喜欢用百度地图,据他所言百度地图用起来比较方便,比如他每天开车上班,走同样的路线,偶尔会抄小路,每当前方有拥堵的时候,百度地图会自行切换路线。
最后看一下腾讯地图,路况信息、路线显示、剩余里程等方面腾讯地图应有尽有,导航路线接近高德地图。打开速度、实时路况显示与高德、百度两大地图区别不大,导航语音上也有安琪拉、貂蝉等游戏人物可选,与前面三个地图都不一样,腾讯地图可以切换小地图与光柱地图,导航语音可以切换。
总体来看,苹果地图差距明显,其他三大地图各有特色,其中高德地图定位与路线推荐稍好一些,在同等条件下高德地图推荐的路线更加快捷迅速。百度地图主打智能推荐,随着用户使用时间的增长,使用起来会越发得心应手。
公交地铁路线规划
除了有车一族,更多上班族还是靠双脚与公共交通工具出行,因此地图的测试自然少不了地铁公交。小黑与同事A君一起从上海西站出发,前往人民广场,四大地图APP给出的路线各有不同。苹果地图优先推荐公交方案,时间与地铁差不多,步行路程还短。只是小黑点开后才发现,苹果地图定位位置并不准,路线出发位置已经偏离上海西站。在地铁方案上居然显示需要花12分钟走到地铁站,而此时小黑明明坐在站内。
▲ 苹果地图与百度地图方案
百度地图与苹果地图类似,优先推荐公交方案,其次是11号线转10号线再转8号线。在小黑印象中,这套方案有点绕路,对比高德地图优先推荐的11号线转2号线方案,站数多不说还要多换乘一次。最后一个腾讯地图与高德地图一样,也是优先推荐11号线转2号线方案,虽然不行多了300米,但是整体花费时间与换乘次数都少一点。
▲ 高德地图与腾讯地图搜索结果
在路线推荐中,四大APP均有显示所经站数与时间,其中高德地图还显示出地铁拥挤程度。比如11号线显示较舒适,2号线显示人数非常拥挤。在小黑实际乘车体验中,发现事实果真如此。在江苏路换乘后,明显发现2号线车厢人数多于11号线。
▲ 高德地图显示出地铁拥挤程度
当然,这里小黑还想吐槽一下,小黑乘坐地铁时常常戴着耳机,听不到列车员报站声。打开地图查看位置,总是会有延迟。此次小黑对地铁实时位置也做了对比测试,结果大失所望。四大APP中没有一个及时更新位置,当小黑坐着地铁达到隆德路时,地图中的位置还显示为上海西站。
好在小黑注意到有下车提醒功能,于是在返程路上,小黑依次打开高德地图、百度地图与腾讯地图下车导航功能。至于苹果地图,毫无疑问又是没有这功能。在实际测试中,高德地图率先提醒,其后腾讯地图、百度地图依次提醒,总算在到站之前叫醒了沉迷于音乐中的小黑。
地图数据库测试
小黑人在上海,无法测试全国各地路况。而一款手机地图软件好不好用,地图数据库与资料完全度至关重要。所以小黑决定通过搜索充电桩与偏僻的位置来进行数据质量测试。苹果地图出现意外,显示的充电站并不是小黑所在地附近的,直接跑到黄浦江边去了。腾讯地图发挥正常,周边的充电桩都有显示,而且直接在地图上显示充电桩基本信息。
▲ 苹果地图与腾讯地图充电桩搜索结果
百度地图不愧为便民专用,专业的充电桩地图。不仅充电桩数量多了几倍,还根据国家电网、星星充电、特来电等品牌分成不同类别,充电桩电量是否充足、智能找桩、扫码充电等附加功能。最后高德地图表现也相当不错,虽然数量比不上百度,但是快充慢充,充电桩总数量与可充数量标记清楚,非常适合新能源车主。
▲ 百度地图与高德地图充电桩搜索结果
充电桩只能体现地图软件在城市里的数据量,于是小黑决定搜一下远在边界的黑瞎子岛。结果显示高德地图信息最全,除了黑瞎子岛镇位置,还有基本道路图。采用高德地图资源的苹果地图以与百度地图表现稍差,可以显示出基本信息,而腾讯地图发挥最差,除了孤零零的黑瞎子岛国家森林公园,连条路都没有。
▲ 高德地图与采用高德地图资源的苹果地图
▲ 腾讯地图与百度地图
俗话说“实践出真知”,从以上对比可以发现,高德地图还是精度最高、数据最全的地图APP;百度地图在街景地图、实景地图、充电桩地图等便民功能上优势不小;腾讯地图平平无奇,该有的功能基本都有,突出的地方并不亮眼;而苹果地图差距明显,可以看出苹果在地图APP上并未花心思,仅仅拿到高德地图的数据后,稍稍改动,功能上只能说够用,拓展附加功能几乎为零。返回搜狐,查看更多
责任编辑:
-
全能电子地图下载器 1.9.5 中文绿色免费版.zip
2021-05-11 20:36:1312. 支持地图标记,可更换图标和导出为KMZ格式。 13. 支持任务的断点续传,智能补全下载。 14. 支持HTTP代理下载。 15. 提供测量距离、测量面积、火星坐标和地球坐标互转等实用功。 16. 支持GPS导航功能,支持NMEA-... -
百度地图api途径标记的问题,请大神指导
2018-12-11 01:54:14多点轨迹连线后,点击左侧中间某个坐标,比如说点击软件路,右侧地图上软件路坐标凸显,求大神指导怎么写,感谢  -
uni-app(微信小程序)中“腾讯地图”和swiper联动效果,点击移动到标记点并显示详情及导航
2022-04-05 14:53:49uni-app(微信小程序)中“腾讯地图”和swiper联动效果,点击移动到标记点并显示详情及导航 -
QGIS二次开发地图添加标记添加注记Svg小图标SvgItem
2021-09-18 14:15:21QGIS二次开发地图添加标记注记Svg图标 即QgsAnnotationLayer、QgsMarkerSymbol和QgsAnnotationMarkerItem的用法,我把QGIS3.20软件切换成英文才看到注记这个词英文叫Annotation,然后再API手册里一个一个尝试出来的... -
使用AJAX技术调用百度地图API进行经纬度标注和实时显示
2016-12-12 10:28:38用户通过网页登录的方式在客户端软件上进行登录系统,在登录完成后会根据用户权限的不同进行匹配该权限下所对应监控的车辆,在网页界面上显示这些车辆的各类数据信息,同时调用百度地图在网页上实时跟踪经纬度坐标... -
matlab绘制世界地图和经纬度的标记
2021-08-21 19:13:02%构建世界地图 setm(ax,'parallelLabel','off');%去除纬度 setm(ax,'MeridianLabel','off');%去除经度 setm(ax,'Origin',[0 0]);%确定世界地图的中心 land=shaperead('landareas.shp','UseGeoCoords',true); geoshow... -
here:该应用程序的名称已更改,现在名为LoveMarker的应用程序用于在地图上共享和标记您的性行为
2021-05-14 14:06:36LoveMarker LoveMarker是一个实时地图应用程序,用户可以共享情侣的感觉和在地图上标记,并满足好奇的人的需求。 电影Amelie的想法 这里有一些截图。 -
Python:通过folium把全国各城市房产价格等地理信息绘制标记于地图
2020-12-06 23:02:48把数据清洗后,最重要的是经纬度,有了经纬度,就可以通过folium把房产信息标记、绘制在地图上。以下是python代码实现: import webbrowser as wb import pandas as pd import folium # 根据传入的各个经纬度绘制... -
JS自定义地图标注
2017-12-31 16:45:58今天再来讲讲怎么在自定义地图(也不一定是地图)上做标记,比如像一人员定位系统之类的软件,就需要用到类似的功能,不过以前大多都是在桌面软件上实现,今天我在这里演示如何在web平台实本功能,首先我们需要用到... -
四叉树算法:iOS地图点标记聚合方案
2017-11-23 13:16:59在地图相关应用的开发中,我们常常遇到一个问题,当地图标注点过多的时候,会造成用户体验差、应用卡顿的情况。所以,我们需要一套高效的算法来解决标注的聚合、分散的逻辑。 先上代码: 算法思想不局限于平台... -
电子地图标注软件
2013-03-12 17:28:47在添加地图标记,距离测量显示,地点名称显示。 6.地图上所选择的管道,部件等能点击查看详细信息。 7.谷歌在线(离线)混合地图,在软件界面上可以选择切换; 8.名称查询定位,可以输入地点名称后定位到所... -
一页代码实现高德地图显示自己定位,以及Marker标记点显示
2018-06-20 17:53:22//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),实现地图生命周期管理 mMapView.onSaveInstanceState(outState); } @Override public void onClick(View v) { } @Override ... -
iOS 高德地图(五)绘制点标记
2016-10-26 16:37:52(一)添加默认样式点标记 iOS SDK提供的大头针标注MAPinAnnotationView,通过它可以设置大头针颜色、是否显示动画、是否支持长按后拖拽大头针改变坐标等。 ** **这里用到的类是 MAPinAnnotationView 让我们对它... -
mapjfx:使用OpenLayers和JavaFX的地图的JavaFX实现
2021-05-17 01:54:10mapjfx提供了一个包含地图的JavaFX区域,允许缩放,平移和使用标记。 它使用作为地图技术。 有关该项目的更多信息。 是否要支持mapjfx? 通过贝宝捐款 执照 版权所有2014-2021 Peter-Josef Meisch( ) 根据... -
0成本信息差项目:地图标注该如何做?
2020-08-01 21:20:41我们分析项目时,千万不要局限于线上,线下,其实很多时候线上和线下是...地图标注,是将商家或企业的线下地址信息标注到互联网电子地图、手机电子地图或导航地图中,这样用户在当地的电子地图上就可以看到商家的店铺信 -
全能电子地图
2017-09-18 10:45:3712、支持地图标记,可更换图标和导出为KMZ格式。 13、支持任务的断点续传,智能补全下载。 14、支持HTTP代理下载。 15、提供测量距离、测量面积、火星坐标和地球坐标互转等实用功。 16、支持GPS导航功能,... -
全能地图下载器,亲测可用
2019-04-24 09:21:40全能电子地图下载器是一款集多种在线地图浏览、搜索、下载、标记、定位、拼接等功能为一身的地理信息管理软件,旨在辅助用户提高工作效率,轻松构建自己的地图应用。可应用于学术科研、工程、规划、设计等工作,在... -
地图四色着色——C#程序和可视化界面和实验报告
2019-02-27 20:27:08本资源为博主课程作业,与大家共享。解压后分为实验报告和软件包。...打开软件文件夹后,点击“paint001.exe”可以直接运行可视化界面,实现地图着色模拟展示。里面有程序,也有四色着色核心算法,大家可以自行参考。 -
MarkerMapper:使用平面方形标记的经济高效的定位系统-开源
2021-06-01 11:27:27该项目允许创建基于方形... 生成的地图可由 ArUCO 库用于定位您的相机。 该库依赖 Aruco 进行标记检测:http://www.uco.es/investiga/grupos/ava/node/26 它还依赖于 OpenCv 和 eigen3(后者包含在 3rdparty 目录中)。