Автор: Марк Валтерс
Перевод: Голкова Л.А.
Описание: Перевод статьи "Learn how to geocode with Papervision3D and Adobe Flex". Статья посвящена понятию геокодирования и использованию его в технологиях Adobe Flex.
http://www.adobe.com/newsletters/edge/june2008/articles/article2/index.html?trackingid=DEKYF
Представление точных географических местоположений на земле, или geocoding, стало популярной темой в последнее время. Все поставщики услуг картографии, такие как Google, MapQuest, и Yahoo!, geocode обращается на их соответствующих картах, таким образом Вы можете легко видеть определенное местоположение и получить указания между многократными местоположениями. С каждой из этих услуг, теперь обеспечивающих общественную API, любой может создать mashups showcasing данные всех типов (таких как фотографии, видео, и корм RSS) на картах, чтобы связать данные визуально с географическим местоположением.
Большинство приложений в интернете сейчас начинает встраивать карты местности.
Работе с картами, используя Google Map API, посвящена данная статья.
Далее описываются принципы работы с Google API, реализованы наипростейшие классы используя SimpleXML (многим может показаться, что код чрезвычайно прост). Термины geocoding и geocoder в статье оставлены на английском языке.
Фактически мы только создадим землю. Я оставлю небеса Вам.
Geocoding - это процесс нахождения широты и долготы по введенному адресу. Google предоставляет бесплатный доступ к разработанному инструментарию, доступ к которому можно получить используя как JavaScript API, так и вебсервис.. В этой статье показывается как получить доступ к вебсервису geocoder, использую PHP.
Существует большое количество приложений для определения широты и долготы, многие из них бесплатны. Вот некоторые примеры как можно их использовать:
Когда вы используете Google Maps для отображения карт на сайте, самый лёгкий путь использовать JavaScript API, однако это не всегда является оптимальным решением.
Например, если ваше приложение записывает координаты по адресу, который вводит пользователь, данное решение не будет работать для тех пользователей, у которых отключен JavaScript. Для предотвращения такой ситуации мы можем использовать веб-сервис для перенаправления всех запросов к geocoder на сервер.
В данной статье будут разработаны некоторые классы, которые помогут получить быстрый доступ к geocoder.
Первое что необходимо сделать для использования Google Maps API это создать API ключ для вашего сайта. По данному ключу будут идентифицированы все ваши запросы к этому API.
В настоящее время максимальное количество запросов к geocoder ограничено и составляет 15000 в день. Но вы можете кэшировать ответы geocoder.
Получив ключ, вы можете обращаться к geocoder.
Когда вы осуществляете запрос к geocoder, вы можете указать в каком формате вы желаете получить ответ. Возможные варианты форматов: JSON, XML, KML и CSV. В данной статье описаны манипуляции с ответами в XML.
KML (расшифровка Keyhole Markup Data) это XML формат, разработанный для использования программой Google Earth. Данные ответов в KML и XML от geocoder идентичны.
Несмотря на то, что JSON используется обычно с JavaScript, мы можем также использовать его в своем приложении. Для работы с JSOM, используя PHP, В данной статье для обработки XML данных от geocoder используется расширение
//Create a null object for the camera to copy.
cameraTarget = new DisplayObject3D();
scene.addChild( cameraTarget );
//Rotate the camera target to have the camera face America.
cameraTarget.yaw( 180 );
//Create the globe.
globe = new Globe();
scene.addChild( globe );
//Set the camera's focus and zoom.
camera.focus = 1100;
camera.zoom = 1;
Первый полезный элемент, который включается в каждый элемент placemark это отформатированный адрес address. Это очень важно, так как пользователи по разному могут вводить одинаковые адреса. Если посмотреть на пример выше, то можно увидеть, что была введена для поиска строка «1600 pennsylvania ave washington dc», а в качестве ответа получена «1600 Pennsylvania Ave NW, Washington, DC 20006, USA».
Мы нуждаемся в способе восстановить широту и пункты долготы любого географического местоположения, которое введено в текстовую область, таким образом мы можем точно подготовить местоположения на земном шаре. К счастью, это - простой процесс с помощью одной из API услуг карты.
Следующий элемент это AddressDetails, который использует Extensible Address Language (xAL) для предоставления информации. У данного элемента есть атрибут Accuracy, который указывает степень точности определения местоположения. Возможные значения атрибута Accuracy: В примере выше значение атрибута равно 8, что указывает на самый высокий уровень точности.
Другие элементы внутри элемента AddressDetails описывают части найденного места в соответствии со спецификацией языка xAL.
Каждый элемент placemark содержит элемент Point. Этот элемент содержит данные разделенные запятой. Первый элемент - долгота; второй - широта; третий аргумент – высота над уровнем моря (не используется).
Приступим к реализации класса Geocoder. Этот класс будет содержать метод lookup(), входными данными которого будет являтся адрес для поиска, в качестве результат возвращаться будет массив из элементов класса Placecmark с найденными местами.
Восстановление широты и долготы географических местоположений является легкой частью. Заговор их в правильном местоположении может быть хитрым.
Давайте смотреть на то, что мы имеем и что мы должны будем выполнить эту задачу. У нас есть трехмерная сфера, которая была нанесена на карту с Меркаторским проектированием земли. У нас также есть широта и пункты долготы любого местоположения на земле. То, в чем мы нуждаемся, является алгоритмом для того, чтобы преобразовать эти географические местоположения в x, y, и пункты z на земном шаре.
x = r sin ? cos ?
y = r sin ? sin ?
z = r cos ?
где r - радиус; ? - тета, или широта; и ? - phi, или долгота.
Вы не должны быть чрезмерно обеспокоены в том, почему или как математика работает, только знайте, что она делает. То, о чем Вы действительно должны знать, - то, что y и z фактически должны будут быть обменяны в алгоритме, потому что алгоритм предполагает, что z находится в одном направлении, в то время как Papervision3D предполагает, что это находится в различном направлении. Единственная другая вещь, чтобы знать - то, что Вы, возможно, должны возместить широту и долготу определенным числом степеней, в зависимости от размещения карты на земном шаре. Наш должен будет иметь широту, перемещенную, 90 степеней и долгота переместили 15 степеней.
Как я сказал, математика - хитрая часть, но если Вы можете закончить это и признать, что это работает, Вы будете намного более счастливыми.
Таким образом теперь все, что Вы должны сделать, является захватом текстовый вход от текстовой области и передавать это к обслуживанию карты API. От API Вы получите широту и пункты долготы местоположения. Теперь передайте широту, долготу, и радиус земного шара к алгоритму. Алгоритм обеспечит x, y, и координаты z местоположения. Вы будете использовать эти пункты, чтобы подготовить маркер на земном шаре.
Теперь у Вас есть Сгибать заявление, которое может подготовить точную широту и пункты долготы на трехмерном земном шаре земли. Это - довольно сложная тема, но если Вы сделали это настолько далеко и или создавали или смотрели на классы GeoGlobe, у Вас есть начала большого заявления. Теперь рассмотрите добавляющие фотографии и видео или даже прослеживание Ваших друзей, поскольку они бродят по миру. Определенно выройте в Papervision3D и ПЧЕЛУ обслуживания карты, чтобы видеть то, что еще они должны предложить. Оба идут намного глубже, чем любая статья может касаться.
Благодаря команде в Papervision3D, Карлосе Ульоа, Джоне Грдене, и Ральфе Ховерте, для того, чтобы рассмотреть эту статью и исходный текст. Особенная благодарность выходит к Карлосу Ульоа для того, чтобы проверить использование и объяснение математики в статье. Я также хочу благодарить Шайеннский Throckmorton за его детальный обзор с большой технической способностью проникновения в суть на статье. Наконец, большое спасибо идет к Джеймсу Хэстингсу-Трю Планетарного Торгового центра Пиксела для того, чтобы позволить нам, используют его невероятную земную карту структуры. — Марк Уолтерс