Pull to refresh

Решение задачи с использованием google maps

Решением задачи с использованием google maps.

Нужно сделать сервис который можно будет интегрировать в приложение написаное на delphi.
Описание: пользователь в программе должен указать своё место работы с возможностью его редактирование в дальнейшем.
При выборе в программе пункта меню место работы, выпадает модульное окошко с вебстраничкой нашого сервиса.
image


Пользователь может выбирать место на карте.
Для того что бы сохранить результати, программа вызывает джаваскриптовую функцию getPoint()
и получаю результат масив где:
def метка измениние координат пользователем
lat,lng коодинати
name название обьекта

Если пользователь захочет изменить координаты места работы, выбирает пункт меню редактировать и
выпадает окошко с сервисом где програма вызывает фунцию setPointCord
и передает параметри
lat, lng координати
hint — название метки (в нашем случае адрес места работы)
zoom — увеличение

Для удобства еще написал функцию setPointAddr, где передается адрес(текст) и увеличение
собственно сам код
var map;
var geocoder;
var address;
var ret = new Array();

function initialize() {
map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(50.450939,30.522626), 13);
map.setUIToDefault();
GEvent.addListener(map, "click", getAddress);
geocoder = new GClientGeocoder();

}

function setPointAddr(address,zoom) {

ret.address = address;
ret.def = 'default';
if (!zoom){zoom = 15;}
map.clearOverlays();
if (geocoder) {
geocoder.getLatLng(
address,
function(point) {
if (!point) {
alert(address + " not found");
} else {
map.setCenter(point, zoom);
var marker = new GMarker(point);
map.addOverlay(marker);
marker.openInfoWindow(document.createTextNode(address));

ret.lat = point.lat();
ret.lng = point.lng();

}
}
);
}

}


function setPointCord(lat,lng,hint,zoom) {
ret.lat = lat;
ret.lng = lng;
ret.def = 'default';

if (!hint){hint = '';}
if (!zoom){zoom = 15;}
if (GBrowserIsCompatible()) {
map.setCenter(new GLatLng(lat, lng), zoom);

var marker = new GMarker(new GLatLng(lat,lng));
map.clearOverlays();
map.addOverlay(marker);
var html=hint;
marker.openInfoWindowHtml(html);
geocoder = new GClientGeocoder();

return false;
}
}

function getAddress(overlay, latlng) {
if (latlng != null) {
address = latlng;
geocoder.getLocations(latlng, showAddress);
}
}

//call wenn user change maps
function showAddress(response) {
map.clearOverlays();
if (!response || response.Status.code != 200) {
alert("Status Code:" + response.Status.code);
} else {
place = response.Placemark[0];
point = new GLatLng(place.Point.coordinates[1],
place.Point.coordinates[0]);
marker = new GMarker(point);
map.addOverlay(marker);
marker.openInfoWindowHtml(
place.address);

ret.lat = place.Point.coordinates[1];
ret.lng = place.Point.coordinates[0];
ret.name = place.address;
ret.def = 'changed';

}
}

function getPoint() {
return ret;
}

function searchAddress(address) {
if (geocoder) {
geocoder.getLatLng(
address,
function(point) {
if (!point) {
alert(address + " not found");
} else {
map.setCenter(point, 13);
var marker = new GMarker(point);
map.addOverlay(marker);
marker.openInfoWindow(document.createTextNode(address));

ret.lat = point.lat();
ret.lng = point.lng();
ret.name = address;
ret.def = 'changed';
}
}
);
}
}


html:
body onload="initialize();"
div id="map_canvas"



Демо
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.