當然Google也放出了API來,讓開發人員能夠有更好的應用
廢話不多說,下面為您開始實作、運用Google Maps API
一定要知道的教學網頁:Google Maps Javascript API 第 3 版 - 開發人員指南
過去的要用到Google Maps API需要去註冊key,有key才能用google map
第二版開始改變了這樣的作業模式,只要載入JavaScript API就可以了
PS:v=3是版本、sensor = false是應用程式是否有使用感應器(例如GPS定位器)來判斷使用者的位置。
前端HTML程式碼:
後端VB程式碼:
PS:資料由MS SQL資料庫撈出來後丟給前端JavaScript,用串字串的方式給
SQL Table Schema:
name:標記中文名稱
website:連結網址
image:縮圖檔名
longitude:經度
latitude:緯度
type:群組
圖檔資料夾內圖檔名稱:(mark.jpg為標記圖示、其他為點標記後的縮圖)
執行後畫面:
下拉選項:
選擇完也已撈出資料給前端就會出現地圖了
按下顯示出現標記
點選標記
點選完標記後再其他地方再點一下就會出現海拔高度
後記:
其實Google Maps API還有其他的應用,只是因為工作上有用到,所以就po我用到的部份上來,有需要的人可以參考一下,其他還有很多請到開發人員指南去了解,以我用的感覺來說,以表列的方式和用google map來看當然是用Google Map來的舒服一些,不過Google Map也有一些限制,最大的限制就是必須是免費的,也就是不能需要付費才能看到此地圖,這個可能是最需要注意的,如果要在付費網站使用也不是沒辦法,可以用
<script src="https://maps-api-ssl.google.com/maps/api/js?v=3&sensor=false" type="text/javascript"></script>
PS:v=3是版本、sensor = false是應用程式是否有使用感應器(例如GPS定位器)來判斷使用者的位置。
前端HTML程式碼:
<body onload="initialize()"> <form id="form1" runat="server"> <table id ="control"> <tr> <td style="vertical-align: top"> <table> <tr> <td class="style1" colspan="2" style="text-align: center">崩塌地重建工程</td> <td class="style1" colspan="2" style="text-align: center">公司位置</td> </tr> <tr> <td>marker1:</td> <td>台中市坪頂巷崩塌地修復工程</td> <td>marker3:</td> <td>XX工業大甲廠區</td> </tr> <tr> <td>marker2:</td> <td>苗栗縣開善寺前崩塌地復育工程</td> <td>marker4:</td> <td>XX工業中港廠區</td> </tr> <tr> <td> </td> <td> <asp:DropDownList ID="DropDownList1" runat="server" Width="205px" AutoPostBack="True"> <asp:ListItem Value="0">請選擇</asp:ListItem> <asp:ListItem Value="1">崩塌地重建工程</asp:ListItem> <asp:ListItem Value="2">公司位置</asp:ListItem> </asp:DropDownList> </td> <td style="text-align: right"> <input id="Button1" type="button" value="顯示" onclick="drop()" /></td> </tr> <tr> <td> <asp:Label ID="Label2" runat="server" Text="注意:" ForeColor="Red"></asp:Label> </td> <td colspan="3"> <asp:Label ID="Label1" runat="server" Text="1.海拔高度為取小數點兩位四捨五入" ForeColor="Red"></asp:Label> </td> </tr> </table> </td> <td style="vertical-align: top"> <div id ="map_canvas" style="height: 700px; width: 850px"></div> </td> </tr> </table> </form> </body>JavaScript程式碼:
var berlin = new google.maps.LatLng(24.2386197, 120.5084257);
var neighborhoods = <%=sNeighborhoods %>;
var Content = <%=sName %>;
var Link = <%=sLink %>;
var MarkerImage = <%=sImage %>;
var iterator = 0;
var markersArray = [];
var map;
var infowindow;
var ge;
//MapTypeId.ROADMAP 會顯示預設道路地圖檢視畫面
//MapTypeId.SATELLITE 會顯示「Google 地球」衛星影像
//MapTypeId.HYBRID 會顯示一般檢視和衛星檢視的混合畫面
//MapTypeId.TERRAIN 會根據地形資訊顯示實際地圖
function initialize() {
var mapOptions = {
zoom: 9,
mapTypeId: google.maps.MapTypeId.HYBRID,
center: berlin
};
//map
map = new google.maps.Map(document.getElementById("map_canvas"),mapOptions);
// 新增一個 ElevationService(海拔高度請求伺服器)
elevator = new google.maps.ElevationService();
//點選地圖非標記部份,訊息框就會關閉
//google.maps.event.addListener(map, 'click', function () {
// infowindow.close();
//});
//點選地圖就會查詢海拔高度
google.maps.event.addListener(map, 'click', getElevation);
}
function getElevation(event) {
var locations = [];
// 檢索點擊的位置,推動它在陣列上
var clickedLocation = event.latLng;
locations.push(clickedLocation);
// 創建一個LocationElevationRequest對象,使用陣列的一個值
var positionalRequest = {
'locations': locations
}
// 發起定位請求
elevator.getElevationForLocations(positionalRequest, function(results, status) {
if (status == google.maps.ElevationStatus.OK) {
// 檢索結果
if (results[0]) {
// 打開一個信息窗口,顯示海拔在點擊的位置
infowindow.setContent("<p>在這一點上海拔 <font color='red'>" + results[0].elevation.toFixed(2) + "</font> 公尺.</p>");
infowindow.setPosition(clickedLocation);
infowindow.open(map);
} else {
alert("沒有找到結果");
}
} else {
alert("海拔服務失敗,因為: " + status);
}
});
}
function drop() {
for (var i = 0; i < neighborhoods.length; i++) {
debugger;
setTimeout(function () {
addMarker();
}, i * 200);
}
}
function addMarker() {
//markers.push(new google.maps.Marker({
// position: neighborhoods[iterator],
// map: map,
// draggable: false,
// animation: google.maps.Animation.DROP
//}));
var markernumber = iterator + 1;
var image = 'images/mark.jpg';
marker = new google.maps.Marker({
map: map,
title: 'maker' + markernumber,
position: neighborhoods[iterator],
draggable: false,
animation: google.maps.Animation.DROP,
icon: image
});
markersArray.push(marker);
(function (iterator, marker) {
google.maps.event.addListener(marker, 'click', function () {
if (!infowindow) {
infowindow = new google.maps.InfoWindow();
}
infowindow.setContent("<table><tr><td><a href='" + Link[iterator] + "' target=_blank><img height='200px' width='500px' src='images/" + MarkerImage[iterator] + ".jpg'/></a></<td></tr><tr><td style='text-align: center;'><a href='" + Link[iterator] + "' target=_blank>" + Content[iterator] + "</a></<td></tr></table>");
infowindow.open(map, marker);
});
})(iterator, marker);
iterator++;
}
後端VB程式碼:
Imports System.Data.SqlClient
Public Class index
Inherits System.Web.UI.Page
Public Conn As SqlClient.SqlConnection = New SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings("masterConnectionString").ToString())
Public sName, sNeighborhoods, sLink, sImage, sLatitude, sLongitude As String
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Protected Sub DropDownList1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DropDownList1.SelectedIndexChanged
'Open(DB連線)
If (Conn.State = ConnectionState.Closed) Then
Conn.Open()
End If
'SQL Command
Dim command As SqlCommand = New SqlCommand("select name,website,image,longitude,latitude from GoogleMapAPI where type =" & DropDownList1.SelectedValue & "", Conn)
Dim GoogleMap_reader As SqlDataReader = command.ExecuteReader()
Dim int As Integer = 0
If GoogleMap_reader.HasRows Then
'用串字串的方式,串給前端JavaScript的Google Maps API變數用
sName = "[" '名稱
sNeighborhoods = "[" '經緯度座標
sLink = "[" '網址
sImage = "[" '圖片檔名
sLatitude = "[" '緯度
sLongitude = "[" '經度
Do While GoogleMap_reader.Read()
If (int = 0) Then
sName += "'" & GoogleMap_reader.GetString(0) & "'"
sNeighborhoods += "new google.maps.LatLng(" & GoogleMap_reader.GetDecimal(3) & "," & GoogleMap_reader.GetDecimal(4) & ")"
sLink += "'" & GoogleMap_reader.GetString(1) & "'"
sImage += "'" & GoogleMap_reader.GetString(2) & "'"
sLatitude += "'" & GoogleMap_reader.GetDecimal(3) & "'"
sLongitude += "'" & GoogleMap_reader.GetDecimal(4) & "'"
Else
sName += ",'" & GoogleMap_reader.GetString(0) & "'"
sNeighborhoods += ",new google.maps.LatLng(" & GoogleMap_reader.GetDecimal(3) & "," & GoogleMap_reader.GetDecimal(4) & ")"
sLink += ",'" & GoogleMap_reader.GetString(1) & "'"
sImage += ",'" & GoogleMap_reader.GetString(2) & "'"
sLatitude += ",'" & GoogleMap_reader.GetDecimal(3) & "'"
sLongitude += ",'" & GoogleMap_reader.GetDecimal(4) & "'"
End If
int += 1
Loop
sName += "]"
sNeighborhoods += "]"
sLink += "]"
sImage += "]"
sLatitude += "]"
sLongitude += "]"
End If
If (Conn.State = ConnectionState.Open) Then
Conn.Close()
Conn.Dispose() '---- 一開始宣告有用到 New的,最後必須以 .Dispose()結束
End If
End Sub
End Class
PS:資料由MS SQL資料庫撈出來後丟給前端JavaScript,用串字串的方式給
SQL Table Schema:
USE [master] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[GoogleMapAPI]( [number] [int] IDENTITY(1,1) NOT NULL, [name] [varchar](50) NULL, [website] [varchar](50) NULL, [image] [varchar](50) NULL, [longitude] [decimal](18, 8) NULL, [latitude] [decimal](18, 8) NULL, [type] [int] NULL, CONSTRAINT [PK_GoogleMapAPI] PRIMARY KEY CLUSTERED ( [number] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GOnumber:順序號
name:標記中文名稱
website:連結網址
image:縮圖檔名
longitude:經度
latitude:緯度
type:群組
圖檔資料夾內圖檔名稱:(mark.jpg為標記圖示、其他為點標記後的縮圖)
執行後畫面:
下拉選項:
選擇完也已撈出資料給前端就會出現地圖了
按下顯示出現標記
點選標記
點選完標記後再其他地方再點一下就會出現海拔高度
後記:
其實Google Maps API還有其他的應用,只是因為工作上有用到,所以就po我用到的部份上來,有需要的人可以參考一下,其他還有很多請到開發人員指南去了解,以我用的感覺來說,以表列的方式和用google map來看當然是用Google Map來的舒服一些,不過Google Map也有一些限制,最大的限制就是必須是免費的,也就是不能需要付費才能看到此地圖,這個可能是最需要注意的,如果要在付費網站使用也不是沒辦法,可以用







沒有留言:
張貼留言
您的寶貴建議是我前進的動力!