好的,这是我的工作。我打算在我自己的网站(而不是谷歌)中打开一个谷歌地图,让用户在他的地址(家庭、工作和其他地址)上移动一个标记。然后他/她将此标记位置记录到服务器上的地址表中。当其他用户打开他的页面时,他们可以看到“在地图上显示”链接按钮。当他们点击按钮时,资源管理器会打开一个谷歌地图(如果你愿意,你可以在你自己页面的 div 中进行),他们可以看到标记和关于标记的描述。我没有在我的项目中设计线条,但你可以用同样的方式添加它们。
此代码的另一个属性是用户 - 添加他/她的地址 - 可以通过将他/她的地址写入文本框并使用谷歌查找机制来找到地址。所以他/她可以轻松地放置标记。
我使用了 java 和 vb 代码。但是由 javascript 代码处理的重要部分,因为 google subgrim 完全是 java :)
这是提到的完整的javascript代码。
var _id = "";
var _adres = "";
var _kull_adi = "";
var _lat;
var _lng;
var geocoder;
var map;
var marker;
var koords = new Array();
window.onload = function () {
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(39.42324,35.27587);
map = new google.maps.Map(document.getElementById('map'), {
center: latlng,
zoom: 6,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
marker = new google.maps.Marker({
position: latlng,
map: map,
title: 'Move the marker to the address.',
draggable: true
});
google.maps.event.addListener(marker, 'dragend', function (a) {
_lat = a.latLng.lat().toFixed(8);
_lng = a.latLng.lng().toFixed(8);
$('#mapbilgileri_div').html("Enlem : " + _lat + "</br>Boylam : " + _lng);
});
};
function codeAddress() {
var address = document.getElementById("address").value;
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
marker.setMap(null);
map.setZoom(15);
map.setCenter(results[0].geometry.location);
marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location,
title: 'İşaretçiyi adresinizin üzerine getiriniz.',
draggable: true
});
$('#mapbilgileri_div').html("Enlem : " + results[0].geometry.location.lat().toFixed(8) + "</br>Boylam : " + results[0].geometry.location.lng().toFixed(8));
_lat = results[0].geometry.location.lat().toFixed(8);
_lng = results[0].geometry.location.lng().toFixed(8);
map.setCenter(marker.position);
marker.setMap(map);
google.maps.event.addListener(marker, 'dragend', function (a) {
_lat = a.latLng.lat().toFixed(8);
_lng = a.latLng.lng().toFixed(8);
$('#mapbilgileri_div').html("Enlem : " + _lat + "</br>Boylam : " + _lng);
});
} else {
alert("Address couldn't find. Please be sure that you wrote it tuely!: " + status);
}
});
}
function set_guid(guid, adres,kull_adi,adres_decoded) {
_id = guid;
_adres = adres;
_kull_adi = kull_adi;
$('#address').val(adres_decoded);
$('#adresbilgileri_div').html(_id + "</br>" + _adres);
$('#mapbilgileri_div').html("Enlem : " + _lat + "</br>Boylam : " + _lng);
codeAddress();
}
function koordinatekle() {
if (_id.length > 3 && _lat != undefined && _lng != undefined && _adres.length > 3) {
WebService.koordinatekle(_id, _lat, _lng, _kull_adi, geri_donus);
} else {
alert('Please select an address and coordinate from the map !')
}
}
function geri_donus(result, eventArgs) {
if (result = "1") {
alert("coordinate added successfully.");
} else {
alert("Error!");
}
__doPostBack('', '');
}
代码中有一些土耳其语单词,将它们视为名称。和网络服务代码:
<WebMethod()> _
Public Function koordinatekle(ByVal _adres_tipi As String, ByVal _lat As Double, ByVal _lng As Double, ByVal _kull_adi As String) As String
Try
Dim _id As Integer = Val(_adres_tipi.Substring(_adres_tipi.IndexOf("-(ID:") + 5))
If Left(_adres_tipi, 2) = "An" Then
Dim sorgu = (From p In tablolar.genel_bilgilers Where p.kullanici_adi = _kull_adi Select p).First
sorgu.lat = _lat
sorgu.lon = _lng
tablolar.SubmitChanges()
End If
If Left(_adres_tipi, 2) = "Ek" Then
Dim sorgu = (From p In tablolar.free_texts Where p.id = _id Select p).First
sorgu.lat = _lat
sorgu.lon = _lng
tablolar.SubmitChanges()
End If
Return 1
Catch ex As Exception
Return ex.Data.ToString
End Try
End Function
javascript 代码调用此服务以便在 div 元素上记录选定的标记位置。
我使用 jquery 不要忘记,因为它大大简化了工作。首先,它看起来很复杂,但非常简单。让我解释一下。
onload函数初始化地图。创建一个地理编码器以查找输入的地址。在“map”div 元素上创建一个地图。在此地图上创建一个标记并为标记拖动事件设置一个侦听器。
codeaddress函数尝试查找用户输入的地址。这个的重要作用:
geocoder.geocode({ 'address': address }, function (results, status) {....
此函数将地址数据发送到谷歌并尝试获取地址的坐标。
另一个函数只是设置数据并通过 Web 服务将它们发送到服务器。
我希望这可以帮助...
如果它有效,别忘了给我投票:) 谢谢。
不是:我假设您已将必要的 google subgrim 密钥和必要的 dll 文件 (GMaps.dll) 添加到您的进程中。