Я заинтересован в написании упрощенного навигационного приложения в качестве любимого проекта. После поиска бесплатных картографических данных я остановился на данных Бюро переписей США TIGER 2007 Line / Shapefile. Данные разбиты на zip-файлы для отдельных округов, и я загрузил одну карту-данные округов для своего района.
Как лучше всего читать эти картографические данные в пригодном для использования формате?
Как я должен:
- Читать в этих файлах
- Разобрать их - Регулярное выражение или какая-то библиотека, которая уже может анализировать эти шейп-файлы?
- Загрузка данных в мое приложение. Должен ли я загружать точки непосредственно в некоторую структуру данных в памяти? Использовать небольшую базу данных? Мне не нужно постоянство, как только вы закроете приложение с данными карты. Пользователь может снова загрузить шейп-файл.
Как лучше всего отобразить карту после прочтения данных в Shapefile?
В идеале я хотел бы иметь возможность читать шейп-файл данных карты округов, рендерить все полилинии на экран и разрешать вращение и масштабирование.
Как мне:
- Преобразовать широту / долготу в экранные координаты? - Насколько я знаю, Shapefile использует долготу и широту для своих точек. Поэтому, очевидно, мне придется каким-то образом преобразовать их в экранные координаты, чтобы отобразить элементы карты.
- Отобразить данные карты (серию полилиний для дорог, границ и т. Д.) Таким образом, чтобы я мог легко вращать и масштабировать всю карту?
- Отображать всю мою карту как серию "плиток", чтобы отображались только элементы / линии в пределах области просмотра?
Ex. данных TIGER, отображаемых как карта отображения:
Любой, у кого есть некоторый опыт и понимание того, что мне лучше всего читать в этих файлах, как я должен представлять их (база данных, структура данных памяти) в моей программе, и как я должен отображать (с вращением / масштабированием) данные карты на экране будут оценены.
РЕДАКТИРОВАТЬ: Чтобы уточнить, я не хочу использовать API карт Google или Yahoo. Точно так же я не хочу использовать OpenStreetMap. Я ищу более подход с нуля, чем использование этих API / программ. Это будет приложение desktop .