0

データベースからプッシュピンを設定するマップがあります。そして円。VE 形状の円の半径内にある他の画鋲を把握し、それらのアドレスのリストを作成できるようにしたいと考えています。

     function addPushPin(lat, long) {
     //var point = new Microsoft.Maps.Point(e.getX(), e.getY());

     //var pushpinLocation = new(lat, long);
     var s = new VEShape(VEShapeType.Pushpin, new VELatLong(lat,long)); 


     var customIcon = new VECustomIconSpecification();
     //customIcon.TextContent = "yo bana4na4";
     customIcon.Image = "http://universidadescancun.com/wp-content/themes/GeoUnis3/images/pinpoint-fiesta.png";
     //customIcon.ImageOffset = new VEPixel();

     s.SetTitle("First Pin <span style=color:red>Demo Title<>/span>");
     s.SetDescription("This comes to the <b>description</b> of pushpin.");
     s.SetMoreInfoURL("http://dotnetricks.blogspot.com");
     s.SetPhotoURL("http://upload.wikimedia.org/wikipedia/commons/8/8a/Banana-Single.jpg");

     s.SetCustomIcon(customIcon);
     s.SetIconAnchor(new VELatLong(lat, long));
     map.AddShape(s);


 }

また、これらの画鋲の 1 つを囲む円をマップに配置します。このように人口が密集しています。

     function getCircleNow(lat, long) {

     var latin = lat;
     var lonin = long;
     var latlong = new VELatLong(latin, lonin);
     centerPoint = (latlong);
     //var center = map.GetCenter().toString();
     //alert(center);
     //Get initial circle points
     var circlePoints = buildCircle(centerPoint.Latitude, centerPoint.Longitude, 50.74);
     //Build circle
     circle = new VEShape(VEShapeType.Polygon, circlePoints);
     circle.HideIcon();
     circle.SetLineWidth(2);
     map.AddShape(circle);
     //Build mask
     circleMask = new VEShape(VEShapeType.Polygon, circlePoints);
     circleMask.HideIcon();
     circleMask.Hide();
     circleMask.SetLineColor(new VEColor(0, 0, 0, 0.5));
     circleMask.SetFillColor(new VEColor(0, 0, 0, 0.0));
     circleMask.Primitives[0].symbol.stroke_dashstyle = "Dash";
     map.AddShape(circleMask);


 }

そして、これが呼び出す buildCircle() 関数です。

     function buildCircle(latin, lonin, radius) {
     var locs = new Array();
     var lat1 = latin * Math.PI / 180.0;
     var lon1 = lonin * Math.PI / 180.0;
     var d = radius / 3956;
     var x;
     for (x = 0; x <= 360; x += 10) {
         var tc = (x / 90) * Math.PI / 2;
         var lat = Math.asin(Math.sin(lat1) * Math.cos(d) + Math.cos(lat1) * Math.sin(d) * Math.cos(tc));
         lat = 180.0 * lat / Math.PI;
         var lon;
         if (Math.cos(lat1) == 0) {
             lon = lonin; // endpoint a pole
         }
         else {
             lon = ((lon1 - Math.asin(Math.sin(tc) * Math.sin(d) / Math.cos(lat1)) + Math.PI) % (2 * Math.PI)) - Math.PI;
         }
         lon = 180.0 * lon / Math.PI;
         var loc = new VELatLong(lat, lon);
         locs.push(loc);
     }
     return locs;

 }

これは、画鋲を追加した後のマップの外観です。マップ上に、いずれかの場所を中心とし、半径 50 マイルの円を配置しました。

私のコードが入力するもの

できるようになりたいこと

JavaScript または C# を使用して、円の中心にあるもの以外に、中心位置の半径内にある他の画鋲を検出できるようにしたいと考えています。または、より簡単に言えば、サークル内にある他の場所/画鋲を調べて、各アドレスの値をリストに入力します。これを行うことができる特別な方法は考えられないので、助けていただければ幸いです。これは私が使用している Bing マップです。

4

1 に答える 1

1

これはかなり簡単です。円の中心点と半径を取り、次の操作を行います。

  • すべての画鋲をループし、Haversine 式を使用して中心点からの距離を測定します
  • 距離が円の半径以下の場合、画鋲は円の内側にあります。

それでおしまい。これについては、かなり前に Bing マップの v6 に関する MSDN の記事も書きましたが、Bing マップの v6.3 に関するすべてのドキュメントと共に、オフラインになったようです。

とはいえ、Bing Maps V6.3 は非常に古く、最後に更新されたのは約 5 ~ 6 年前であることは指摘しておく価値があります。新しい開発を行うことはお勧めしませんが、代わりに、はるかに強力で、より多くの機能があり、ダウンロード サイズが大幅に小さいバージョン 7 を使用することをお勧めします。ここに移行ガイドがあります: http://social.technet.microsoft.com/wiki/contents/articles/20958.migrating-bing-maps-v6-3-to-v7.aspx

于 2014-08-12T15:06:27.977 に答える