Блог от AS3Coder'a о JavaScript, HTML, CSS... и немного о Flash.

понедельник, 15 марта 2010 г.

Проекция точек на карту мира по географическим координатам

В данной статье мы рассмотрим проекцию точек на карту мира по географическим координатам: широте и долготе. А если сказать точнее, то "Мы рассмотрим проекцию городов". Для примера возьмем посетителей этого блога, и покажем на карте их географию.

Выбор карты

Первым делом необходимо выбрать карту, а точнее картографическую проекцию.

Картографические проекции - это математические способы изображения на плоскости поверхности земного эллипсоида или шара.

Проекции различают по характеру изображения:
  • равноугольные, 
  • равновеликие,
  • произвольные; 
и по виду изображений параллелей и меридианов:

Цилиндрические
Конические
Азимутальные
Поликонические
Псевдоконические
Псевдоцилиндрические:
Наиболее популярными являются цилиндрические карты. Мы же выберем превдоцилиндрическую проекцию "Произвольная псевдоцилиндрическая проекция Робинсона (Robinson Cylindrical)".



Преобразование координат

Если посмотреть на вышеприведенную схему, то видно, что величина долготы обратно-пропорциональна модулю значения широты. Т.е. при увеличении модуля широты уменьшается   долгота. А величина широты, прямо-пропорциональна модулю её значению. Т.е. чем больше модуль значения, тем больше величина.

Из этого следует что у нас есть две пропорции, зависящие от значения широты.
  • PLEN - Пропорция изменения величины долготы
  • PDFE - Пропорция изменения величины широты


---------|--------|-------
Latitude | PLEN   | PDFE
---------|--------|-------
00       | 1.0000 | 0.0000
05       | 0.9986 | 0.0620
10       | 0.9954 | 0.1240
15       | 0.9900 | 0.1860
20       | 0.9822 | 0.2480
25       | 0.9730 | 0.3100
30       | 0.9600 | 0.3720
35       | 0.9427 | 0.4340
40       | 0.9216 | 0.4958
45       | 0.8962 | 0.5571
50       | 0.8679 | 0.6176
55       | 0.8350 | 0.6769
60       | 0.7986 | 0.7346
65       | 0.7597 | 0.7903
70       | 0.7186 | 0.8435
75       | 0.6732 | 0.8936
80       | 0.6213 | 0.9394
85       | 0.5722 | 0.9761
90       | 0.5322 | 1.000
Естественно градация в 5 градусов для широты огромна, и для отображения городов на карте не приемлема. Поэтому необходимо заполнить эту табличку для каждого целого числа от 0 до 90 градусов. А уже имея заполненную табличку с пропорциями, несложно сделать преобразование координат. Для всего этого я написал класс, который сделает всё за нас.

ru.as3coder.map.projection.Robinson.as

В конструктор экземпляра нужно передать ссылку на экземпляр карты Робинсона класса flash.display.DisplayObject. При инициализации автоматически заполнятся массивы с пропорциями, после чего будет доступен метод преобразования координат export c параметрами latitude и longitude, который вернет экземпляр класса flash.geom.Point с координатами для указанного в конструкторе экземпляра карты.

var robinson:Robinson = new Robinson(map_sprite);
var point:Point = robinson.convert(55.7558, 37.6176);

География посетителей

В качестве примера я обещал привести географию посещения моего блога на карте мира.


Использованы данные на 11 марта 2010 года.

8 комментариев:

  1. на самом деле лучшим вариантом было бы использование проекции Меркатора

    ОтветитьУдалить
  2. Проекция Меркатора имеет простейший алгоритм преобразования координат, поэтому она наиболее популярна :)

    ОтветитьУдалить
  3. спасибо, ценные обобщения
    хотя, меркаторская (цилиндрическая) проекция и удобнее и нагляднее ( имхо, канеш)

    ОтветитьУдалить
  4. ps
    я такую штуку(отмечать посетителей на глобусе), начинал делать, да бросил (не понятно мне кто откуда зашел и как это следить), но заготовка осталась http://silin.su/AS3/zod/update/bin
    глянь, может сгодится на что

    ОтветитьУдалить
  5. Спасибо :) Я тоже начинал делать 3D-глобус, но позже бросил в связи с низкой эффективностью. Оказалось, что гораздо удобнее смотреть данные на плоскости :) Для того, чтобы легко вести статистику посещений вашего сайта можно воспользоваться Google Analytics или Яндекс.Метрика

    ОтветитьУдалить
  6. А расскажите пожалуйста, каким сервисом вы пользуетесь, для получения города и его географических координат по IP адресу.

    ОтветитьУдалить
  7. Есть отличный сервис Google Analytics. Там есть раздел "География посещений" с экспортом в .xml-файл. В полученном файле будет список городов с географическими координатами, из которых были зафиксированы посещения вашего сайта.

    ОтветитьУдалить
  8. Эх, я думал, подскажите какой-нибудь real-time сервис :(
    все равно спасибо.

    ОтветитьУдалить

Можно использовать некоторые HTML-теги, например <b>, <i>, <a>

Поиск по блогу

Обо мне



Farid Shamsutdinov (AS3Coder)
Russia, Tatarstan, Kazan
as3coder@gmail.com

Подробнее...

Постоянные читатели

© 2014 Farid Shamsutdinov. При копировании материалов, ссылка на источник обязательна. Технологии Blogger.