可是我又不太想每次都上去Google Maps,所以就來研究一下『疊加層』
我直接引用疊加層的說明,所謂的「疊加層」是地圖上繫結到特定經緯度座標的物件,因此在拖曳或縮放地圖時會跟著移動。「疊加層」會反映您在地圖中「加入」的物件 (用以指派點、線條、區域或物件集)。
Maps API 提供數種疊加層類型:
- 地圖上的單一位置是用標記顯示,標記有時會顯示自訂圖示圖片,在此情況下,標記通常會改稱為「圖示」。標記和圖示是 Marker 類型的物件 (詳情請參閱下方的標記和圖示)。
- 地圖上的線條則是用折線 (代表一連串依序排列的位置) 顯示。線條是 Polyline 類型的物件 (詳情請參閱折線)。
- 地圖上的區域如果是任意形狀,就會顯示為多邊形,與折線類似。多邊形與折線相似,都是由一連串依序排列的位置所組成;其與折線不同之處在於,多邊形定義的是它封閉起來的區域 (詳情請參閱下方的多邊形)。
- 地圖圖層可用疊加層地圖類型顯示。如要建立自己的地圖方塊集,您可以建立自訂地圖類型來取代基本地圖方塊集,或以疊加層的形式顯示在現有基本地圖方塊集上方 (詳情請參閱自訂地圖類型)。
- 資訊視窗也是一種特殊的疊加層,可以在地圖上方指定位置的氣球式彈出視窗內顯示內容 (通常是文字或圖片,詳情請參閱資訊視窗)。
- 您也可以實作自己的自訂疊加層。自訂疊加層需實作 OverlayView 介面(詳情請參閱自訂疊加層)。
如果還沒有玩過Google Maps API的人,建議可以先去參考我之前寫得『Google Geocoding API 透過地址查詢經緯度』。因為是從之前那篇延伸過來的,也沒有加入太多東西
這個程式碼我主要多在JavaScript內中加入了
if (myMarker)
{
for (index in myMarker)
{
myMarker[index].setMap(map);
}
}
判斷myMarker是否為空,如果不為空,則將標記標注在地圖上。
不過這樣寫是會造成疊加層重複疊加,所以需要的人可能要改一下
我只是為了方便而已XDD
HTML:
<!DOCTYPE html>
<html lang="zh-tw">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<link rel="stylesheet" type="text/css" href="StyleSheet.css">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=Key Number&sensor=false®ion=zh-tw"></script>
<script type="text/javascript" src="./Script.js"></script>
</head>
<body onload = "initialize()" >
<div id="map"></div>
<div id = "panel">
<label>地址:</label>
<input id="address" value="高雄市燕巢區橫山路59號">
<label>學苑名稱</label>
<input id="house" value="樹德科技大學">
<button onclick="btnClick()">標記</button>
</div>
</body>
</html>
JavaScript:
var map;
var myMarker = [];
function initialize() {
var mapOptions = {
zoom: 15,
center: new google.maps.LatLng(22.63961980, 120.30211060),
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map"),
mapOptions);
};
function btnClick(){
if (address.value.length >= 1 && house.value.length >= 1)
{
$.ajax({
type: "post",
dataType: "json",
url: "https://maps.googleapis.com/maps/api/geocode/json?address=" + address.value + "&sensor=false&language=zh-tw",
success: function (data)
{
if (data.status == "OK")
{
var location = new google.maps.LatLng(data.results[0].geometry.location.lat,
data.results[0].geometry.location.lng);
var mapOptions = {
zoom: 16,
center: location,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map"),
mapOptions);
var marker = new google.maps.Marker({
position: location,
map: map,
title: house.value
});
myMarker.push(marker);
if (myMarker)
{
for (index in myMarker)
{
myMarker[index].setMap(map);
}
}
}
else
{
alert("沒有地圖資料");
}
},
error: function ()
{
alert("資料錯誤");
}
});
}
else
{
alert("請確認地址或學苑名稱有正確輸入");
document.getElementById('#address').focus();
}
};
CSS:
html { height: 100% }
body { height: 100%; margin: 0; padding: 0 }
#map { height: 90% }
#panel { height: 5% }
參考資料:
https://developers.google.com/maps/documentation/javascript/overlays?hl=zh-tw
