PDA

Просмотр полной версии : MapXtreme


Modus
21.11.2010, 22:26
Электронными картами мы занимаемся с начала 2009 года. Первый проект на базе MapXtreme делал один наш очень уважаемый сотрудник, которой в процессе работы всё время ругался на глючность этого продукта. Потом на карты переключилась одна строптивая студентка, которой я таким способом любезно предоставил возможность потешить своё ЧСВ. Она уже тогда удивлялась, почему её предшественник так возмущался: система работала вполне стабильно и предсказуемо.

После её увольнения картами занялся я. С того момента, когда я начал писать какой-то код для работы с картами MapInfo, прошло две недели. Ей-богу, гораздо больше проблем с WCF и DevExpress, что с MapXtreme. Да, содержательно карты сложнее, чем оболочки для баз данных, поэтому подводных камней больше. Но мне почему-то не хочется винить в этом Pitney Bowes. Они свою работу сделали нормально.

Я сразу же сделал то, чего руководство так и не смогло добиться от моих предшественников.

1. Вместо стандартного для MapInfo изменения масшаба по колесу мыши сделал ползунок.
2. Сделал так, чтобы данные, которые нужно динамически подкачивать с сервера и отображать на карте, подкачивались асинхронно, и программа не подвисала каждый раз, когда их требуется подгрузить.
3. Научился переопределять стандартный вид всплывающей подсказки на карте, в результате чего появилась возможность отображать в нём изображение, чего так хотел заказчик. Ещё это позволило избавиться от довольно медленной фазы массовой загрузки текстовых описаний географических объектов с сервера - теперь описание каждого объекта грузится при наведении мыши.
4. Сделал так, чтобы в режиме по умолчанию инструмент менялся динамически: при наведении на объект текущего слоя - выделение, при наведении на свободное место - перемещение карты.

Modus
27.11.2010, 00:57
Вот и я словил такую тему, что слой, на который нестандартным инструментом добавили объект, не перерисовывается. Мой предшественник по работе с MapXtreme это, как оказалось, так и не победил. Причём один слой перерисовывается, другой нет. Найдите 10 отличий, называется.

Удалось сделать костыль (перезагружать весь видимый прямоугольник карты), чтобы гарантированно перерисовывалось, но сервер жалко.

Пытаюсь эмулировать всё то, что делает загрузчик с картой, кроме обращений к серверу - не помогает. Найдите 10 отличий. В базе знаний на сайте Pitney Bowes никакой информации по теме. Предшественник говорит - в этом всё MapInfo.

Modus
27.11.2010, 02:27
Поговорил с уволившейся студенткой.

Она помогла мне найти ошибку. Просто задав правильный вопрос, чтобы я посмотрел в нужное место кода. Просто сервер у меня в одном месте ищет стиль по ID слоя, а не ID стиля. Для слоя, на котором оно работает, случайно оказалось так, что его ID совпадает с ID стиля этого слоя. А для других слоёв не совпадает.

Короче, банальная ошибка в бизнес-логике, и MapXtreme тут ни при чём.

Modus
15.12.2010, 00:51
И всё-таки документация у них - это нечто

Описание метода:

LineStyleRepository.Remove Method

Removes the first occurrence of a specific object from the collection.
Exceptions
System.NotSupportedException Thrown when using this method or property to modify the collection.

А вот что показывает Reflector:

public void Remove(object value)
{
throw new NotSupportedException();
}

Это "Removes the first occurrence of a specific object from the collection." явно было сгенерировано без участия человеческого интеллекта, по существующим описаниям базовых классов.

Мало того, что документация написана так, что требует проверки через Reflector, с точки зрения нормального стиля программирования на C# не поддерживаемые методы реализуемых интерфейсов принято реализовывать явно, чтобы наружу торчало только то, чем можно пользоваться. Это уже явный камень в огород Pitney Bowes.