Подобно в этом примере , но вместо того, чтобы прослушивать клики «map», используйте «маркер» для прослушивания кликов.
Вы сказали, что хотите заставить первый клик находиться на марке геолокации, вам нужно написать код, чтобы проверить местоположение маркера и убедиться, что он является маркером геолокации если вы хотите это сделать. Я бы подумал, что было бы проще просто нажать на один из целевых маркеров, а затем сформировать направления из маркера геолокации (для чего вам нужно будет сохранить специальную ссылку).
Пример, предполагающий, что начало - это фрагмент кода геолокации
из примера:
var geolocation = null;
var ren = null;
function initialize() {
var locations = [
['Hougang', 1.37265, 103.893658],
['Punggol', 1.400617, 103.907833],
['MacRitchie Reservoir', 1.346002, 103.825436],
['Bishan', 1.352051, 103.849125],
['Sentosa', 1.251226, 103.830757]
];
var map = new google.maps.Map(document.getElementById('map_canvas'), {
zoom: 13,
center: new google.maps.LatLng(1.37265, 103.893658),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var infowindow = new google.maps.InfoWindow();
var marker, i;
// Place a marker
geolocation = new google.maps.Marker({
position: map.getCenter(),
map: map,
title: 'Your geolocation',
icon: 'https://maps.google.com/mapfiles/ms/micons/green.png'
});
for (i = 0; i < locations.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[i][1], locations[i][2]),
map: map
});
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.setContent(locations[i][0]);
infowindow.open(map, marker);
if (ren && ren.getMap()) ren.setMap(null);
ren = new google.maps.DirectionsRenderer({
'draggable': true
});
ren.setMap(map);
ren.setPanel(document.getElementById("directionsPanel"));
ser = new google.maps.DirectionsService();
//Cria a rota, o DirectionTravelMode pode ser: DRIVING, WALKING, BICYCLING ou TRANSIT
ser.route({
'origin': geolocation.getPosition(),
'destination': marker.getPosition(),
'travelMode': google.maps.DirectionsTravelMode.DRIVING
}, function(res, sts) {
if (sts == 'OK') ren.setDirections(res);
})
}
})(marker, i));
}
// Check if user support geo-location
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
var geolocpoint = new google.maps.LatLng(latitude, longitude);
var mapOptions = {
zoom: 8,
center: geolocpoint,
mapTypeId: google.maps.MapTypeId.HYBRID
}
// Place a marker
geolocation = new google.maps.Marker({
position: geolocpoint,
map: map,
title: 'Your geolocation',
icon: 'http://labs.google.com/ridefinder/images/mm_20_green.png'
});
});
} else {
// Place a marker
geolocation = new google.maps.Marker({
position: map.getCenter(),
map: map,
title: 'Your geolocation',
icon: 'http://labs.google.com/ridefinder/images/mm_20_green.png'
});
}
}
google.maps.event.addDomListener(window, 'load', initialize);
html,
body,
#map_canvas {
margin: 0;
padding: 0;
height: 100%;
}
Если у вас есть бюджет для этого - Dart сделать несколько классных классов для этого:
http://www.dart.com/ или конкретно http: //www.dart.com/ptftpnet.aspx
Они утверждают, что можно перечислить, listdetails и загрузить через прокси. Однако я не мог заставить это работать с межсетевым экраном isa. Поэтому я отключил прокси-сервер по умолчанию в своем app.config и добавил правило для клиента ForeFront / ISA. Для этого я создал файл c: \ programdata \ microsoft \ firewall client 2004 \ application.ini с содержимым:
[applicationName] DisableEx = 0 Disable = 0 NameResolution = R
где applicationName - это текущий exe минус расширение .exe.
Я знаю, что это не так, как раньше, но да, я могу заставить FtpWebRequest работать с прокси-сервером ftp, используя старые трюки настройки URL-адреса для
"ftp://your.proxy.server/theFileToDownload")"
Тогда установите свои учетные данные в сети
username="ftpUserName@ftp.realserver.com"
и
password="password".
Я помню, как это делалось в плохие старые дни WININET, а иногда старые трюки по-прежнему являются лучшими трюками.
YMMV, конечно.
Если FTP-прокси позволяет указать всю информацию о цели с помощью команд USER
и PASS
, вы можете использовать свойство Credentials
.
Как правило, вы указываете имя пользователя в форме user@proxyuser@host
и пароль в форме password@proxypassword
:
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://proxy/path");
request.Credentials = new NetworkCredential("user@proxyuser@host", "password@proxypassword");
Если прокси не требует аутентификации, используйте форму user@host
и password
:
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://proxy/path");
request.Credentials = new NetworkCredential("user@host", "password");
Но ваш прокси-сервер может также потребовать другого синтаксиса, например:
USER
команд для прокси-сервера пользователь и целевой пользователь хоста OPEN
команда SITE
команда В этих случаях вы не можете использовать FtpWebRequest
. Вы должны использовать стороннюю FTP-клиентскую библиотеку.
Например, с помощью WinSCP .NET assembly вы можете использовать:
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Ftp,
HostName = "host",
UserName = "user",
Password = "password",
};
// Configure proxy
sessionOptions.AddRawSettings("ProxyHost", "proxy");
sessionOptions.AddRawSettings("FtpProxyLogonType", "2");
sessionOptions.AddRawSettings("ProxyUsername", "proxyuser");
sessionOptions.AddRawSettings("ProxyPassword", "proxypassword");
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
// Your code
}
Для параметров для SessionOptions.AddRawSettings
, см. исходные настройки .
Легче настроить параметры прокси-сервера в графическом интерфейсе WinSCP и он создает для вас код кода FTP C # .
Обратите внимание, что сборка WinSCP .NET не является родной библиотекой .NET. Это довольно тонкая оболочка .NET поверх консольного приложения.
(я автор WinSCP)