• virtual earth: drawing a radius


    as i continue to build on top of my virtual earth example that uses proximity searching, i found myself wanting to add more visualization to the mix.  i wanted the radius being searched to actually show a radius ring for the area...so the user could see the proximity being searched where the results are plotted.

    so, i started digging -- how do you draw a circle using the polyline api?  hmmm...rounded corners with straight lines...seemed like a challenge.

    well after a prod to some people i was pointed to a solution already doing this!

    and thus the had the answer.  basically it is a javascript function like this:

       1:  function addCircle(polyname, latin, lonin, radius, vecolor, linewidth) 
       2:  { 
       3:      var locs = new Array(); 
       4:      var lat1 = latin * Math.PI/180.0; 
       5:      var lon1 = lonin * Math.PI/180.0; 
       6:      var d = radius/3956; 
       7:      var x; 
       8:      for (x = 0; x <= 360; x++) 
       9:      { 
      10:          var tc = (x / 90)* Math.PI / 2; 
      11:          var lat = Math.asin(Math.sin(lat1)*Math.cos(d)+Math.cos(lat1)*Math.sin(d)*Math.cos(tc)); 
      12:          lat = 180.0 * lat / Math.PI; 
      13:          var lon; 
      14:           if (Math.cos(lat1)==0) 
      15:          { 
      16:              lon=lonin; // endpoint a pole 
      17:          } 
      18:          else 
      19:          { 
      20:              lon = ((lon1 - Math.asin(Math.sin(tc) * Math.sin(d)/Math.cos(lat1)) + Math.PI) % (2 * Math.PI)) - Math.PI; 
      21:          } 
      22:          lon = 180.0 * lon / Math.PI; 
      23:          var loc = new VELatLong(lat,lon); 
      24:          locs.push(loc); 
      25:      } 
      26:      var poly = new VEPolyline(polyname, locs, vecolor , linewidth); 
      27:      return poly; 
      28:  }


    (note: the 3956 indicates this is miles...if you need km, then you'd have to adjust the earth radius setting to be km instead)

    now that i add that to my code, i simply call:

       1:  map.AddPolyline(addCircle("SearchRadius", center.Latitude, center.Longitude, $get("MilesRadius").value, new VEColor(255,0,0,1), 4));


    and have a radius drawn around my resulted plot points.

    sshot-4

    the beauty is that as with everything, this applies to the 3d views as well:

    sshot-5

    very cool -- hope this helps others as well.

    Wednesday, February 21, 2007 4:38 PM

    PostTypeIcon

Comments.

  • Gravatar
    # re: virtual earth: drawing a radius


    Oh that 3D view is hot... you should try a place that actually has some varied terrain though, desert rat :)

    2/22/2007 12:58 PM
  • Soumya said:
    Gravatar
    # re: virtual earth: drawing a radius


    dude you are a lifesaver... i was looking for just this... and voila... i found out! thanks a ton!

    8/25/2008 10:52 PM

Your Reply.

  Comment Form  

Fields denoted with a "*" are required.

*Your name:
Subject:
Your blog:
Your email:  (will not be displayed)
*Your message:

 
Please add 4 and 4 and type the answer here: