0

タイル ID を使用してマーカーをデータベースに保存しています。

特定のタイルがマップ上に表示されると、このタイルに含まれるすべてのマーカーが

要求され、表示されます。

そのため、最終的に正しく機能しないコードを作成しました。必要なすべてを要求していませんでした

タイル。より正確には、マップを移動するたびに 1 つのタイルのみを要求しました。

     ServerFetchMapType.prototype.tileSize = new google.maps.Size(256,256);

     ServerFetchMapType.prototype.maxZoom = 100;

     ServerFetchMapType.prototype.name = "Server Tile #s";

     ServerFetchMapType.prototype.alt  = "Server Data Tile Map Type";

ServerFetchMapType.prototype.getTile = function(coord, zoom, ownerDocument){

  if(zoom>10){

  var tileId=this.getAddrLatLng(coord,zoom);

  if(isTileAlreadyLoaded(tileId)){
    return ;
  }

  ServerFetchedTiles[tileId] = true;

  var url = "markerRequestPageJson.php?tileNumber=";
  var json;
   $.getJSON(url+tileId,function(json){
    // this is where we can loop through the results in the json object
        var _item;
        var infoWindow = new google.maps.InfoWindow;

        $.each(json, function(i,_item){
            var point = new google.maps.LatLng(
              parseFloat(_item.lat),
              parseFloat(_item.lng));
            var html = _item.id + "<br/>";
            var marker = new google.maps.Marker({
            map: map,
            position: point
          });

          markerClusterer.addMarker(marker);
          bindInfoWindow(marker, map, infoWindow, html);
        });
});

 }
 return;

};

しかし、最終的にいくつかの変更を加えたところ、正常に機能しました。

     ServerFetchMapType.prototype.tileSize = new google.maps.Size(256,256);

     ServerFetchMapType.prototype.maxZoom = 100;

     ServerFetchMapType.prototype.name = "Server Tile #s";

     ServerFetchMapType.prototype.alt  = "Server Data Tile Map Type";

ServerFetchMapType.prototype.getTile = function(coord, zoom, ownerDocument){

  if(zoom>10){

  var tileId=this.getAddrLatLng(coord,zoom);

  if(isTileAlreadyLoaded(tileId)){
    return ;
  }

  ServerFetchedTiles[tileId] = true;

  var div = ownerDocument.createElement('DIV');

  var url = "markerRequestPageJson.php?tileNumber=";
  var json;
   $.getJSON(url+tileId,function(json){
    // this is where we can loop through the results in the json object
        var _item;
        var infoWindow = new google.maps.InfoWindow;

        $.each(json, function(i,_item){
            var point = new google.maps.LatLng(
              parseFloat(_item.lat),
              parseFloat(_item.lng));
            var html = _item.id + "<br/>";
            var marker = new google.maps.Marker({
            map: map,
            position: point
          });

          markerClusterer.addMarker(marker);
          bindInfoWindow(marker, map, infoWindow, html);
        });
});
  return div;
 }
 return;

};

私の質問:それは適切な解決策ですか?

4

1 に答える 1

0

ここで何をしようとしているのかわかりません。しかし、ロード中のタイルをクリックする必要があるのはなぜでしょうか?

Marker{ position: the_position, ... } を指定するだけで、Maps API が表示を処理するはずですよね?

于 2012-04-21T14:12:26.917 に答える