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

Пользователь может выбирать место на карте.
Для того что бы сохранить результати, программа вызывает джаваскриптовую функцию getPoint()
и получаю результат масив где:
def метка измениние координат пользователем
lat,lng коодинати
name название обьекта
Если пользователь захочет изменить координаты места работы, выбирает пункт меню редактировать и
выпадает окошко с сервисом где програма вызывает фунцию setPointCord
и передает параметри
lat, lng координати
hint — название метки (в нашем случае адрес места работы)
zoom — увеличение
Для удобства еще написал функцию setPointAddr, где передается адрес(текст) и увеличение
собственно сам код
html:
Демо
Нужно сделать сервис который можно будет интегрировать в приложение написаное на delphi.
Описание: пользователь в программе должен указать своё место работы с возможностью его редактирование в дальнейшем.
При выборе в программе пункта меню место работы, выпадает модульное окошко с вебстраничкой нашого сервиса.

Пользователь может выбирать место на карте.
Для того что бы сохранить результати, программа вызывает джаваскриптовую функцию 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"
Демо