Форум   Статьи   Новости   Файлы   Bugtraq   Сниффер   Друзья   О Клубе
Вернуться   HPC / Кодинг / Другие Языки / Java
   
  Страница 1
  , 17:17   #1
не подтвердил мыло
 
Локация: Корпарационный дом Microsoft
Регистрация: 01.07.2010
Сообщений: 465

Репутация: 3 / 0
Post Создание Java-апплета для отображения географических карт

Многие начинающие Java-программисты, после знакомства с базовыми возможностями и методами создания Java-апплетов, пробуют применить полученные знания для написания уже собственных апплетов - небольших программ, добавляемых к веб-странице. Итак, если вы тоже один из них, то сегодня мы попробуем вместе создать свой несложный апплет для отображения географической карты. Целью создания данного приложения будет то, что часто требуется разместить план или карту того или иного объекта больших размеров.
И поскольку детальное изображение не будет вписываться в дизайн и приведет к медленной загрузке веб-странички, то большинство HTML-программистов прибегает к использованию тега <map>, позволяющему создать несколько "кликабельных" областей на изображении. Мы же, естественно, отстанемся верны Java и попробуем создать апплет Map, который будет отображать общий глобальный план и по щелчку мыши загружать более детальное изображение выделенной области карты. Так как карта у вас будет у каждого своя, то весьма разумно будет создать апплет, который будет можно легко настроить на любые изображения. Вы уже знаете, что параметры апплета задаются в HTML-теге <applet>, поэтому чтобы наш пример был полезнее для вас в освоении Java попробуем для настройки приложения использовать файл конфигурации. Такая конструкция кроме всего прочего позволит "спрятать" от любопытных глаз "конструкцию" вашей карты и не даст скопировать файлы изображений.
Поэтому первое, с чего мы пожалуй начнем проектирование апплета - разработаем структуру файла конфигурации. Итак, Map.dat будет содержать названия графических файлов разных частей карты и координаты областей, где пользователь по щелчку мыши сможет получить "увеличенную" картинку. Следуя нашему техническому
заданию разобъем файл на две части: глобальный вид и детальные изображения с координатами. Итак, получим примерно следущее:
PHP highlight
# Global map picture
V0.jpg

# Map area definition
202 214 55 55 V1.jpg
202 159 55 55 V2
.jpg
257 159 55 55 V3
.jpg
257 214 55 55 V4
.jpg
92 214 55 55 V7
.jpg
147 214 55 55 V8
.jpg
147 159 55 55 V9
.jpg
92 159 55 55 V10
.jpg 
Листинг 1. Файл Map.dat


Используя знак "#" можно будет отделять комментарии от остального содержания файла.

Теперь начнем проектировать непосредственно сам Java-апплет. Создайте файл нашего будущего класса Map.java. И поместите туда следущее:
PHP highlight
import java.applet.*;

public class 
Map extends Applet
{
/**
* Initialization.
*/
public void init()
{
// Прочитать файл конфигурации
// Отобразить карту
}

Листинг 2. Класс Map.java

Как видите из комментариев (Листинг 2) дело осталось за малым: прочитать файл конфигурации и в соответствии с полученными значениями отобразить карту. Начнем с первого. Создадим метод getData() для чтения файла конфигурации Map.dat. Для доступа к файловой системе (чтение файла) нам потребуется использовать классы InputStream и StreamTokenizer из пакета java.io. Класс StreamTokenizer реализует простой лескический сканер, который разбивает поток символов InputStream на лексемы (слова). Это полезно для нас так как наш файл Map.dat содержит различные лексемы: координаты областей в виде чисел и названия файлов. Создав фильтр, можно воспользоваться методом nextToken() для чтения лексем. Он возвращает либо символ, либо константу: StreamTokenizer.TT_EOF, StreamTokenizer.TT_NUMBER, StreamTokenizer.TT_WORD. Фильтрацию комментариев, которые у нас начинаются с символа "#", можно просто осуществить при помощи метода commentChar().

Текст метода будет следующим:
PHP highlight
/**
* Read the data file Map.dat.
*/
protected void getData()
{
InputStream is=null;
int i=0;
int ix=0;
int x=0,y=0,w=0,h=0;

try
{
try
{
is = new URL(getCodeBase(), 
"Map.dat").openStream();
StreamTokenizer st 
new 
StreamTokenizer(is);

st.eolIsSignificant(false);
st.commentChar('#');

while (
st.ttype != 
StreamTokenizer.TT_EOF)
{
st.nextToken();

if (
st.ttype==st.TT_NUMBER)
{
int n = (int) st.nval;
switch (
i)
{
case 
0:
n;
break;
case 
1:
n;
break;
case 
2:
n;
break;
case 
3:
n;
break;
}
i++;
if (
i==4)
{
lPoint[ix] = new Point(x,y);
rPoint[ix] = new Point(w,h);
i=0;
}
//continue;
}

if(
st.ttype==st.TT_WORD)
{
mapFile[ix]=st.sval;
ix++;
}
/* while */
}
catch (
MalformedURLException e) {}
}
catch (
IOException e) {}
count=ix;

Листинг 3. Метод getData()


Вы должны были заметить, что в приведенном коде встретились еще необъясненные поля lPoint и rPoint. Это массивы класса Point в которых мы будем хранить точки, считанные из файла. Класс Point, описанный как часть пакета awt, представляет собой структуру данных, которая может хранить координаты X,Y. mapFile - строковый массив для хранения имен файлов.
code:
P.S. Copyright www.cyberguru.ru ©
 
Пользователь вне форума    
Наши Спонсоры
 

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Video vkontakte Triton Delphi 59 05.06.2011 15:48
Cекретные коды мобильных телефонов TIXAN Сотовый фрикинг 3 10.11.2010 18:49
Всех с праздником Хеллоун!!! anisjon За чашечкой чая 21 31.10.2010 16:46
[Обзор] Ошибки Windows Sma1L Новичкам 1 14.10.2010 21:59
[Статья] Площадка для взлома: головоломки для хакеров stan_q Сайты, Форумы, CMS 1 04.06.2010 23:31



Часовой пояс GMT +2
Powered by vBulletin® 3.x.x Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.

Copyright © 2008 - 2013 «HPC» Реклама на сайте Правила Форума Пользовательское соглашение Работа на сайте
При копировании материалов ставьте ссылку на источник
Все материалы представлены только в ознакомительных целях, администрация за их использование ответственности не несет.