2010-01-20 2 views
0

Я читаю набор широт & Координаты долготы, которые определяют область полигона. Они привязаны к идентификатору области, и я извлекаю их из базы данных SQL. Так, например, Area ID 153 может иметь 20 координат, а ID области 77 может иметь 11 координат. Я хочу сохранить их в двухмерном массиве, индексированном идентификатором области, и где каждая координатная пара объединяется в один объект Google LatLng. В дальнейшем я хочу получить только одну строку, то есть набор координат для одной области, и отправить их функции, которая принимает массив координат и рисует многоугольник на карте. Вот что у меня есть:ActionScript: Как нажимать на многомерные массивы и позже извлекать только одну строку.

private var coordsFromSql:ArrayCollection = new ArrayCollection(); 

var polyArray:Array = new Array(); 

for each(var item:COORDINATES in coordsFromSql) 
{ 
    // add coordinates to the array for each Area id     
    polyArray[item.AREA_ID].push(new LatLng(item.LATITUDE, item.LONGITUDE)); 
} 

Так вот, где первая проблема возникает. Я не знаю, как добавить переменное количество новых элементов в 2-мерный массив в известный индекс. i.e рассматривая polyArray как двухмерную таблицу, как я, например, добавляю значения в 'row' 77, то есть polyArray [77]? Если я запускаю приведенный выше код, я получаю ошибку времени выполнения # 1010 'Термин не определен и не имеет свойств'

Вторая часть вопроса - как вы извлекаете одну строку в качестве нового массива? Используя приведенный выше пример для вызова функции drawPolygon, могу ли я сделать это?

var polyArraySlice:Array = polyArray[77].slice();     
drawPolygon(color, polyArraySlice);     
+0

у вас есть дополнительный} в конец вашего кода. – Ponkadoodle

+0

Да, неправильно прочитайте private var как объявление функции. я подберу его. – Herms

ответ

2

Похоже, что ваш код загрузки является близким, но не совсем. В вашей петле вы делаете:

polyArray[item.AREA_ID].push(/*...*/) 

но вы на самом деле ничего не кладете в массив.

Так что ваша нагрузка, вероятно, будет что-то вроде этого:

var polyArray:Array = [] 

for each(var item:COORDINATES in coordsFromSql) 
{ 
    // add coordinates to the array for each Area id     
    var id:Number = item.AREA_ID; 
    if(polyArray[id] == null) { polyArray[id] = [] } 
    polyArray[id].push(new LatLng(item.LATITUDE, item.LONGITUDE)); 
} 

Получение копии одного из отдельных местах будет работать так же, как у вас:

var polyArraySlice:Array = polyArray[77].slice();     
drawPolygon(color, polyArraySlice);   
+0

Спасибо, ребята. Отлично работает! Mark. – 2010-01-21 21:00:35

 Смежные вопросы

  • Нет связанных вопросов^_^