Shyroop, в общем твоя задача состоит из трех основных частей:
1) построение карты городов на основании данных сервера (XML)
2) админ карты для добавления городов и маршрутов
3) подсветка маршрутов.
пойдем по порядку:
1. построение карты городов на основании данных сервера (XML)
тебе от сервера нужен XML вида:

Код:
<map>
<city id="0" _x="50" _y="50" to="1,2,3,4,5,6">
<![CDATA[<B>Москва</B>]]>
</city>
<city id="1" _x="50" _y="20" to="0,2,3,4,5,6">
<![CDATA[Питер]]>
</city>
...............
</map>
где to - это id-шники городов с которыми связан данный город,
остальное, думаю, понятно.
после загрузки XML ты попросту бежишь по узлам типа:

Код:
_root.xml_url = _root.xml_url.length ? _root.xml_url : 'map.php';
this.map_xml = new XML();
this.map_xml.ignoreWhite = true;
this.map_xml._parent = this;
this.map_xml.onLoad = function(ok) {
if (this.status or !ok) {
return trace('loaded: '+ok+' valid: '+!this.status);
}
this._parent.BuildMap(this);
};
this.map_xml.load(this.xml_url);
//
this.BuildMap = function(in_xml) {
var depth = this.getNextHighestDepth();
var city_holder_mc = this.createEmptyMovieClip("city_holder_mc", depth);
var node = in_xml.firstChild.firstChild;
var i = 0
while (node) {
city_holder_mc.attachMovie("city_mc", "city"+(i++)+"_mc", i, {in_xml:node});
node = node.nextSibling;
}
};
- при этом твой мувик, залинкованный в либе как city_mc должен быть членом класса, например City.
в конструкторе класса копируешь атрибуты в мувик:

Код:
var obj = this.in_xml.attributes
for (var i in obj) {
this[i] = obj[i]
}
и твой город становится на место.
затем отображаешь имя:
this.name_txt.htmlText = this.in_xml.firstChild.nodeValue
и настраиваешь текст поле типа:
this.name_txt.autoSize = true
и всё такое.
всё, все стоят по местам и отображены.
организация подсветки проста:
в том же конструкторе делаешь объект,
который тебе укажет на наличие связи с городами:

Код:
this.to_cities_obj = {}
this.to = this.to.split(",")
var length = this.to.length
for (var i=0;i<length; i++){
this.to_cities_obj[this.to[i]] = true
}
и впоследствии ты легко можешь узнать ниличие такой связи вот так:

Код:
finction isCityConnected (city_id) {
return Boolean(this.to_cities_obj[city_id])
}
город обязательно подключаешь к вещателю, можно к
вещателю класса,
можно к другому как кому нравится, но в любом случае при клике
вещаем событие и передаем в качестве параметра свой id и координаты:

Код:
function onRelease () {
какой_то_вещатель.broadcastMessage("onShowLines", this.id, ths._x, this._y)
}
и разумеется у городов должен быть обработчик события:

Код:
function onShowLines (id, x, y) {
if (isCityConnected(id)) {
this.drawLineToCity(x,y)
}
}
думаю, тут дальше всё понятно и можно перейти к следующей части:
2. админ карты для добавления городов и маршрутов
я админ совмещаю с картой. т.е. это всегда один проект.
карта это всегда заодно и админ.
просто, чтобы карту показать в режиме админа, я использую передачу
через flashvars переменной, например admin=true и далее проверяю
if (_level0.admin=="true"){
// значиццо админский режим.
}
тут всё тоже очень просто:
если админский режим, то при драге меняем координаты у города - мувика, например:

Код:
function onPress () {
this.startDrag()
}
function onMouseUp () {
this.stopDrag()
this.updateXML()
}
function updateXML () {
this.in_xml.attributes._x = this._x
this.in_xml.attributes._y = this._y
}
практически то же самое делаешь, когда изменяется текст названия города, только делаешь это на событие потери фокуса у текст поля.
(естественно, в админском режиме оно должно быть редактируемым)
и при установлении связей добавляешь id города в массив to и присваиваешь его соответствующему атрибуту:
this.in_xml.attributes.to = this.to.join(",")
таким образом твой XML в админке всегда готов к отправке и записи на сервак.
остальное, надеюсь разберешься.
удачи,
iv