精华内容
下载资源
问答
  • 博主的目的是地图上做一些标记,然后保存为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文件。
    这样下来,文件可以秒开,给大家看下。
    在这里插入图片描述
    这样就算完成了,当然除了添加标记点,也还可以添加其他内容。
    最后鼓励一下自己:
    保持进步,保持好心情~~

    展开全文
  • 用C#写了一个工程,已经实现了点击地图的结点按钮后,计算出结点间最短路径。现在要加一个功能,希望能地图,这里的地图就是一张图片,能显示计算出的最短路径,类似那些地图软件标记的路径。怎样实现??
  • 最近闲没事干,发现滴滴出行app,地图上的小汽车可以跑,很炫是不是,我们公司也是车辆监控app,我就一直揣摩着怎么也让我们小汽车地图跑来跑去啊,这样给人感觉好点,废话不说了,先看下滴滴出行...

    最近闲的没事干,发现滴滴出行的app,地图上的小汽车可以跑,很炫是不是,我们公司也是做车辆监控的app的,我就一直揣摩着怎么也让我们的小汽车在地图上跑来跑去啊,这样给人感觉好点,废话不说了,先看下滴滴出行的界面;
    这里写图片描述

    1.我们的gps数据是车辆10秒上报一次位置数据;前端请求数据获取当前最新的gps位置;
    2.第一次请求到数据后我把所有的车辆先标记到地图上,高德地图有标记方法;
    3.标记到地图上以后,需要把marker存放到list记录下来(为了更新移动使用);
    4.当再次请求道新的gps数据的时候,我们需要平滑的移动到最新的位置,关键问题是再这里;怎么样在才能平滑移动呢,无非就是需要不断的移动从当前位置到最新的位置,这里就当时从A点移动到B点,无非就是marker.setPosition(),不断的调用知道B点,

    List<Marker> markersMap = new ArrayList(Marker);//存放地图上标记marker
    private void addMarkToMap(List<MarkerCarOptions> markerCarOptions){
    
                if(markersMap.size()!=0){
                //markersMap不为空,说明是更新marker
                for (Marker marker : markersMap) {
                    for (MarkerCarOptions options : markerCarOptions) {
                        if(marker.getObject().equals(options.car.getBusid())){
                            moverCar(marker, options);
                            break;
                        }
                    }
                }
    }
        /**
         * 更新地图车辆位置
         * @param markerCarOptions
         */
    private void moverCar(final Marker marker,final MarkerCarOptions options){
    
            //1,获取到起点到终点的点,默认绘制4个点,最后一个为终点
            final List<LatLng> roads = new ArrayList<LatLng>();
            LatLng startLatLng = marker.getPosition();//小车当前位置
            LatLng endLatLng = options.markerOptions.getPosition();//终点位置
    
            LatLng latLng_2 = new LatLng((startLatLng.latitude+endLatLng.latitude)/2, (startLatLng.longitude+endLatLng.longitude)/2);
            LatLng latLng_1 = new LatLng((startLatLng.latitude+latLng_2.latitude)/2, (startLatLng.longitude+latLng_2.longitude)/2);
            LatLng latLng_3 = new LatLng((latLng_2.latitude+endLatLng.latitude)/2, (latLng_2.longitude+endLatLng.longitude)/2);
    
            roads.add(latLng_1);
            roads.add(latLng_2);
            roads.add(latLng_3);
            roads.add(endLatLng);
            Thread t =new Thread(new Runnable() {
    
                @Override
                public void run() {
                    // TODO Auto-generated method stub
    
                    try {
    
                        for (int i = 0; i < roads.size(); i++) {
                            marker.setPosition(roads.get(i));
                            Thread.sleep(200);
                        }
                        marker.setIcon(options.markerOptions.getIcon());
    
                    } catch (Exception e) {
                        // TODO: handle exception
                        e.printStackTrace();
                    }
                }
            });
            t.start();
        }

    5,最后需要说明的是,大家问平均获取的中间点这样获取到底对不对,我告诉你确切的说是不准确的,但是在10秒每次上报的数据之间来这样算是没错的;具体大家可以测下下就知道了,稍后再上了例子好了

    展开全文
  • 你见过“联想”机器联想公司赠送的“我的...这种效果的实质是把一幅图片划分为不同的作用区域,再让不同的区域链接到不同事情的软件上去,HTML中也有一个具有把图片划分成多个作用区域,并链接到不同网页的标...
            你见过“联想”机器上联想公司赠送的“我的办公室”软件的界面吗?在那幅办公室的图片上用鼠标点一下办公桌上的键盘,就启动一个“五笔字型”打字练习软件,点一下办公桌上的记事本就打开一个记事本软件,如此等等,即形象又方便。这种效果的实质是把一幅图片划分为不同的作用区域,再让不同的区域链接到做不同事情的软件上去,在HTML中也有一个具有把图片划分成多个作用区域,并链接到不同网页的标记,那就是 <area>地图作用区域标记
      <area>标记主要用于图像地图,通过该标记可以在图像地图中设定作用区域(又称为热点),这样当用户的鼠标移到指定的作用区域点击时,会自动链接到预先设定好的页面。其基本语法结构如下:
    <area
    class=type
    id=Value
    href=url
    alt=text
    shape=area-shape
    coods=value>
      
    其中:
    class和id:是分别指定热点的类型和id号。

    alt:用于设定热点的替代性文字。

    href:用于设定该热点所链接的url地址。

    shape和coords:是两个主要的参数,用于设定热点的形状和大小。其基本用法如下:

    <area shape="rect" coords="x1, y1,x2,y2" href=url>表示设定热点的形状为矩形,左上角顶点坐标为(X1,y1),右下角顶点坐标为(X2,y2)。

    <area shape="circle" coords="x1, y1,r" href=url>表示设定热点的形状为圆形,圆心坐标为(X1,y1),半径为r。

    <area shape="poligon" coords="x1, y1,x2,y2 ......" href=url>表示设定热点的形状为多边形,各顶点坐标依次为(X1,y1)、(X2,y2)、(x3,y3) ......。

      <area>标记是在图像地图中划分作用区域的,因此其划分的作用区域必须在图像地图的区域内,所以在用 <area> 标记划分区域前必须用HTML的另一个标记<map>设定图像地图的作用区域,并为指定的图像地图设定名称,该标记的用法很简单,即<map name="图像地图名称"> ...... </map>
      下面通过一个例子来说明这两个标记的用法:

    h05-1.gif
      这里是一幅新书架的图片,要做的效果是:当鼠标点“网址大全”这本书时,新开一窗口,显示关于这本书的简介及订单的网页(urlall.htm);当鼠标点“网站设计攻略”这本书时,新开一窗口,显示关于这本书的简介及订单的网页(siteall.htm);当鼠标点“网页技巧大全”这本书时,新开一窗口,显示关于这本书的简介及订单的网页(pagejqlall.htm)。

    制作方法:
      1、插入图片,并设置好图像的有关参数,且在<img>标记中设置参数usemap="newbook" ismap,以表示对图像地图(newbook)的引用;
      2、用<map>标记设定图像地图的作用区域,并取名为:newbook;
      3、分别用<area>标记针对三本书的位置划分出三个矩形作用区域,并设定好其链接参数href。
      制作完成,本例的源代码如下:
    <img src="image/htmlp3.gif" width="207" height="148" alt="新书架" hspace="10" align="left" usemap="#newbook" border="0">
    <map name="newbook">
    <area shape="rect" coords="56,69,78,139" href="urlall.htm" target="_blank" alt="这里收集十万多个网址。" title="这里收集十万多个网址。">
    <area shape="rect" coords="82,70,103,136" href="siteall.htm" target="_blank" alt="网站设计师的启蒙读本。" title="网站设计师的启蒙读本。">
    <area shape="rect" coords="106,68,128,136" href="pageall.htm" target="_blank" alt="网页制作者不可不读的书。" title="网页制作者不可不读的书。">
    </map>

      在制作本文介绍的效果时应注意的几点:
      1、在<img>标记不要忘记设置usemap、ismap参数,且usemap的参数值必须与<map>标记中的name参数值相同,也就是说,“图像地图名称”要一致;
      2、同一“图像地图”中的所有热点区域都要在图像地图的范围内,即所有<area>标记均要在<map>与</map>之间;
      3、在<area>标记中的 cords 参数设定的坐标格式要与shape参数设定的作用区域形状配套,避免出现在shape参数设置的矩形作用区域,而在cords 中设置的却是多边形区域顶点坐标的现象出现。

    原文出处:http://tech.china.com/zh_cn/netschool/homepage/html/599/20010205/02_05.html

    转载于:https://www.cnblogs.com/xiaolin/archive/2006/12/27/605394.html

    展开全文
  • OpenCV里用drawMarker画标记符号

    千次阅读 2019-12-26 11:44:18
    人工智能的例子里,经常会一些报告,而报告时需要把图上的细节地方标记出来,画图的软件里,可以使用软件定义的图标来标记。如果OpenCV里动态演示的例子,就用不上画图软件的功能了,这时就需要使用OpenCV...

    在人工智能的例子里,经常会做一些报告,而报告时需要把图上的细节地方标记出来,在画图的软件里,可以使用软件定义的图标来标记。如果在OpenCV里动态演示的例子,就用不上画图软件的功能了,这时就需要使用OpenCV提供的标记功能,它就是由函数drawMarker提供的,它主要提供了下面类型的图案:

     

    从上图可以看到提供了七种标记的图案,具体需要使用哪一个图案,就看自己的需要了。那么怎么样来绘出这样的图案呢?需要明白函数drawMarker的定义,然后才能调用它来画出不同的图案:

    第一个参数,img,待绘制标记的图像;

     

    第二个参数,position,绘制的中心坐标

     

    第三个参数,color,绘制标记的颜色;

     

    第四个参数,markerType = MARKER_CROSS,绘制标记;

     

    第五个参数,markerSize = 20,绘制标记的大小;

     

    第六个参数,thickness = 1,线段的粗细;

     

    第七个参数,line_type = 8,线段的类型;

     

    线的类型:

    FILLED,填充;

    LINE_4,4连通的线条;

    LINE_8 ,8连通的线条;

    LINE_AA ,抗锯齿线条;

     

    目前markerType支持几种标记类型:

    (1) MARKER_CROSS,十字标记形状;

    (2) MARKER_TILTED_CROSS,一个45度倾斜的十字标记形状;

    (3) MARKER_STAR,星标形状,交叉和倾斜交叉的组合;

    (4) MARKER_DIAMOND,钻石标记形状;

    (5) MARKER_SQUARE,方形标志形状;

    (6) MARKER_TRIANGLE_UP,一个向上指向的三角形标记形状;

    (7) MARKER_TRIANGLE_DOWN,向下指向三角形标志形状;

    下面用代码来演示画出不同的图标的功能,首先来看正十字的图标:

     

    cv2.drawMarker(img, (100,100), (255,255,255))

    这行代码是在坐标(100,100)处,用白色画十字标记形状,如下图:

     

    cv2.drawMarker(img, (100,130), (255,255,255), markerType=cv2.MARKER_TILTED_CROSS)

    这行代码是在坐标(100,130),用白色画一个45度倾斜的十字标记形状,如下图:

     

    cv2.drawMarker(img, (100,160), (255,255,255), markerType=cv2.MARKER_STAR)

    这行代码是在坐标(100,160),用白色画星标形状、交叉和倾斜交叉的组合,如下图:

     

    cv2.drawMarker(img, (100,190), (255,255,255), markerType=cv2.MARKER_DIAMOND)

    这行代码是在坐标(100,190),用白色画钻石标记形状,如下图:

     

    cv2.drawMarker(img, (100,220), (255,255,255), markerType=cv2.MARKER_SQUARE)

     

    cv2.drawMarker(img, (100,260), (255,255,255), markerType=cv2.MARKER_TRIANGLE_UP)

     

    cv2.drawMarker(img, (100,300), (255,255,255), markerType=cv2.MARKER_TRIANGLE_DOWN)

    后面向个依次画了下面图案:

     

    到这里就把七种图案显示学习完成了,以后就可以使用到自己的项目里了,完整的代码如下:

    #python 3.7.4,opencv4.1
    #蔡军生 https://blog.csdn.net/caimouse
    #9073204@qq.com
    #
    import numpy as np
    import cv2
    from matplotlib import pyplot as plt
    
    #
    width = 600
    height = 500
    img = np.zeros((height, width,3),dtype='uint8')
    
    #
    cv2.drawMarker(img, (100,100), (255,255,255))
    
    cv2.drawMarker(img, (100,130), (255,255,255), markerType=cv2.MARKER_TILTED_CROSS)
    
    cv2.drawMarker(img, (100,160), (255,255,255), markerType=cv2.MARKER_STAR)
    
    cv2.drawMarker(img, (100,190), (255,255,255), markerType=cv2.MARKER_DIAMOND)
    
    cv2.drawMarker(img, (100,220), (255,255,255), markerType=cv2.MARKER_SQUARE)
    
    cv2.drawMarker(img, (100,260), (255,255,255), markerType=cv2.MARKER_TRIANGLE_UP)
    
    cv2.drawMarker(img, (100,300), (255,255,255), markerType=cv2.MARKER_TRIANGLE_DOWN)
    
    cv2.imshow('drawMarker',img)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

     

    展开全文
  • 特此免费授予获得此软件和相关文档文件(“软件”)副本任何人无限制地处理软件的权利,包括但不限于使用,复制,修改,合并权利,发布,分发,再许可和/或出售本软件的副本,并允许具备软件的人员这样,但须...
  • 老板突发奇想要让用android加载h5地图,还有根据请求不同经纬度地图显示出不同marker标记(。。。。这个破需求感觉没啥大用处,可能也就不懂软件的人看着高大上吧)本人小白,不会h5,也不会js。根据自己...
  • 这个软件是我自己一直,确实比较方便实用,我把它成了绿色软件,推荐给喜欢从网上下载图片朋猫友使用,感到还可以请支持一下,谢谢大家试用! 也许你从网上下载了很多图片,但是其中有相当一部分是...
  • 如果你需要制作出能体现专业水准的流程图、报表或结构图,还想在图中添加各类数据或公式,那么 SmartDraw 无疑是一款可以让你事半功倍的软件。 最为一款专业的图表制作软件,SmartDraw 提供了种类丰富的模板,启动...
  • 什么场景下比较适合使用保利威视云课堂来视频直播?1. 当有要求显示PPT课件 + 老师...2. 云课堂直播时,可以PPT课件一些划线、标记等动作,目前云课堂直播有这个功以有,POLYV直播助手是没有这个功能
  • 对于由于使用此软件对您设备造成任何损坏,我不承担任何责任。 背景 VNC是一个桌面共享系统,使客户端可以查看另一台计算机屏幕并对其进行远程操作。 它依靠完善协议支持多种平台,包括Windows,Linux和...
  • JS自定义地图标注

    2017-12-31 16:45:58
    今天再来讲讲怎么自定义地图(也不一定是地图)上做标记,比如像一人员定位系统之类的软件,就需要用到类似的功能,不过以前大多都是桌面软件上实现,今天我这里演示如何web平台实本功能,首先我们需要用到...
  • Picasa 是一款可帮助您计算机立即找到、修改和共享所有图片的软件。每次打开 Picasa 时,它都会自动查找所有图片(甚至是那些您已经遗忘的图片),并将它们按日期顺序放在可见的相册中,同时以您易于识别的名称...
  • LINGO软件的学习

    2009-08-08 22:36:50
    主窗口内标题为LINGO Model – LINGO1窗口是LINGO默认模型窗口,建立模型都都要该窗口内编码实现。下面举两个例子。 例1.1 如何LINGO中求解如下LP问题: 模型窗口中输入如下代码: min=2*x1+3*...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    最富哲理的软件工程 UML是“三人帮”“捣”出来的 迭代开发过程这样流转 软件工程水平是这样提高的 敏捷开发过程-Scrum 送餐管理系统--用例 送餐管理系统--类图 送餐管理系统--顺序 任务1 软件工程 软件...
  •  Xournal 提供了一些基本绘图工具,包括普通铅笔、直线、插入文字、颜色选择,你可以 Xournal 提供“稿纸”乱涂乱画~ Xournal 另一个非常实用功能,就是给 pdf 文件注解,其实就是把每一页 pdf ...
  • 阅读提示:Xournal 是一款自在条记和底稿软件,你可以用他来条记、随手标记、打底稿,大概地道把他算作一个绘图软件。 Xournal 供应了一些根基绘图对象,包罗巨大铅笔、直线、拔出文字、颜色选择,你...
  • 图像热点

    2007-04-29 09:31:00
    用好图像的作用区域标记—area 你见过“联想”机器联想公司赠送...这种效果的实质是把一幅图片划分为不同的作用区域,再让不同的区域链接到不同事情的软件上去,HTML中也有一个具有把图片划分成多个作用区域,...
  • 苹果电脑中截屏和录屏、标记和剪辑功能一如它其他产品设计,得非常细致。,你根本无需费尽心思下载第三方软件,苹果自带 Quiktime 本身就有强大录屏功能。 Mac 使用“截屏”或键盘快捷键拍摄屏幕...
  • 官网初学者教程内容简洁并有配,还了小功能可以标记“已阅”,学习体验很棒,推荐直接学习。 而这里,我只是看过教程后顺带记录下我留意内容。 1.启动程序并场景中工作(Launching the program and ...
  • 您选择 BitWare 为打印机后,一些应用程序都会重新撰写文档,以保证该文档传真时,与屏幕看到相同。 4.“打印”对话框中,选择任何必要选项(如打印范围、打印份数等),然后选择“确定”,就会出现...
  • 通过兰绘地图软件拉取到某一个城市指定区域的加密坐标(我这里业务需求是拉取标记的坐标),将其存入数据库。经过数据清洗之后以散点及其连线的方式将其重现html,同时保证生成的html中显示的坐标能够实现...
  • 比如订货发货通知等,从业务看,消息分为普通消息、加急消息和特急消息多种不同消息类型,其业务处理是不一样,比如加急消息是消息添加加急标记,而特急消息是添加了加急标记外,还会一条催促记录,...
  • 也就是图片半透明的标记,因其具有透明和阴影特性,使之不管较为阴暗或明亮图片都能完美使用,嵌入水印不会影响原始文件可观性和完整性。制作水印比较常见工具是一些看图软件和图像处理、图形...
  •  ◇ 可行性分析报告:说明该软件开发项目实现技术、经济和社会因素上的可行性,评述为了合理地达到开发目标可供选择各种可能实施方案,说明并论证所选定实施方案理由。  ◇ 项目开发计划:为软件项目...
  •  [实时曲面诊断工具]:可以提供诸如任意截面连续性、曲面反射线情况、高亮度线、光谱、曲率云图和园柱型光源照射下反光等多种方法,设计任何时候都可以查出曲面缺陷。  [有效曲面连续性管理工具]...
  • 中译本序, 每当我们看到一个新的软件,第一反应会是:为什么又要发明一个新软件?ggplot2是R世界里相对还比较年轻的一个包,它之前,官方R已经有自己的基础图形系统(graphics包)和网格图形系统(grid包),并且...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 337
精华内容 134
关键字:

在图上做标记的软件