0

Fusion テーブルの場所のマーカーが取り込まれたマップがあります。ユーザーの位置を取得し、その位置から半径 10 マイルの円を表示しています。これが私のコードです - http://connormccarra.com/sandbox/map/。API を使用して、円で囲まれたマーカーの数をカウントし、その数をフッターに出力するにはどうすればよいですか?

乾杯!

関連コード:

var map;
function Initialize() {
    var MapOptions = {
        zoom: 7,
        center: new google.maps.LatLng(53.4125694, -8.245014),
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        sensor: true
    };
    map = new google.maps.Map(document.getElementById("map_canvas"), MapOptions);

      var layer = new google.maps.FusionTablesLayer({
    query: {
      select: 'Address',
      from: '1OPU6utSjRYwJSFK-EXdaGmt2KgLTq2loVIjS3AA'
    }
  });
    layer.setMap(map);

  // Try HTML5 geolocation
  if(navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
      var pos = new google.maps.LatLng(position.coords.latitude,
                                       position.coords.longitude);

      var marker = new google.maps.Marker({
        map: map,
        position: pos,
        content: 'You are here!'
      });

      // Add circle overlay and bind to marker
var circle = new google.maps.Circle({
  map: map,
  radius: 16093,    // 10 miles in metres
  fillColor: '#AA0000'
});
circle.bindTo('center', marker, 'position');

      map.setCenter(pos);
    }, function() {
      handleNoGeolocation(true);
    });
  } else {
    // Browser doesn't support Geolocation
    handleNoGeolocation(false);
  }
}

function handleNoGeolocation(errorFlag) {
  if (errorFlag) {
    var content = 'Error: The Geolocation service failed.';
  } else {
    var content = 'Error: Your browser doesn\'t support geolocation.';
  }

  var options = {
    map: map,
    position: new google.maps.LatLng(60, 105),
    content: content
  };

var count = mgr.getMarkerCount(circle);
        document.getElementById("Address").innerHTML += count + "<BR>";

  google.maps.event.addDomListener(window, 'load', initialize);

    //Maps API loaded, now load customizations

    var element = document.createElement('script');
    element.src = 'template.js';
    element.type = 'text/javascript';
    var scripts = document.getElementsByTagName('script')[0];
    scripts.parentNode.insertBefore(element, scripts);
}
4

3 に答える 3

2

FusionTableLayer によって作成されたマーカーは実際のマーカーではありません。それらをフィルタリングするための一種のリストとして取得する方法はありません (マーカーをクリックしない限り、マーカーの詳細を取得することはできません)。

ただし、空間条件を使用して FusionTableAPI をリクエストすることもできます (AJAX 経由、jsonp がサポートされています)。

クエリの構文:

SELECT COUNT() from tableId 
  WHERE ST_INTERSECTS('Address',CIRCLE(LATLNG(lat,lng),10000))

クエリの送信方法: https://developers.google.com/fusiontables/docs/v1/sql-reference

デモ (テーブルが保護されているため、別の FusionTable のデータを使用):
http://jsfiddle.net/doktormolle/bAtgf/

于 2013-07-26T00:21:26.883 に答える
0

まず、FusionTablesLayer のすべての座標を取得することをお勧めします。これはサイドバーで使用された例です

http://www.geocodezip.com/v3_FusionTables_AfricaMap_kml_sidebar.html

次に、ループ ステートメントを使用して、computeDistanceBetween 関数を使用できます。

マーカーが円オーバーレイ内にあるかどうかを検出

于 2013-07-26T05:59:52.087 に答える