GIS(三)——优化js版搜狗地图的brand标牌样式

       从上一篇博文的效果图中,我们看到有几个相近的brand标牌给相互遮挡住了,不能完整的显示。怎么处理一下呢?今天我们就来研究一下这个解决方案。

       其实要想不被遮挡,可以让这几个brand位置变动一下,而不总是箭头向下指向景点。如果改变箭头的指向呢?首先我们要了解它原本是怎么处理的。这个肯定是从spirit入手了。

       先说一下spirit的参数:

{
    url:"http://api.go2map.com/maps/images/v2.5/2.png",
    imgSize:[140,77],
    //[[左侧],[中间],[右侧],[尖脚]]
    //[clipLeft,clipTop,width,heigth]
    clips:[[0,0,8,51],[8,0,1,51],[132,0,8,51],[0,53,33,23]],
    //[尖脚绑定坐标的位置]
    anchor:[16,23],
    //尖脚微调偏移
    footOffset:[0,-3]
}

       这里是官网的描述。url是图片的url地址,可以是本地图片。imgSize是图片的像素大小。clips是原图剪切的位置,如果看不懂继续往下看。anchor是锚点,就是在地图中的尖脚对应的坐标 ,参数也是在图片中的偏移量。footOffset是整个尖脚在地图中显示的位置。

       由于这个brand可以自适应宽度,我以为它是以多张图片完成的这个功能,但是看到打开这个url对应的图片(上图),才发现原来只是一张图片。而自适应宽度则是clips设置的功劳了。clips就是从这张图片上切不同的位置作为图片进行显示。clips分为4块,左侧、中间、右侧可以完成自适应宽度。而尖脚则是箭头在图片中的位置。每一个切出来的图片都是从左上角的坐标+宽高切出来的。为什么不设定多设定几张图片呢?这是为了减少下载小图标的次数。

       终于明白了这个brand箭头的处理了。我们要想改变箭头的指向,必须得修改图片了。如果你学做ps,这个工作就简单多了。下面是我修改的图片:

       就是多整几个箭头即可。如果想让箭头向右的话,就在切尖角的参数中,切向右箭头的位置,然后anchor也要设定,把箭头偏移到景点的位置。footOffset则需要调整到整个图片的右侧。很简单,自己试着调整一下就明白了。

       还回到咱们原先的话题。现在有多个景点,可能需要指向不同的方向,所以咱们就不能设定死了,那么就需要设定4个function,来得到4中方向的spirit。根据具体情况来选择不同的brand指向。

       下面是我调整好的function:

  //箭头向上
  function get_up_spirit(){
    var spirit={
        url:"22.png",
        imgSize:[140,87],
        clips:[[0,0,8,51],[8,0,1,51],[132,0,8,51],[105,53,33,13]],
        anchor:[17,0],
        footOffset:[0,-63]

    }
    return spirit;
  }

  //箭头向下
  function get_down_spirit(){
    var spirit={
        url:"22.png",
        imgSize:[140,87],
        clips:[[0,0,8,51],[8,0,1,51],[132,0,8,51],[0,53,33,23]],
        anchor:[16,23],
        footOffset:[0,-3]
    }
    return spirit;
  }
  //箭头向左
  function get_left_spirit(){
    var spirit={
        url:"22.png",
        imgSize:[140,87],
        clips:[[0,0,8,51],[8,0,1,51],[132,0,8,51],[39,53,13,33]],
        anchor:[0,16],
        footOffset:[-54,-45]
    }
    return spirit;
  }
  //箭头向右
  function get_right_spirit(){
    var spirit={
        url:"22.png",
        imgSize:[140,87],
        clips:[[0,0,8,51],[8,0,1,51],[132,0,8,51],[86,53,13,33]],
        anchor:[12,16],
        footOffset:[54,-44]
    }
    return spirit;
  }

       对应的效果图如下:

          

       4个js方法调好了,那么如何针对不同的景点来设定不同的brand指向呢?其实很简单,我们只要为每个景点跟调用的方法名关联上,通过不同的名字字节调用即可。

  //加载景点坐标数据
  function loadScenic(){
  	p = [{x:12942902.5,y:4836960.5,title:'颐和园',brand:'up'},
	   	{x:12933625.5,y:4836929.5,title:'香山、植物园',brand:'down'},
	   	{x:12946300.5,y:4839226.5,title:'圆明园遗址公园',brand:'down'},
	   	{x:12948437.5,y:4826035.0,title:'玉渊潭公园',brand:'up'},
	   	{x:12950304.5,y:4829984.0,title:'北京海洋馆',brand:'left'},
	   	{x:12948074.5,y:4829765.0,title:'紫竹院公园',brand:'right'},
	   	{x:12922964.5,y:4853605.5,title:'凤凰岭自然风景区',brand:'down'}];
  }

       在景点数组中,设定一个brand属性,取值域为:up、down、left、right。然后再写一个function,这个function主要是把通过brand来调用对应的方法名:

  //获取数据标牌
  function get_spirit(flag){
	return eval("get_" + flag + "_spirit()");
  }

       修改加载标牌的function如下:

  //加载标记牌
  function addbrand(){
    for(var i=0;i<p.length;i++){
      var brand = new sogou.maps.Brand({
	        position: new sogou.maps.Point(p[i].x,p[i].y),
	        map: map,
	        spirit:get_spirit(p[i].brand)//get_right_spirit()
	        ,content:p[i].title+"<br /> 城市:北京市"
	        //是否可见,可缺省,缺省为true
	        ,visible:true
	        //指定内容区固定宽度为80,如果不指定,则会根据内容大小自动适应
	       	,fixSize:new sogou.maps.Size(80,0)
	        //指定css,css要在样式表事先定义好
	        ,css:"brand"
	    });
	    brands.push(brand);//将生成的brand,加入到brands数组中
    }
  }

       效果图:


       效果还不错吧。有没有一点点心动呢?那就快快行动起来吧!

       如果你的审美比较高的话,你会发现其实这样处理,虽然都错开了,但是却没有美感。如何处理呢?一篇博文,我将做最终的美化版,大家期待一下吧。

时间: 2024-08-31 22:50:55

GIS(三)——优化js版搜狗地图的brand标牌样式的相关文章

GIS(六)——实现js版搜狗地图周边搜索功能

       在上一篇文章<GIS(五)--完成js版搜狗地图基本交互搜索功能>中,介绍了搜狗地图的关键字搜索功能,今天就实现以下另一个重要功能吧--那就是周边搜索功能.        按照惯例,还是把官网上的示例代码给大家贴出来.飞机票在此.周边搜索的功能,跟关键字搜索其实是一样的,也是主要用到的了SearchRequest这个类,点击这里查看api文档.SearchRequest 对象规范: 属性 类型 说明 map Map 进行搜索的地图实例 renderer SearchRendere

GIS(二)——在js版搜狗地图上添加brand标牌

       在上一篇博文中,我在搜狗地图上添加了Marker标记,但是在用户体验度上还是不够的,如果想了解某些信息,你得把鼠标指向marker,才能看到title里的值.有没有一种可以直接显示在marker上的东东呢?        其实有很多方法可以做到.搜狗地图提供了叠加层类,但是可以直接在页面上显示信息的,貌似只有InfoWindow.Label和Brand.一般InfoWindow是用来显示大量信息的.所以我们显示少量信息一般选用Label和Brand.但是Label显示的效果比较一般

GIS(七)——js版搜狗地图搜索功能美化版

       在前2篇文章中介绍了关键字搜索和周边搜索的功能,但是界面比较简陋,所以这一版我主要做一些美化工作.        这次主要优化的方面有2个方面,一个是页面的样式,包括字体.按钮.布局等:二是要添加一个搜索的智能提示.        首先修改页面的样式,更改 #map{position:absolute;width:1364px; height:550px;} #option{ height:50px; width:1336px; border:solid 1px #CCCCCC;

GIS(五)——完成js版搜狗地图基本交互搜索功能

       最近在做的有关于北京海淀智慧旅游的一个项目,既然是旅游项目,那么涉及到地图的操作也就是必然的事情了.前几篇文章,主要是分享了在地图上标记多个景点及其景点信息的技术.其实跟项目中还是有一些不一样的.项目中要求实时显示景点的信息,根据实时数据,更新Marker的颜色(绿.橙.红),以及实时更新景点Brand上的景点信息(游客流量.舒适度).这些都没有出现在文章中,文章只是从技术的角度来验证的.        今天主要要做的是地图上的一个基本功能--交互搜索.        其实官网上搜

GIS(一)——在js版搜索地图上添加Marker标记

       由于我们做的是有关于旅游方面的项目,所以涉及到了地图功能.我接到的其中一个任务就是,在地图上显示指定的几个景点,并在地图上加上标记.        我们项目用的是搜狗地图,使用的是js版本.大家有兴趣的话,可以参考搜索地图api以及示例代码.        在地图上添加标记是地图的一个基本功能.这个标记叫做Marker.可以从这里看官网上对于Marker类的介绍.        实现的基本步骤,首先在页面上创建一个地图,然后地图上添加一个marker.你可以对这个marker指定位

凨-百度地图API之地图标注(JS版),地理位置信息,根据地址获取经度纬度

使用的时候记得更改百度地图的开发者KEY <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>凨-百度地图API之地图标注(JS版),地理位置信息,根据地址获取经度纬度</title> <script type="text

搜狗地图2.2.0版评测 免费语音导航

3月29日消息,近日,搜狗地图更新版本至2.2.0版.据了解,新版本增加了路随车转,车头向上这一亮点功能,定位也更加精准,并且支持了cmwap联网搜索.免费语音导航 图随路转搜狗地图目前推出的android2.2.0版是目前业内评价较高的地图导航软件,特别是其免费语音导航的功能.搜狗地图的最新版(android2.2.0版)语音导航相当给力.女声播报让人倍感亲切,导航基本不偏向.特别是导航过程中能够图随路转,使用起来非常的方便直观.静止时,地图上的模拟手机的指向就是地图的方向:导航时,地图上模拟

百度地图js版开发 f5 鼠标右键刷新时地图会稍微偏移

问题描述 百度地图js版开发 f5 鼠标右键刷新时地图会稍微偏移 js +html开发的百度地图,数据是动态从后台获取的,加载顺序没有任何问题, 从其他地方点到地图加载,数据正常,地图位置正常,只是f5刷新或者右键刷新的时候 地图初始在深圳,然后会稍微偏移一点在香港左右,跪求大神解决一下啊.这个问题 解决不了 解决方案 http://aiquantong.iteye.com/blog/1574053

搜狗地图安卓全新地图

3月24日消息:搜狗地图是一款具有语音导航功能的免费地图应用软件.近日,搜狗地图android版更新至2.2版本.为了提升用户体验,此次搜狗地图只要完善了产品的小细节,如增加图随路转.车头向上等功能. 点击下载:搜狗地图Android端2.2版本 搜狗地图 据了解,此次更新最大亮点是支持图随路转.车头向上的功能,在语音导航功能设计上也优化了界面展示和播报内容.此版本在定位的精准度上也进行了提升,经过评测人员多次测试,2.2版本比之前的2.1版本提升精度达到30%以上.另外,本次更新还支持了cmw