2

GOOGLE MAPS API V3 は、私が使用しようとしているものです。

私はmysqlにすべての座標を持っています。たとえば、5 つのリストを取得してマップに配置する必要がありますが、表示したい複数の座標とズーム レベルに基づいて中心点を見つけられるようにしたいと考えています。うん知ってる?

私は自分の人生の時間を過ごしていますが、私が知っていることは非常に単純です。この API を理解することはできません。私を助けてくれる人なら誰にでも20ドル支払うつもりです。

//select * from mysql limit 5

//ok great we got 5 results, great job, format the 5 results so google maps like it, [name,lat,lng] whatever.

//put them on the map and let them be clickable so i can put stuff in the infowindow thing

//make the map adjust to the proper zoom level and center point

アップデート


これは私が探していたものです。これが他の人に役立つことを願っています。

[Chris B] のおかげで、中心座標を取得するための常識的な数式が得られました。sw コードは最小の緯度と経度であり、ne 座標は最大の緯度と経度です。

sort($lat)&&sort($lon);
$r['c'] = array_sum($lat)/count($lat).', '.array_sum($lon)/count($lon);
$r['ne'] = $lat[count($lat)-1].', '.$lon[count($lon)-1];
$r['sw'] = $lat[0].', '.$lon[0];

var myOptions = {zoom:4,center: new google.maps.LatLng(<?php echo $r['c']; ?>),mapTypeId:google.maps.MapTypeId.ROADMAP}
var map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);
<?php foreach($x as $l) echo 'new google.maps.Marker({position:new google.maps.LatLng('.$l['lat'].','.$l['lon'].'),map:map,clickable:true});'; ?>
map.fitBounds(new google.maps.LatLngBounds(new google.maps.LatLng(<?php echo $r['sw']; ?>),new google.maps.LatLng(<?php echo $r['ne']; ?>)));
4

5 に答える 5

2

私は1、2か月前にGoogle Maps v3を使用していましたが、後でv2に切り替えました。しかし、私はあなたと同じ問題を抱えていたので、APIv3用のMarkerManagerクラスを作成しました。クラスの最新バージョンが見つかりませんが、うまくいけば、機能しているバージョンを見つけました。ここで入手できます

ただし、警告する必要があります。最適化されておらず、オーバーレイも使用されていないため、マネージャーに50以上のマーカーを配置して、クラスの非表示/表示を切り替えたところ、クラスが遅くなっています...それ。

使用例:

var map = new google.maps.Map(document.getElementById('MapLayerId'), {
    zoom: 7,
    position: new google.maps.LatLng(latitude, longitude),
    mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker1 = new google.maps.Marker({
    position: new google.maps.LatLng(latitude, longitude),
    map: map
});
var marker2 = new google.maps.Marker({
    position: new google.maps.LatLng(latitude, longitude),
    map: map
});
var manager = new MarkerManager(map, {fitBounds: true});
manager.add(marker1);
manager.add(marker2);
manager.show();
于 2009-09-17T16:23:31.070 に答える
2

平均/重み付けされた中心点が許容できる場合は、すべての緯度を平均し、すべての経度を平均することができます。

$latTotal = 0;
$lngTotal = 0;
foreach ($markers as $marker) {
    $latTotal += $marker['lat'];
    $lngTotal += $marker['lng'];
}

$centerLat = $latTotal/count($markers);
$centerLng = $lngTotal/count($markers);

残りの部分については、 Google にいくつかの優れた V3 チュートリアルがあります。

于 2009-09-17T15:53:42.907 に答える
1

V2 の GDownloadUrl に相当する GOOGLE MAPS API V3 の downloadUrl

データベース (Mysql または Sql) にすべての座標をロードする方法。

var myLatlng = new google.maps.LatLng("37.427770" ,"-122.144841");
var myOptions = {zoom: 15, center: myLatlng, mapTypeId: google.maps.MapTypeId.ROADMAP,}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

var url='marker.php?arg1=x&arg2=y...'; 

downloadUrl(url, function(data) {
      var markers = data.documentElement.getElementsByTagName("marker");
      for (var i = 0; i < markers.length; i++) {
        var latlng = new google.maps.LatLng(parseFloat(markers[i].getAttribute("lat")),
                                    parseFloat(markers[i].getAttribute("lng")));
        var marker = new google.maps.Marker({position: latlng, map: map});
       }
});


function createXmlHttpRequest() {
 try {
   if (typeof ActiveXObject != 'undefined') {
     return new ActiveXObject('Microsoft.XMLHTTP');
   } else if (window["XMLHttpRequest"]) {
     return new XMLHttpRequest();
   }
 } catch (e) {
   changeStatus(e);
 }
 return null;
};


function downloadUrl(url, callback) {
     var status = -1;
     var request = createXmlHttpRequest();
     if (!request) {
        return false;
     }     
     request.open('GET', url);     
     request.onreadystatechange = function() {
        if (request.readyState == 4) {
            try {
                status = request.status;
            } catch (e) {
                // Usually indicates request timed out in FF.
            }     
            if (status == 200) {
                 var s=request.responseText;
                 callback( xmlParse(s) ); 
            }
        }
     }  
     try {    
        request.send(null);      
     }catch (e) {    
        changeStatus(e);
     } 
};

function xmlParse(str) {

  if (typeof ActiveXObject != 'undefined' && typeof GetObject != 'undefined') {
    var doc = new ActiveXObject('Microsoft.XMLDOM');
    doc.loadXML(str);
    return doc;
  }
  if (typeof DOMParser != 'undefined') {
    return (new DOMParser()).parseFromString(str, 'text/xml');
  }
  return createElement('div', null);
}
于 2010-09-15T10:20:41.170 に答える
0

公式の Google マップ PHP/Mysql チュートリアルを確認しましたか? http://code.google.com/apis/maps/articles/phpsqlajax.html

于 2009-09-17T13:15:12.823 に答える
0

多角形の重心を見つけるには、次のアルゴリズムを試してください。

http://tog.acm.org/resources/GraphicsGems/gemsiv/centroid.c

于 2010-05-14T17:34:15.147 に答える