Геолокация: сопоставление и POI с OpenStreetMap - PullRequest
4 голосов
/ 29 февраля 2012

Я создаю веб-сайт, где посетитель получает свою позицию, отображаемую на карте, и в пределах выбранного радиуса (например, в 10 км) посетитель может видеть некоторые POI (например, рестораны, бары).

У меня естьпока этот код:

<!DOCTYPE html>
<html>
    <head>
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
        <style type="text/css">
            html { height: 100% }
            body { height: 100%; margin: 0; padding: 0 }
            #map_canvas { height: 100% }
        </style>
        <script type="text/javascript"
                src="http://maps.googleapis.com/maps/api/js?key=[MY_KEY]&sensor=false">
        </script>
        <script type="text/javascript">
            function init()
            {
                if(navigator.geolocation)
                {
                    navigator.geolocation.getCurrentPosition (processPosition, handleError);
                }
                else
                {
                    alert("Geolocation not supported in this browser");
                }
            }

            function processPosition(pos)
            {
                var latlng = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);

                var myOptions = {
                    center: latlng,
                    zoom: 16,
                    mapTypeId: google.maps.MapTypeId.ROADMAP
                };
                var map = new google.maps.Map(document.getElementById("map_canvas"),
                myOptions);   

                var marker = new google.maps.Marker({
                    position: latlng, 
                    map: map, 
                    title:"You are here! (at least within a "+pos.coords.accuracy+" meter radius)"
                });   
            }

            function handleError(err)
            {
                alert('An error occurred: ' + err.code);
            }

        </script>
    </head>
    <body onload="init()">
        <div id="map_canvas" style="width:100%; height:100%"></div>
    </body>
</html>

Показывает мою позицию на карте с маркером с использованием Google Maps.Дело в том, что я хотел бы использовать карты из OpenStreetMap (они регулярно обновляются и ограничений нет), но, к сожалению, я пока не смог их реализовать.Вот карты, которые мне нужны: Карты 1. Есть ли пример (учебник), который показывает, как использовать их API, например Google ?2. Есть ли в OpenStreetMap что-то вроде POI, например Google Places ?Или вообще возможно использовать Google Places вместе с картами OpenStreetMap?

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

Если вы хотите использовать данные OpenStreetMap, вам следует изучить OpenLayers . Это работает немного иначе, чем Google Maps или API-интерфейсы Bing Maps: вам необходимо установить JavaScript-библиотеку OpenLayers на свой сервер и позаботиться об отображении данных карты («фрагментов карты»), которые могут поступать из различных источников: OpenStreetMap (OSM), Google Maps, ваши собственные данные карты и т. Д. На веб-сайте OpenStreetMap для отображения карт используется OpenLayers.

1: есть документация (хотя, боюсь, не так хорошо, как для API Карт Google) и множество примеров , включая некоторые для использования данных OpenStreetMap, отдельно или вместе с данными Google (введите «osm» в поле «фильтр» вверху).

2: Что касается POI, вы можете разместить «Слой маркера» на карте, как в в этом примере , включая настраиваемые значки маркеров и пузырьки, которые появляются при нажатии на значки , но вам придется позаботиться о данных для POI и функций поиска самостоятельно. Так что, если вы хотите, вы можете использовать API Google Places и затем отображать результаты в виде маркеров на OpenStreetMap - при условии, что вы отображаете логотип "Powered by Google".

1 голос
/ 14 июня 2013

Список всех платформ OSM, доступных на openstreetmap.org, с особым уведомлением в списке так называемых «веб-карт», поскольку он относится к вашему вопросу: http://wiki.openstreetmap.org/wiki/Frameworks#Webmaps

nJoy!

...