V6.3中很方便的map.find()的方法到了v7.0中就不见了,原来这个find的实现必须要调用bingmap的webservice来实现,只不过是代码要多一些,但是应用起来要比较灵活了。
代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="Find.WebForm2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Bing Maps - v7.0</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
body {
font-family: Verdana;
font-size: 12px;
width: 100%;
height: 100%;
position: absolute;
left: 0px;
top: 0px;
margin-left: -1px;
margin-top: -1px;
}
</style>
<script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0"></script>
<script type="text/javascript">
var map = null;
var MM = Microsoft.Maps;
var MyBingMapsCredentials = "AkzZURoD0H2Sle6Nq_DE7pm7F3xOc8S3CjDTGNWkz1EFlJJkcwDKT1KcNcmYVINU";
var MyBingCredentials = "336B678AF7047995CDC62DFE372F64FD364417F5";
function GetMap()
{
map = new MM.Map(document.getElementById("myMap"), {
credentials: MyBingMapsCredentials,
center: new MM.Location(54.87350326912944, 15.333815098500053),
mapTypeId: "r",
zoom: 4
});
//close the infobox when the map is panned or zoomed
MM.Events.addHandler(map, 'viewchangestart', closeInfoBox);
}
function FindLocation()
{
map.entities.clear();
map.getCredentials(MakeGeocodeRequest);
}
function MakeGeocodeRequest(credentials)
{
var geocodeRequest = "http://ecn.dev.virtualearth.net/REST/v1/Locations/" + document.getElementById('txtWhere').value + "?output=json&jsonp=GeocodeCallback&key=" + credentials;
CallRestService(geocodeRequest);
}
function CallRestService(request)
{
var script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", request);
document.body.appendChild(script);
}
function GeocodeCallback(result)
{
if (result &&
result.resourceSets &&
result.resourceSets.length > 0 &&
result.resourceSets[0].resources &&
result.resourceSets[0].resources.length > 0)
{
// Set the map view using the returned bounding box
var bbox = result.resourceSets[0].resources[0].bbox;
var viewBoundaries = MM.LocationRect.fromLocations(new MM.Location(bbox[0], bbox[1]), new MM.Location(bbox[2], bbox[3]));
map.setView({ bounds: viewBoundaries });
// Add a pushpin at the found location
var location = new MM.Location(result.resourceSets[0].resources[0].point.coordinates[0], result.resourceSets[0].resources[0].point.coordinates[1]);
var pushpinOptions = { icon: 'Images/clusternew.png' };
var pushpin = new MM.Pushpin(location, pushpinOptions);
//extend the pushpin class to store information for popup
MM.Pushpin.prototype.title = null;
pushpin.title = result.resourceSets[0].resources[0].name;
//add a click event
pushpinClick = MM.Events.addHandler(pushpin, 'click', displayEventInfo);
map.entities.push(pushpin);
//Prepare the search service
var searchRequest = "http://api.bing.net/json.aspx?AppId=" + MyBingCredentials + "&Query=" + document.getElementById('txtWhat').value + "&Sources=Phonebook&Version=2.0&Market=en-us&UILanguage=en&Latitude=" + result.resourceSets[0].resources[0].point.coordinates[0] + "&Longitude=" + result.resourceSets[0].resources[0].point.coordinates[1] + "&Radius=10.0&Phonebook.Count=25&Phonebook.Offset=0&Phonebook.FileType=YP&Phonebook.SortBy=Distance&JsonType=callback&JsonCallback=SearchCallback";
CallRestService(searchRequest);
}
}
function SearchCallback(result)
{
if (result &&
result.SearchResponse &&
result.SearchResponse.Phonebook &&
result.SearchResponse.Phonebook.Results &&
result.SearchResponse.Phonebook.Results.length > 0)
{
for (var i = 0; i < result.SearchResponse.Phonebook.Results.length - 1; ++i)
{
// Add a pushpin at the found location
var location = new MM.Location(result.SearchResponse.Phonebook.Results[i].Latitude, result.SearchResponse.Phonebook.Results[i].Longitude);
var pushpinOptions = { icon: 'Images/poi_search.png' };
var pushpin = new MM.Pushpin(location, pushpinOptions);
//extend the pushpin class to store information for popup
MM.Pushpin.prototype.title = null;
pushpin.title = result.SearchResponse.Phonebook.Results[i].Title;
MM.Pushpin.prototype.description = null;
var MyResult =
result.SearchResponse.Phonebook.Results[i].Address + "<br>" +
result.SearchResponse.Phonebook.Results[i].City + ", " +
result.SearchResponse.Phonebook.Results[i].PostalCode + "<br>" +
"<a href='" + result.SearchResponse.Phonebook.Results[i].DisplayUrl + "' target='_blank'>More Info</a>"
pushpin.description = MyResult;
//add a click event
pushpinClick = MM.Events.addHandler(pushpin, 'click', displayEventInfo);
map.entities.push(pushpin);
}
}
}
function displayEventInfo(e)
{
if (e.targetType = "pushpin")
{
var pix = map.tryLocationToPixel(e.target.getLocation(), MM.PixelReference.control);
var ibTitle = document.getElementById('ibTitle');
ibTitle.innerHTML = e.target.title;
var ibDescription = document.getElementById('ibDescription');
ibDescription.innerHTML = e.target.description;
var infobox = document.getElementById('infoBox');
infobox.style.top = (pix.y - 60) + "px";
infoBox.style.left = (pix.x + 20) + "px";
infoBox.style.visibility = "visible";
document.getElementById('myMap').appendChild(infoBox);
}
}
function closeInfoBox()
{
var infobox = document.getElementById('infoBox');
infoBox.style.visibility = "hidden";
}
</script>
</head>
<body οnlοad="GetMap();">
<div id='myMap' style="position:absolute; top:0px; left:0px; width:100%; height:100%;"></div>
<div id='dicCtrl' style="position:absolute; top:0px; left:350px; width:100%; height:29px; background-color:White; z-index:10000; vertical-align:middle;">
<a style="margin-left:10px">What</a>
<input id="txtWhat" type="text" style="margin-top:4px; margin-left:5px" />
<a style="margin-left:10px">Where</a>
<input id="txtWhere" type="text" style="margin-top:4px; margin-left:5px" />
<input id="Button1" type="button" value="Find" οnclick="FindLocation()" />
</div>
<div id='infoBox' style="visibility:hidden; position:absolute; top:0px; left:0px; max-width:300px; z-index:10000; font-family:Verdana; font-size:12px">
<img src="IMG/leftbeak.png" alt="Left Beak"style="position:absolute;top:10px; left:0px;" />
<table style="width:275px; border:medium solid Orange; position:absolute;top:0px; left:22px; min-height:100px; background-color:White">
<tr style="width:275px;">
<td style="width:275px" valign="top"><b id='ibTitle'></b></td>
<td align="right" valign="top"><img src="IMG/close.png" alt="close" οnclick="closeInfoBox()" /></td>
</tr>
<tr>
<td colspan="2"><a id='ibDescription'></a></td>
</tr>
</table>
</div>
</body>
</html>
效果如下图: