0

正在使用 json 输入创建自定义地图。我用直线创建。

所以我只想用弯曲的道路做同样的地图。

所以当用户可以选择输入道路曲线点时。

这是我的小提琴

我也在这里添加我的代码。

html

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<h3>Road Map</h3>
<div class="top_adjust"></div>
<div class="clear"></div>
<div class="container">  
 <div class="clear"></div>
</div>
<div class="clear"></div>
<div class="catInfoBox">
</div>
<div class="clear"></div>

css

  .clear {
    clear: both;
        }
   .container {
    width:100%;
    position: relative;
    margin-top: 2%;
    max-width: 1024px;
    margin: 0 auto;
    min-height: 10px;
    border-bottom: 1px dotted #000;
   }
    .arrow_box {
position: absolute;
width:150px;
height: 150px;
float:left;
    background: #88b7d5;
    border: 3px solid #036;
     }
   .arrow_box:after{
top: 100%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
    border-color: rgba(136, 183, 213, 0);
border-top-color: #88b7d5;
border-width: 14px;
left: 0%;

   }
 .arrow_box:before {
   border-color: rgba(194, 225, 245, 0);
   border-top-color: #c2e1f5;
   border-width: 36px;
   left: 50%;
   margin-left: -36px;
    }
 .icon {
     width: 22px;
     height: 30px;
     background: url('http://heavenlyyouthallapra.com/wp-content/uploads/2013/09/icon2.png');
     background-repeat: no-repeat;
     position: absolute;
     font-size: 10px;
 padding-top:6px;
     text-align: center;
     background-size: 100%;
     border-top-left-radius: 30px;
 border-top-right-radius: 24px;
 border-bottom-left-radius: 60px;
 border-bottom-right-radius: 0px; 
 }
 .icon p{
     margin-top: 28px;
     background: #FFF;
     color: #000;
 }
 .infoDiv {
     position: absolute;
     top: -10px;
     font-size: 10px;
 }
 .totalLength {
     position: absolute;
     left: 100%;
     top:50px;
     font-size: 14px;
     color: #990033;
 }
 .catInfoBox {
    position: relative;
    display: block;
    max-width: 940px;
    margin: 0 auto;
    margin-top: 5%;
 }
 .catName {
     max-width: 20%;
     float: left;
     padding-left: 3px;
     margin-right: 5%;
 }
 .color {
      background: url('http://heavenlyyouthallapra.com/wp-content/uploads/2013/09/icon2.png');
      background-size: 100%;
 }
 .popupDiv {
     position: absolute;
 }

Javascript

    road_distance=50;
    points =[0];
    count=0;
    colors=[];
    catId=0;
    topPos=0;
    postions=[];
   cat_name=[];
    cat_obj=[];
   pos=0;
   info=[{ "Polce Station" : [ { "Name" : "Janamaithri",
      "Phone" : "123456",
      "Address" : "Palarivattam,EKM",
      "KMS" : "10"
    },
    { "Name" : "Kasaba",
      "Phone" : "789523",
      "Address" : "Kaloor,EKM",
      "KMS" : "20"
    },
    { "Name" : "Commisionar Office",
      "Phone" : "756213",
      "Address" : "North Railway,EKM",
      "KMS" : "30"
    }
  ] },
  { "Educational Institution" : [ { 
      "Name" : "St jhon HSC",
      "Phone" : "741258",
      "Address" : "Pipeline EKm",
      "KMS" : "15"
    },
    { "Name" : "Govt Hss",
      "Phone" : "894612",
      "Address" : "Deshabhimani,Kaloor",
      "KMS" : "25"
    },
    { "Name" : "Maharajas College",
      "Phone" : "71396",
      "Address" : "Maraine Drive",
      "KMS" : "35",
    }
  ] },
   { "Hospitals" : [ { "Name" : "Lokshore",
      "Phone" : "795642",
      "Address" : "Mamangalam",
      "KMS" : "12"
    },
    { "Name" : "PVS",
      "Phone" : "79431",
      "Address" : "Kaloor",
      "KMS" : "22"
    },
    { "Name" : "KMCT",
      "Phone" : "856756",
      "Address" : "Staduim Junction",
      "KMS" : "33"
    }
  ] },
  { "Govt Offices" : [ { "Name" : "Treasury",
      "Phone" : "897456",
      "Address" : "Thammanam",
      "KMS" : "18"
    },
    { "Name" : "Spices Board",
      "Phone" : "879462",
      "Address" : "Bypass",
      "KMS" : "31"
    }
  ] }
    ];
     $(document).ready(function(){
  console.log(info);
  triggerMap();
     });
    function triggerMap(){
   kilometer=[];
    var arrayvalue=[],kms;
   for(var i in info){
       console.log(i);
     for(var j in info[i]){
         console.log(j);
       cat_name.push(j);
       kms='';
       cat_obj.push((info[i][j]));
       for(var k in info[i][j]){
           console.log(k);
         kms+=info[i][j][k]["KMS"]+",";
       } 
      kms=kms.replace(/,(?=[^,]*$)/, '');
     }
     kilometer.push(kms); 
   } 

    for(var i=0;i<info.length;i++){
            var arrayVal=kilometer[i];
            allDistance=(arrayVal.split(","));
            allDistance.sort(function(a, b) {return a-b;});
            markUpAllkm(allDistance);
            catId++;
            }
            var lastDiv=$('<div/>').addClass('totalLength').html(road_distance+"KM")
            $('.container').append(lastDiv);
            var clear=$('<div/>').addClass('clear');
            $('.container').append(clear);
            var max=getMax(postions);
            max=max*4;
            $('.top_adjust').css(
                    {
                        "height":(max+25)+"px",
                        "transition":"all 02s ease 0s"
                    });
            popUpDisplay();
            adjustIconValFix();
            clearVal(); 
        }

function markUpAllkm(arrayVal){
    var randomColor=createRandomColor();
    iconRegister(randomColor,cat_name[pos]);
    pos++;
    for(i=0;i<arrayVal.length;i++){ 
       var distance=(parseFloat(arrayVal[i]).toFixed(2));
       count++;
       points.push(distance);
       var count=countExist(points,distance);
   var top=count*25;
       postions.push(top);
       var zInd=-(top);
       var iconDiv=$('<div class="icon"/>').addClass('iconId-'+catId+"-"+i+"").css(
               {
                   left:((100/road_distance)*distance)+"%",
                   backgroundColor:randomColor,
                   top:zInd+"px"
               }).attr("rel",catId+","+i);
       if(count<=1){
         $(iconDiv).html('<p>'+distance+"KM</p>");
       }
       $('.container').append(iconDiv);
    }
}


function adjustIconValFix(){
      var obj=$('.icon')
      var marginTop=0;
      var catInfoBoxTop=0
       for(var i=0;i<obj.length;i++){
           var icon=$($('.icon')[i]);
           var parentBgColor=icon.css("backgroundColor");
           icon.find("p").css({
              "color":parentBgColor
           });
           var topPos=Math.abs(icon.position().top);
           if(topPos==25){
                var leftPos=Math.abs(icon.position().left);
                var pTop=parseFloat(icon.find("p").css("marginTop"));
                for(var j=i;j<obj.length;j++){
                    var thisIcon=$($('.icon')[j]);
                    var leftThis=Math.abs($(thisIcon).position().left);
                    var x=Math.abs(leftThis-leftPos);
                    if((x<=30)&&(x!=0)){
                       marginTop=pTop+12;
                       if((catInfoBoxTop<=marginTop)){
                          catInfoBoxTop=marginTop; 
                       }
                       thisIcon.find("p").css({
                          "margin-top":marginTop+"px",
                       });

                    }
                }
           }
       }
     if(catInfoBoxTop<50){ catInfoBoxTop+=50; }
     $('.catInfoBox').css("margin-top",catInfoBoxTop+"px");

} /* function adjustIconValFix  */
   function getMax(list){
     var max=0;
      for(var i=0;i<list.length;i++){
          if(max<parseFloat(list[i])){
              max=parseFloat(list[i]);
          }
      }
      return max;
   }

   function countExist(array,value){
       var counter =0;
       for(var i=0;i<array.length;i++){
           if(array[i]==value){
              counter++; 
           }
       }
       return counter;
   }

  function iconRegister(randomColor,cat_name){
     var div=$('<div/>').addClass("color");
         div.css({
         "height":"36px",
         "padding-left":"20px",
         "width":"2px",
         "float":"left",
         "backgroundColor":randomColor
     });
     var catName=$('<div/>').addClass("catName");
     $(catName).html(cat_name).css({
         "color":randomColor
     });
     $('.catInfoBox').append(div);
     $('.catInfoBox').append(catName);
  }   

  function createRandomColor(){
   var randomColor = (Math.floor(Math.random()*16777215).toString(16));
   if((randomColor==="#FFF")||(randomColor==="#FFFFFF")||(randomColor=='')||(randomColor.length!=6)||(randomColor==="#000")||(randomColor==="#000000")){
        return createRandomColor();
   }
   else {
        if(($.inArray(randomColor,colors))>=0){
          return createRandomColor(); 
        }
   }
  colors.push(randomColor);
  return "#"+randomColor;
}

function popUpDisplay(){
    $('.icon').hover(
       function(){

              var cat_ids='',cat_id=[];
              cat_ids= $(this).attr("rel");
              cat_id=cat_ids.split(",");

              var position=$(this).position();
              x=position.left;
              y=-(position.top);
              topPos=y+150;
              var popupDiv=$('<div/>').addClass('arrow_box').css({
                  "left":x+"px",
                  "color":"#FFF",
                  "top":"-"+topPos+"px"
              }).html(function(){
                  var str='';
                  $.each(cat_obj[cat_id[0]][cat_id[1]], function(i, val) {
                     str+=(i+"\t:"+val);
                     str+="\n";
                  });
                  return str;
              });
              $('.container').append(popupDiv).fadeIn(100);
         },function(){
             $('.container').find('.arrow_box').fadeOut(200).remove();
           });
}

function uniqueArray(list) {
    var result = [];
        $.each(list, function(i, e) {
        if ($.inArray(e, result) == -1) result.push(e);
        });
    return result;
 }
function clearVal(){
    road_distance='';
    points =[0];
    count=0;
    colors=[];
    catId=0;
    topPos=0;
    postions=[];
    $('.road_distance').val('');
    $('.rd_cat').val('');
}
4

0 回答 0