2010-06-21 81 views
3

是否可以通過編程方式在Google中生成標記?例如,我有一個服務和位置數據庫,我想使用PHP在Google Map上進行繪圖。以編程方式生成Google地圖標記(API v3)

使用Maps API v3,我創建了一張地圖並使用標記和信息窗口繪製了良好的服務,但我真正想要做的是生成數字(1,2,3,4等)在默認標記氣泡根據他們從數據庫檢索的順序。另外,我想根據數據庫中的服務類型以編程方式更改標記圖標的顏色。

我使用PHP,所以不知道是否有一個腳本來做到這一點,但我希望谷歌可以通過API提供這個自定義標記生成。

謝謝!

回答

4

有PHP吐出javascript代碼。

這裏有一個方便的javascript函數,我寫了一個關聯窗口添加標記。

function add_marker(opts, place) { 
    var marker = new google.maps.Marker(opts); 
    marker.place_id = place.id; 
    markers[place.id] = marker; 
    var infowindow = new google.maps.InfoWindow({ 
    content: place.details 
    }); 

    infowindows[place.id] = infowindow; 

    google.maps.event.addListener(marker, 'click', function() { 
    infowindows[marker.place_id].open(map,marker); 
    }); 

} 

因此宣稱,在一些地方javascripty,你那麼有一些PHP是很可能像後(假設你的地圖是一個全球性的稱爲「地圖」):

<script type="text/javascript"> 
    <?php 
    $count = 0; 
    foreach ($rowset as $row): ?> 
    add_marker({ 
     position: new google.maps.LatLng(<?php echo $row->lat ?>, <?php echo $row->lng ?>), 
     title:<?php echo $row->title ?>, 
     map:map 
    }, { id:'<?php echo $count ?>', details:'<?php echo $row->details ?>' }); 
    <?php 
    $count++; 
    endforeach; ?> 
</script> 

我還沒有測試過這些,也不知道數據是什麼樣的,但是這種方法應該適用於你想要的東西。我不是100%確定自定義標記生成的含義,因爲聽起來你已經在做這件事,而不是通過PHP。

+0

我的問題是有關獲取的谷歌地圖標記圖標的圖形,並能夠使用並堅持了一些過吧,從PHP發送。所以它更多的是關於圖像處理,還是API提供了一種即時處理的方法?乾杯。 – JamieNewman 2010-06-22 07:41:08

+0

我不斷收到此代碼的錯誤:Uncaught TypeError:無法讀取未定義的屬性'get'...它發生時點擊地圖圖標 – msj121 2015-11-06 05:09:38

+0

修正:我已編輯的代碼,問題是地圖是空的,但錯誤很難理解,我也認爲鉻實際上告訴我地圖確實設置;然而,使變量全局解決了這個問題。 – msj121 2015-11-06 05:16:51

5

Maps API要求您使用圖像(而不是任意DIV)來顯示標記,因此您需要呈現圖像服務器端。

一個簡單的方法來做到這一點是使用谷歌API圖表呈現標記圖標: http://code.google.com/apis/chart/docs/gallery/dynamic_icons.html#pins

輸出示例: alt text

與生成:https://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=C|FF0000|000000

+0

+1,因爲Google的圖表API允許生成的圖像被瀏覽器緩存。 – josh3736 2010-08-04 03:49:14

+0

不幸的是,現在已被Google棄用。 – Blazemonger 2013-05-03 16:52:18

0

我不知道如果其他人有這種麻煩,但我無法循環地理編碼來繪製我的觀點,Google甚至認爲這是對他們服務的濫用。所以我的方法是在用戶輸入階段對經緯度座標進行地理編碼和存儲,而不是顯示階段,從而減輕它對Google帶來的帶寬壓力。

我不確定這是否會有所幫助,但它可能會幫助您預先編碼和存儲這些標記圖像,而不是實時進行。根據您選擇的答案,您依賴谷歌在您的頁面加載時生成這些圖片,也許您可​​能希望通過在不同階段運行此代碼並將輸出與座標存儲在一起以加快您的服務速度你的PHP數據庫。

乾杯,