精华内容
下载资源
问答
  • 经过鲲之鹏技术人员数天...如下所示,是从百度地图APP采集到的某小区(uid为ba9b506a87e4f43cf32d8314)的基本信息和边界GEOJSON数据:uid: ba9b506a87e4f43cf32d8314name: 振业泊公馆addr: 西安市灞桥区广安路800号ge...

    经过鲲之鹏技术人员数天的技术攻关,终于成功从百度地图APP采集到POI的边界数据,并成功进行了坐标数据还原和边界数据验证。下面详细介绍一下。

    如下所示,是从百度地图APP采集到的某小区(uid为ba9b506a87e4f43cf32d8314)的基本信息和边界GEOJSON数据:

    uid: ba9b506a87e4f43cf32d8314

    name: 振业泊公馆

    addr: 西安市灞桥区广安路800号

    geo: Point [x=12139200, y=4046920]

    cityId: 233

    tel: (029)83531888

    zip: null

    nearby: null

    geojson:

    {"dataset":[{"ud":"ba9b506a87e4f43cf32d8314","ty":33,"nst":60,"fst":0,"of":15,"in":0,"tx":"振业泊公馆","sgeo":{"bound":[12138948,4046770,12139454,4047084],"type":3,"elements":[{"points":[12139329,4047084,99,-203,26,-30,-3,-59,-459,-23,-30,16,-8,26,1,52,-7,131,56,19,4,17,3,53,318,2]}]}}]}

    该POI在百度地图APP中的边界截图如下:

    下面分析一下返回的GEOJSON数据的含义。

    先看下POI的位置坐标参数,如下:

    geo: Point [x=12139200, y=4046920]

    将[x=12139200, y=4046920]墨卡托坐标转换为经纬度坐标为(109.047102,34.315398),如下图所示。

    可以通过坐标拾取系统的坐标反查功能验证一下,如下图所示,位置正确:

    再重点看GEOJSON的含义,为了便于查看,JSON数据格式化后如下图所示:

    猜测边界信息位于"points"中。但是points数据看起来很奇怪,不是正常的经纬度组。

    猜测1,按前后顺序每两个为一组经纬度。

    前两个看起来是应该墨卡托坐标,后面的数字很小,而且有负数,很奇怪。

    猜测2,从第二组数字起,值为相对于前一组数据的差值。例如第二组数据是(99, -203),真实值应该是(12139329 + 99, 4047084 - 203),即(12139428, 4046881)。

    下面验证下上述猜测是否正确。按上述思路将points中的墨卡托坐标对进行修正:

    # test.py

    points = {'points': [12139329, 4047084, 99, -203, 26, -30, -3, -59, -459, -23, -30, 16, -8, 26, 1, 52, -7, 131, 56, 19, 4, 17, 3, 53, 318, 2]}

    pre_x = None

    pre_y = None

    i = 0

    while i <= len(points['points']) - 1:

    x = points['points'][i]

    y = points['points'][i+1]

    i += 2

    if pre_x is None:

    pre_x = x

    pre_y = y

    print (x, y)

    else:

    print (pre_x + x, pre_y + y)

    pre_x = pre_x + x

    pre_y = pre_y + y

    修正后的13组墨卡托坐标对如下:

    [(12139329, 4047084),

    (12139428, 4046881),

    (12139454, 4046851),

    (12139451, 4046792),

    (12138992, 4046769),

    (12138962, 4046785),

    (12138954, 4046811),

    (12138955, 4046863),

    (12138948, 4046994),

    (12139004, 4047013),

    (12139008, 4047030),

    (12139011, 4047083),

    (12139329, 4047085)]

    再将其转为经纬度坐标对,如下:

    [(109.04826126153179, 34.3166200411101),

    (109.04915058398667, 34.315106883764116),

    (109.04938414341926, 34.31488326211714),

    (109.04935719425397, 34.31444347112423),

    (109.04523397196317, 34.3142720265479),

    (109.04496448031017, 34.31439129237754),

    (109.04489261586937, 34.31458509898596),

    (109.04490159892448, 34.31497271084807),

    (109.04483871753878, 34.315949186570386),

    (109.04534176862437, 34.31609081186824),

    (109.04537770084477, 34.3162175290356),

    (109.04540465001007, 34.316612587200495),

    (109.04826126153179, 34.316627495019034)]

    // 百度地图API多边形区域标注

    // http://lbsyun.baidu.com/jsdemo.htm#c2_9

    var map = new BMap.Map("allmap");

    map.centerAndZoom(new BMap.Point(109.047102,34.315398), 15);

    map.enableScrollWheelZoom();

    var polygon = new BMap.Polygon([

    new BMap.Point(109.048261262,34.3166200411),

    new BMap.Point(109.049150584,34.3151068838),

    new BMap.Point(109.049384143,34.3148832621),

    new BMap.Point(109.049357194,34.3144434711),

    new BMap.Point(109.045233972,34.3142720265),

    new BMap.Point(109.04496448,34.3143912924),

    new BMap.Point(109.044892616,34.314585099),

    new BMap.Point(109.044901599,34.3149727108),

    new BMap.Point(109.044838718,34.3159491866),

    new BMap.Point(109.045341769,34.3160908119),

    new BMap.Point(109.045377701,34.316217529),

    new BMap.Point(109.04540465,34.3166125872),

    new BMap.Point(109.048261262,34.316627495)

    ], {strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5}); //创建多边形

    map.addOverlay(polygon); //增加多边形

    标注效果如下:

    和百度地图中查询出来的该小区边界对比一致,如下图。

    再找另一个POI验证一遍,从百度地图APP采集到的小区(366581fe3fd52baa714b871e)的基本信息和边界信息如下:

    uid: 366581fe3fd52baa714b871e

    name: 水岸东方-三期

    addr: 西安市灞桥区浐河东路与韩森东路交叉路口往东约100米(水岸东方)

    geo: Point [x=12139965, y=4040335]

    cityId: 233

    tel:

    zip: null

    nearby: null

    geojson:

    {"dataset":[{"ud":"366581fe3fd52baa714b871e","ty":33,"nst":60,"fst":0,"of":15,"in":0,"tx":"水岸东方-三期","sgeo":{"bound":[12139757,4040117,12140208,4040590],"type":3,"elements":[{"points":[12139783,4040475,270,115,156,-399,-394,-74,-57,334,9,15,16,9]}]}}]}

    修正后的墨卡托坐标组:

    (12139783, 4040475)

    (12140053, 4040590)

    (12140209, 4040191)

    (12139815, 4040117)

    (12139758, 4040451)

    (12139767, 4040466)

    (12139783, 4040475)

    墨卡托转经纬度后:

    (109.05234,34.267343)

    (109.054765,34.2682)

    (109.056166,34.265224)

    (109.052627,34.264672)

    (109.052115,34.267164)

    (109.052196, 34.267275)

    (109.05234, 34.267343)

    百度地图API标注测试,测试结果截图:

    和直接通过百度地图中查询出来的边界是吻合的,如下图所示。

    再找一个边界复杂点的小区验证下,从百度地图APP采集到的小区(50fe0b843b8fa7ed0b1cc7b9)的基本信息和GEOJSON数据如下:

    uid: 50fe0b843b8fa7ed0b1cc7b9

    name: 自然界·云栖

    addr: 陕西省西安市灞桥区浐河东路与金桥六路交叉口东北

    geo: Point [x=12137930, y=4049163]

    cityId: 233

    tel:

    zip: null

    nearby: null

    geojson:

    {"dataset":[{"ud":"50fe0b843b8fa7ed0b1cc7b9","ty":33,"nst":60,"fst":0,"of":15,"in":0,"tx":"自然界·云栖","sgeo":{"bound":[12137623,4049016,12138272,4049317],"type":3,"elements":[{"points":[12137623,4049168,25,32,97,64,66,13,19,6,28,20,58,16,45,-4,51,-8,32,-5,27,-18,162,-109,12,-1,27,-25,-84,-78,-101,16,-3,-50,-15,6,-70,7,-73,1,-121,-17,-57,-17,-124,152]}]}}]}

    如下图所示,上面是在百度地图中查询出来的“自然界·云栖”小区的边界,下面是我们采集到的边界参数经过API标记后的结果。上下是吻合的。

    再来一个边界更复杂的POI:

    uid: b68bc691d025fcd81e1d1139

    name: 长安大学

    addr: 陕西省西安市碑林区二环南路中段126号

    geo: Point [x=12129635, y=4036408]

    cityId: 233

    tel: (029)82334085

    zip: null

    nearby: null

    geojson:

    {"dataset":[{"ud":"b68bc691d025fcd81e1d1139","ty":33,"nst":60,"fst":0,"of":15,"in":0,"tx":"长安大学","sgeo":{"bound":[12128773,4035966,12130346,4036962],"type":3,"elements":[{"points":[12130011,4036961,0,-80,95,-1,2,-59,89,1,10,-1,4,-1,1,-4,0,-60,36,0,24,-3,75,0,0,-121,-84,0,-1,-40,2,-55,-73,0,0,-46,3,-8,1,-80,-1,-12,0,-14,-2,-9,-1,-11,-30,0,-188,-1,-155,2,1,-41,5,-20,2,-21,2,-154,1,-150,-54,-5,-60,4,-5,1,-4,0,-4,-2,-9,-3,-19,-2,-87,0,-65,2,0,25,-160,-1,-145,-1,-138,-1,-177,-1,-127,-3,0,193,2,5,8,9,61,56,3,2,4,1,80,1,17,2,12,3,7,1,38,-1,26,3,48,8,205,4,236,5,1,38,10,40,4,296,68,-1,39,0,2,12,1,7,1,36,0,32,69,1,-1,70,-56,0,0,28,0,9,1,4,1,5,-1,64,17,0,1,28,151,1,37,0,41,-1,17,0,59,1,0,12,29,0]}]}}]}

    如下图所示,上面是百度地图查询结果,下面是我们采集标注的结果。

    特别说明:本文旨在技术交流,请勿将涉及的技术用于非法用途,否则一切后果自负。如果您觉得我们侵犯了您的合法权益,请联系我们予以处理。

    ☹ Disqus被Qiang了,之前所有的评论内容都看不到了。如果您有爬虫相关技术方面的问题,欢迎发到我们的问答平台:http://spider.site-digger.com/

    展开全文
  • 使用百度地图api采集兴趣点数据

    千次阅读 2017-08-14 14:21:38
    使用百度地图api采集兴趣点数据比如,我们想要采集医院的数据信息,主要包括经纬度坐标和电话等信息。首先,我们需要注册百度开发账号,然后创建应用,会得到ak码,在访问数据时需要这个参数。然后,需要使用...

    使用百度地图api采集兴趣点数据

    比如,我们想要采集医院的数据信息,主要包括经纬度坐标和电话等信息。

    首先,我们需要注册百度开发账号,然后创建应用,会得到ak码,在访问数据时需要这个参数。

    然后,需要使用requests包,通过request = requests.get(url,params=params) 可以请求到数据

    最后,解析请求到的json数据并保存。

    json数据格式如下:

    {
        "status":0,
        "message":"ok",
        "total":228,
        "results":[
            {
                "name":"辽中县新华医院",
                "location":{
                    "lat":41.518185,
                    "lng":122.743932
                },
                "address":"北一路57号",
                "street_id":"4a25f3d22e0206b428201a39",
                "telephone":"(024)62308120",
                "detail":1,
                "uid":"4a25f3d22e0206b428201a39"
            }
            ……
    }        

    完整的代码如下:

    import requests
    import json
    import pandas as pd
    
    def request_hospital_data():
        ak="xxxxxxxxxxx"  # 换成自己的 AK,需要申请
        url = "http://api.map.baidu.com/place/v2/search?query=医疗&page_size=20&scope=1&region=辽中&output=json&ak="+ak
        params = {'page_num':0}  # 请求参数,页码
        request = requests.get(url,params=params)  # 请求数据
        total = json.loads(request.text)['total']  # 数据的总条数
        # print(total)
        total_page_num = (total+19) // 20  # 每个页面大小是20,计算总页码
        items = []  # 存放所有的记录,每一条记录是一个元素
        for i in range(total_page_num):
            params['page_num'] = i
            request = requests.get(url,params=params)
            for item in json.loads(request.text)['results']:
                name = item['name']
                lat = item['location']['lat']
                lng = item['location']['lng']
                address = item.get('address', '')
                street_id = item.get('street_id', '')
                telephone = item.get('telephone', '')
                detail = item.get('detail', '')
                uid = item.get('uid', '')
                # print(name, lat, lng, address, street_id, telephone, detail, uid)
                new_item = (name, lat, lng, address, street_id, telephone, detail, uid)
                items.append(new_item)
    
        # 使用pandas的DataFrame对象保存二维数组
        df = pd.DataFrame(items, columns=['name', 'lat', 'lng', 'adderss', 'street_id', 'telephone', 'detail', 'uid'])
        df.to_csv('liaozhong_hospital_info.csv', header=True, index=False)
    
    request_hospital_data()

    最终可以得到如下的数据:
    这里写图片描述

    此外,我们可以将url中的query参数换其它兴趣点类别,就能获得相应的数据。
    比如,query=住宅区,这样可以获取到住宅区的数据。

    兴趣点的类别如以下
    这里写图片描述

    它的地址是 http://lbsyun.baidu.com/index.php?title=lbscloud/poitags

    展开全文
  • python爬虫用了比较简单的urllib.parse和requests,把爬来的数据显示在地图上。接下里我们话不多说直接上代码:1.安装python环境和编辑器(自行度娘)2.本人以58品牌公寓为例,爬取在杭州地区价格在2000-4000的公寓。...

    选择工作地点:

    选择通勤方式:

    公交+地铁

    地铁

    走路

    骑车

    导入房源文件:

    开始

    var map = new AMap.Map("container", {

    resizeEnable: true,

    zoomEnable: true,

    center: [120.1256856402492, 30.27289264553506],

    zoom: 12

    });

    //添加标尺

    var scale = new AMap.Scale();

    map.addControl(scale);

    //公交到达圈对象

    var arrivalRange = new AMap.ArrivalRange();

    //经度,纬度,时间(用不到),通勤方式(默认是地铁+公交+走路+骑车)

    var x, y, t, vehicle = "SUBWAY,BUS";

    //工作地点,工作标记

    var workAddress, workMarker;

    //房源标记队列

    var rentMarkerArray = [];

    //多边形队列,存储公交到达的计算结果

    var polygonArray = [];

    //路径规划

    var amapTransfer;

    //信息窗体对象

    var infoWindow = new AMap.InfoWindow({

    offset: new AMap.Pixel(0, -30)

    });

    //地址补完的使用

    var auto = new AMap.Autocomplete({

    //通过id指定输入元素

    input: "work-location"

    });

    //添加事件监听,在选择补完的地址后调用workLocationSelected

    AMap.event.addListener(auto, "select", workLocationSelected);

    function takeBus(radio) {

    vehicle = radio.value;

    loadWorkLocation()

    }

    function takeSubway(radio) {

    vehicle = radio.value;

    loadWorkLocation()

    }

    function takeWalk(radio){

    vehicle = radio.value;

    loadWorkLocation()

    }

    function takeBike(radio) {

    vehicle = radio.value;

    loadWorkLocation()

    }

    //获取加载的文件

    function changeCsv() {

    $("#fileCsv").csv2arr(function (res) {

    $.each(res, function (k, p) {

    if (res[k][1]) {

    //addMarkerByAddress(地址,价格,展示的图片)

    addMarkerByAddress(res[k][1], res[k][2],res[k][3])

    }

    })

    });

    }

    function workLocationSelected(e) {

    workAddress = e.poi.name;

    loadWorkLocation();

    }

    function loadWorkMarker(x, y, locationName) {

    workMarker = new AMap.Marker({

    map: map,

    title: locationName,

    icon: 'http://webapi.amap.com/theme/v1.3/markers/n/mark_r.png',

    position: [x, y]

    });

    }

    function loadWorkRange(x, y, t, color, v) {

    arrivalRange.search([x, y], t, function (status, result) {

    if (result.bounds) {

    for (var i = 0; i < result.bounds.length; i++) {

    //新建多边形对象

    var polygon = new AMap.Polygon({

    map: map,

    fillColor: color,

    fillOpacity: "0.4",

    strokeColor: color,

    strokeOpacity: "0.8",

    strokeWeight: 1

    });

    //得到到达圈的多边形路径

    polygon.setPath(result.bounds[i]);

    polygonArray.push(polygon);

    }

    }

    }, {

    policy: v

    });

    }

    function addMarkerByAddress(address, money,imgUrl) {

    var geocoder = new AMap.Geocoder({

    city: "杭州",

    radius: 1000

    });

    geocoder.getLocation(address, function (status, result) {

    var iconValue = "";

    var _money=money;

    if (money.indexOf("-") > -1) {

    _money = money.split("-")[1];

    }

    //如果价格高于3000元/月在地图上显示红色,低于的话显示蓝色

    if (parseFloat(_money) > 3000) {

    iconValue="http://webapi.amap.com/theme/v1.3/markers/n/mark_r.png";

    }else{

    iconValue = "http://webapi.amap.com/theme/v1.3/markers/n/mark_b.png";

    }

    if (status === "complete" && result.info === 'OK') {

    var geocode = result.geocodes[0];

    rentMarker = new AMap.Marker({

    map: map,

    title: address,

    icon:iconValue,

    animation:"AMAP_ANIMATION_DROP",

    position: [geocode.location.getLng(), geocode.location.getLat()]

    })

    ;

    rentMarkerArray.push(rentMarker);

    //鼠标点击标记显示相应的内容

    rentMarker.content = ""+imgUrl+"

    房源: " + address + "

    价格:"+money+"

    "

    rentMarker.on('click', function (e) {

    infoWindow.setContent(e.target.content);

    infoWindow.open(map, e.target.getPosition());

    if (amapTransfer) amapTransfer.clear();

    amapTransfer = new AMap.Transfer({

    map: map,

    policy: AMap.TransferPolicy.LEAST_TIME,

    city: "杭州市",

    panel: 'transfer-panel'

    });

    amapTransfer.search([{

    keyword: workAddress

    }, {

    keyword: address

    }], function (status, result) {

    })

    });

    }

    })

    }

    function delWorkLocation() {

    if (polygonArray) map.remove(polygonArray);

    if (workMarker) map.remove(workMarker);

    polygonArray = [];

    }

    function delRentLocation() {

    if (rentMarkerArray) map.remove(rentMarkerArray);

    rentMarkerArray = [];

    }

    function loadWorkLocation() {

    //首先清空地图上已有的到达圈

    delWorkLocation();

    var geocoder = new AMap.Geocoder({

    city: "杭州",

    radius: 1000

    });

    geocoder.getLocation(workAddress, function (status, result) {

    if (status === "complete" && result.info === 'OK') {

    var geocode = result.geocodes[0];

    x = geocode.location.getLng();

    y = geocode.location.getLat();

    //加载工作地点标记

    loadWorkMarker(x, y);

    //加载60分钟内工作地点到达圈

    loadWorkRange(x, y, 60, "#3f67a5", vehicle);

    //地图移动到工作地点的位置

    map.setZoomAndCenter(12, [x, y]);

    }

    })

    }

    展开全文
  • 百度地图JavaScript版api使用说明

    千次阅读 2017-09-20 16:28:47
     JavaScript API v1.4以及以前的版本无序申请秘钥(ak),自v1.5版本开始需要先申请秘钥(ak),才可以使用,如需获取更高的配额,需要申请 认证企业用户。百度地图API 链接地址:...

      步骤一:申请百度地图密钥;

                   JavaScript API v1.4以及以前的版本无序申请秘钥(ak),自v1.5版本开始需要先申请秘钥(ak),才可以使用,如需获取更高的配额,需要申请               认证企业用户。百度地图API 链接地址:http://lbsyun.baidu.com/apiconsole/key    

      步骤二:在index.html中添加百度地图JavaScript API接口;  

                   1、  <script src="http://api.map.baidu.com/api?v=1.4" type="text/javascript"></script>     //   v1.4版本以及以前版本

                   2、  <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的秘钥" ></script>  //1.5版本后,需要秘钥

    1.初始化地图,并设置地图中心点

    复制代码
    var map = new BMap.Map("allmap");    // 创建Map实例
    map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);  // 初始化地图,设置中心点坐标和地图级别
     
    当然也可以根据城市名称设置地图的中心点:
    map.centerAndZoom("上海",15);  
    
    map.addControl(new BMap.ScaleControl());    //添加左下方比例尺控件
    map.enableScrollWheelZoom(true);     //开启鼠标滚轮缩放
    map.setCurrentCity("北京");          // 设置地图显示的城市
    复制代码

     

     2.拖拽地图与滚轮的使用

    map.enableScrollWheelZoom(true);
    map.disableDragging();     //禁止拖拽
    map.enableScrollWheelZoom();    //启用滚轮放大缩小

     

    3.创建地图的时候,关闭地图底图按钮,建筑的可点功能

    var map = new BMap.Map("allmap", {enableMapClick:false});//构造底图时,关闭底图可点功能 

     

    4.移动地图,设置地图最大最小的缩放级别

    var map = new BMap.Map("allmap",{minZoom:4,maxZoom:8}); // 创建Map实例,设置地图允许的最小/大级别
     
    //当然也可以动态设置级别:
    map.setMaxZoom(10);
    map.setMinZoom(2);

     

    5.获得地图当前中心点,返回两点间的距离

    getCenter()
    getDistance(start:Point, end:Point)
    var pointA = new BMap.Point(106.486654,29.490295);  // 创建点坐标A--大渡口区
    var pointB = new BMap.Point(106.581515,29.615467);  // 创建点坐标B--江北区
    alert('距离是:'+(map.getDistance(pointA,pointB)).toFixed(2)+' 米。');  //获取两点距离,保留小数点后两位

     

    6.添加覆盖物,移除覆盖物,清楚所有覆盖物

    addOverlay(overlay:Overlay)
    removeOverlay(overlay:Overlay)
    clearOverlays()
    getOverlays()    //返回地图上所有的覆盖物

     

    7.地图添加控件的时候可以设置地图放在四个角中的哪个角

    复制代码
    var top_left_control = new BMap.ScaleControl({anchor: BMAP_ANCHOR_TOP_LEFT});// 左上角,添加比例尺
    BMAP_ANCHOR_TOP_LEFT //表示控件定位于地图的左上角。
    
    BMAP_ANCHOR_TOP_RIGHT //表示控件定位于地图的右上角。
    
    BMAP_ANCHOR_BOTTOM_LEFT //表示控件定位于地图的左下角。
    
    BMAP_ANCHOR_BOTTOM_RIGHT //表示控件定位于地图的右下角。
    
    //缩放空间的type的四种类型:
    var top_right_navigation = new BMap.NavigationControl({anchor: BMAP_ANCHOR_TOP_RIGHT, type: BMAP_NAVIGATION_CONTROL_SMALL}); //右上角,仅包含平移和缩放按钮
    BMAP_NAVIGATION_CONTROL_LARGE //表示显示完整的平移缩放控件。
    
    BMAP_NAVIGATION_CONTROL_SMALL //表示显示小型的平移缩放控件。
    
    BMAP_NAVIGATION_CONTROL_PAN //表示只显示控件的平移部分功能。
    
    BMAP_NAVIGATION_CONTROL_ZOOM //表示只显示控件的缩放部分功能
    复制代码

     

    8.地图采集的经纬度,转化为度数,再转化为百度坐标点,在用new BMap.Point转换成打在地图上的点

    9.Marker,添加地图各个事件

    复制代码
    /设置marker的弹跳
    marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
     
    var map = new BMap.Map("container");    
    var point = new BMap.Point(116.404, 39.915);    
    map.centerAndZoom(point, 15);    
    var marker = new BMap.Marker(point);        // 创建标注    
    map.addOverlay(marker);                     // 将标注添加到地图中
    marker.enableDragging();  //设置点可以拖拽
    //设置marker的样式与偏移
    var myIcon = new BMap.Icon(__baseUrl + "/images/circle_blue.png",new BMap.Size(16,16),
        {
    offset:new BMap.Size(10,25),// 图标中央下端的尖角位置。
    imageOffset:new BMap.Size(0,0- index *25)// 设置图片偏移
    }
    );
    //添加事件
    marker.addEventListener("click", function(e){    
     alert("您点击了标注");
    alert(e.point.lng + ", " + e.point.lat);
    });
    //移除事件
    map.removeEventListener("click", showInfo);  
    复制代码

     

    10.信息窗口

    信息窗口在地图上方的浮动显示HTML内容。信息窗口可直接在地图上的任意位置打开,也可以在标注对象上打开(此时信息窗口的坐标与标注的坐标一致)。 您可以使用InfoWindow来创建一个信息窗实例,注意同一时刻地图上只能有一个信息窗口处于打开状态。
    复制代码
    var opts = {    
     width : 250,     // 信息窗口宽度    
     height: 100,     // 信息窗口高度    
     title : "Hello"  // 信息窗口标题   
    }    
    var infoWindow = new BMap.InfoWindow("World", opts);  // 创建信息窗口对象    
    map.openInfoWindow(infoWindow, map.getCenter());      // 打开信息窗口
    map.addOverlay(marker);              // 将标注添加到地图中
        map.centerAndZoom(point, 15);
        var opts = {
          width : 200,     // 信息窗口宽度
          height: 100,     // 信息窗口高度
          title : "海底捞王府井店" , // 信息窗口标题
          enableMessage:true,//设置允许信息窗发送短息
          message:"亲耐滴,晚上一起吃个饭吧?戳下面的链接看下地址喔~"
        }
        var infoWindow = new BMap.InfoWindow("地址:北京市东城区王府井大街88号乐天银泰百货八层", opts);  // 创建信息窗口对象 
        marker.addEventListener("click", function(){          
            map.openInfoWindow(infoWindow,point); //开启信息窗口
        });
    复制代码

    //添加复杂的信息窗口
    var sContent =
        "<h4 style='margin:0 0 5px 0;padding:0.2em 0'>天安门</h4>" + 
        "<img style='float:right;margin:4px' id='imgDemo' src='http://app.baidu.com/map/images/tiananmen.jpg' width='139' height='104' title='天安门'/>" + 
        "<p style='margin:0;line-height:1.5;font-size:13px;text-indent:2em'>天安门坐落在中国北京市中心,故宫的南侧,与天安门广场隔长安街相望,是清朝皇城的大门...</p>" + 
        "</div>";
    var infoWindow = new BMap.InfoWindow(sContent);  // 创建信息窗口对象


    
    //获取信息窗口的内容
    infoWindow.getContent()

     

    11.折线

    Polyline表示地图上的折线覆盖物。它包含一组点,并将这些点连接起来形成折线。
    复制代码
    var polyline = new BMap.Polyline([    
       new BMap.Point(116.399, 39.910),    
       new BMap.Point(116.405, 39.920)    
     ],    
     {strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5}    
    );    
    map.addOverlay(polyline);
    复制代码

     

    12.控件工具的创建与开关

    var map = new BMap.Map("container");    
    var myDis = new BMapLib.DistanceTool(map);
    myDis.open()
    myDis.close()

     

    13.矩形范围搜索

    var map = new BMap.Map("container");        
    map.centerAndZoom(new BMap.Point(116.404, 39.915), 14);      
    var local = new BMap.LocalSearch(map,   
                  { renderOptions:{map: map}});      
    local.searchInBounds("银行", map.getBounds());

     

    14.根据地址描述获得坐标 与 根据坐标得到地址描述

    复制代码
    var map = new BMap.Map("l-map");      
    map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);      
    // 创建地址解析器实例   
    var myGeo = new BMap.Geocoder();      
    // 将地址解析结果显示在地图上,并调整地图视野  
    myGeo.getPoint("北京市海淀区上地10街10号", function(point){      
              if (point) {      
                  map.centerAndZoom(point, 16);      
                  map.addOverlay(new BMap.Marker(point));      
              }      
          }, "北京市");
    var map =new BMap.Map("l-map");      
    map.centerAndZoom(new BMap.Point(116.404,39.915),11);// 创建地理编码实例      var myGeo =new BMap.Geocoder();// 根据坐标得到地址描述    
    myGeo.getLocation(new BMap.Point(116.364,39.993),function(result){if(result){alert(result.address);}});
    复制代码

     

    16.自动移动,缩放地图

    setTimeout(function(){
            map.panTo(new BMap.Point(113.262232,23.154345));   //两秒后移动到广州
        }, 2000);
     
    map.setZoom(14);  

     

    17.地图显示范围

    复制代码
    //设置
    var b = new BMap.Bounds(new BMap.Point(116.027143, 39.772348),new BMap.Point(116.832025, 40.126349));
        try {    
            BMapLib.AreaRestriction.setBounds(map, b);
        } catch (e) {
            alert(e);
        }
    
    //获取
    var bs = map.getBounds();   //获取可视区域
        var bssw = bs.getSouthWest();   //可视区域左下角
        var bsne = bs.getNorthEast();   //可视区域右上角
        alert("当前地图可视范围是:" + bssw.lng + "," + bssw.lat + "到" + bsne.lng + "," + bsne.lat);
    复制代码
     

    18.给地图添加文字,设置样式

    复制代码
    var opts = {
          position : point,    // 指定文本标注所在的地理位置
          offset   : new BMap.Size(30, -30)    //设置文本偏移量
        }
        var label = new BMap.Label("欢迎使用百度地图,这是一个简单的文本标注哦~", opts);  // 创建文本标注对象
            label.setStyle({
                 color : "red",
                 fontSize : "12px",
                 height : "20px",
                 lineHeight : "20px",
                 fontFamily:"微软雅黑"
             });
        map.addOverlay(label);
    复制代码

    复制代码
    给覆盖物添加文字标签:
    var marker = new BMap.Marker(point);  // 创建标注
        map.addOverlay(marker);              // 将标注添加到地图中
     
        var label = new BMap.Label("我是文字标注哦",{offset:new BMap.Size(20,-10)});
        marker.setLabel(label);

    //获取覆盖物信息:
    function getAttr(){
            var p = marker.getPosition();       //获取marker的位置
            alert("marker的位置是" + p.lng + "," + p.lat);   
        }
     

    19.添加海量点

    复制代码
     if (document.createElement('canvas').getContext) {  // 判断当前浏览器是否支持绘制海量点
            var points = [];  // 添加海量点数据
            for (var i = 0; i < data.data.length; i++) {
              points.push(new BMap.Point(data.data[i][0], data.data[i][1]));
            }
            var options = {
                size: BMAP_POINT_SIZE_SMALL,
                shape: BMAP_POINT_SHAPE_STAR,
                color: '#d340c3'
            }
            var pointCollection = new BMap.PointCollection(points, options);  // 初始化PointCollection
            pointCollection.addEventListener('click', function (e) {
              alert('单击点的坐标为:' + e.point.lng + ',' + e.point.lat);  // 监听点击事件
            });
            map.addOverlay(pointCollection);  // 添加Overlay
        } else {
            alert('请在chrome、safari、IE8+以上浏览器查看本示例');
        }
    复制代码

     

    20.自定义右键菜单

    复制代码
    var menu = new BMap.ContextMenu();
        var txtMenuItem = [
            {
                text:'放大',
                callback:function(){map.zoomIn()}
            },
            {
                text:'缩小',
                callback:function(){map.zoomOut()}
            }
        ];
        for(var i=0; i < txtMenuItem.length; i++){
            menu.addItem(new BMap.MenuItem(txtMenuItem[i].text,txtMenuItem[i].callback,100));
        }
        map.addContextMenu(menu);

    复制代码
    //给覆盖物添加右键菜单
    var removeMarker = function(e,ee,marker){
            map.removeOverlay(marker);
        }
        //创建右键菜单
        var markerMenu=new BMap.ContextMenu();
        markerMenu.addItem(new BMap.MenuItem('删除',removeMarker.bind(marker)));
     
        var marker = new BMap.Marker(point);
        map.addOverlay(marker);
        marker.addContextMenu(markerMenu);

    21.地图鼠标

    复制代码
    //设置鼠标样式
    map.setDefaultCursor("url('bird.cur')");   //设置地图默认的鼠标指针样式
     
    //鼠标拖拽地图并设置跟鼠文本
    var myDrag = new BMapLib.RectangleZoom(map, {
            followText: "拖拽鼠标进行操作"
        });
        myDrag.open();  //开启拉框放大
        //myDrag.close();  //关闭拉框放大

    复制代码
    //鼠标测距
    var myDis = new BMapLib.DistanceTool(map);
        map.addEventListener("load",function(){
            myDis.open();  //开启鼠标测距
            //myDis.close();  //关闭鼠标测距大
        });


    //单击获取点击的经纬度
        map.addEventListener("click",function(e){
            alert(e.point.lng + "," + e.point.lat);
        });

    22.最佳视野

     当地图打点过多时,我们要使得所有的点都在我们地图上的可视区域内,就用下面的方法
    map.setViewport(points); //让标注显示在最佳视野内

    这些数据来自百度地图说明,更加详细的说明还是看百度地图api文档最好。


    展开全文
  • 利用Web映射世界中这些令人振奋的发展成果,我们为您带来了Tilehut.js,这是一个适度但舒适的地图瓷砖之家。 Tilehut.js旨在为您的一般Web映射项目提供图块,并且实质上是Mapbox的的简单包装。 Tilehut.js确实是一...
  • 开发指南--百度地图JavaScriptAPI大众开发指南--百度地图JavaScriptAPI大众简介 JavaScript API大众版JavaScript API功能介绍百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,它能够帮助您在...
  • // js获取json对象的值时,对于数字索引只能用方括号[], // 对于字符串既可以使用方括号[],也可以使用点 . 来获取json对象里的值 alert(text['results'][1]['formatted_address']); } } },(error)...
  • 想实现这个需要可以有两种实现方式:1、使用js采集界面信息 2、直接调用接口 今天重点说第一种, 第二种等完全搞明白URL中所有参数再继续追加。 #使用js采集界面信息# 在网页输入“中国电信”后,...
  • #获取百度地图POI数据一(详解百度返回的POI数据) http://lbsyun.baidu.com/index.php?title=webapi 数据量标准可以参看 http://lbsyun.baidu.com/apiconsole/key#/home 额度管理=>开发者权益 余慕白 博客 ...
  • 以下为笔者首个litrpa的作品,详细讲解了如何爬取复杂页面的信息,特别是极端情况下页面没有信息,需要使用javascript来调用获取数据的方法。 这些技术不限于某个工具使用,学会后可灵活用于其他工具中。 视频教程...
  • mymps支持整合三种地图接口设置,像国内常用的51ditu和baidu,以及全球范围内的google地图。 首先进入后台管理,系统-》核心设置-》系统配置-》地图接口设置 1,baidu (1)百度地图api地址填写...
  • 基于USB-RS232协议输出UM220-III/3-N/北斗GPS模块定位信息,使用ROS与js的接口包——roslibjs,调用百度地图js API,并可视化数据,笔者测试的效果如下(红点表示经过的路径点,GPS/北斗数据存在误差,所以路径点不...
  • 地图保存覆盖物到业务库,实现覆盖物自定义保存和查询,编辑也是同理。 一.、基本思路 ...通过调用天地图的画图工具(圆、线、点、多边形等)实现地图覆盖物的采集。 参考天地图的例子,使用...
  • 百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,可在网站中构建功能丰富、交互性强的地图应用,支持PC端和移动端基于浏览器的地图应用开发,且支持HTML5特性的地图开发。该...
  • 【百度地图API】JS版本的常见问题 原文:【百度地图API】JS版本的常见问题 【新手必读】API常见问题 2011-12-12 1、请问如何将我的店铺标注在百度地图上?我是否可以做区域代理?在百度地图上...
  • 功能:借助JQuery,使用 JS 方式实现后台加载坐标数据然后显示在百度地图上,并每隔5秒刷新一次数据。 对不同点使用不同的图标进行标注,比如上传时间大于半小时的点标记为红色图标,说明数据不实时, 对上传时间...
  • 客户端脚本语言是运行在浏览器而非服务器上的语言。客户端语言成功的前提是... 通常,你在网上遇到的客户端语言只有两种:ActionScript(开发Flash应用的语言)和JavaScript。今天ActionScript的使用率比10年前低很多
  • QT5.9 利用 QWebEngineView / QWebChannel 调用JavaScript 实现QT与HTML网页数据交互, 实现QT加载百度地图并与地图交互数据 编译环境 QT5.9.3 + VS2015 64/32bit +win10 (MinGW默认不支持 QWebEngineView) 先看...
  • 信息采集和信息源

    2013-11-13 16:52:00
    1.确定搜索的内容 2.网络信息爬去  2.1 抓取网页(网络浏览器和网络爬虫) ... 2.5 垂直搜索,面向主题的信息采集,主题爬虫,判断一个网页和某个主题相关,  2.6 深层网络,(私人站点,表单结果,脚本页面...
  • 安装环境:php5或更高版本、mysql... 如果您的主机为 *nix 操作系统,请设置如下文件夹权限为 777./detail 默认广告JS/地图/专题/保存目录./Runtime 系统缓存目录./Uploads 系统附件保存目录4. 通过浏览器访问 //您...
  • 谷歌地图数据可视化 谷歌地图数据可视化 用于在 Google 地图上显示地理信息的测试代码的回购。
  • 信息)会非常实用,可以帮你避开一大堆 JavaScript 的麻烦事。 jQuery 是一个十分常见的库,70% 最流行的网站(约 200 万)和约 30% 的其他网站(约 2 亿)都在使用。 1 一个网站使用 jQuery 的特征,就是源...
  • 比如将一组间隔采集的车辆位置和朝向、速度、时间等信息传入,可以得到一组沿着道路行进的经纬度路径和总的行驶历程。准备原始轨迹数据纠偏之前需要按照下面的数据规格准备原始轨迹点,x、y、sp、ag、tm分别代表经度...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,218
精华内容 1,287
关键字:

地图信息采集js版