Групиране на същите lat/lng gmaps v3

На моя уебсайт имам формуляр, който позволява на потребителите да се регистрират. Той изисква от потребителите да предоставят своя град, щат и държава. Имам и карта, която пуска маркер за всеки потребител въз основа на ширина/дължина, която е извлечена от тази комбинация от град, щат, държава ($location).

Тъй като не съм супер конкретен (като например, не питам техния ДЕЙСТВИТЕЛЕН адрес), имам няколко потребители, които имат една и съща шир. И това създава проблем, когато се опитвам да видя маркери на моята карта.

Трябва ли да използвам услуга за клъстериране? Ако е така, имате ли някакви предложения?? Както казах, информацията тече от mySQL база данни --> XML --> PHP.

Ако е така, ще бъде групиран на най-увеличеното ниво (както казах, същата шир./дължина). В резултат на това ще ми трябва информационен прозорец, който ми позволява да избирам всеки потребител на това конкретно място.

Идеи? Предложения??? Оценявам го!!!

Джереми


person jthespartan    schedule 19.11.2010    source източник


Отговори (2)


MarkerClusterer: http://gmaps-utility-library.googlecode.com/svn/trunk/markerclusterer/1.0/docs/examples.html

Или на ръка (приблизително - само примерен код!)

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

        var markers = [];
        var newmarkers = [];

        for(var j=0; j<5; j++) {
            markers.push({lat:-33.8671390, lng:151.2071140, title:'This is marker #' + i });

            if(j==0) newmarkers.push(markers[j]);
            for(var i=0; i<newmarkers.length; i++) {
                if(newmarkers[i].lat == markers[j].lat && newmarkers[i].lng == markers[j].lng) {
                    newmarkers[i].title += ' AND ' + markers[j].title;
                    continue;
                }
                newmarkers.push(markers[j]);
            }
        }

        for(var i=0; i<newmarkers.length; i++) {
            var mkr = new google.maps.Marker({
                position: new google.maps.LatLng(newmarkers[i].lat, newmarkers[i].lng), 
                map: map, 
                title: newmarkers[i].title
            });
        }
person Jonathan    schedule 19.11.2010
comment
Джонатан: погледна тази връзка. Благодаря, че го изпрати. Не съм сигурен, че това прави това, за което имам нужда. Изглежда, че повечето от маркерите са изтеглени от различни набори ширина/дължина. Докато много от моите ще бъдат същите. Предложения??? - person jthespartan; 19.11.2010
comment
Тази библиотека извършва клъстериране на квадратна основа. Това означава, че задавате разстояние в пиксели и всичко вътре в кутията е групирано. Така че можете да опитате да зададете малка стойност на разстоянието. В противен случай ще трябва да анализирате своята колекция от местоположения и да я добавите към друга колекция, като сравнявате всяко местоположение с тези в новата колекция. - person Jonathan; 19.11.2010
comment
Имам редица хора, посочващи Vance AFB, OK, САЩ като свое местоположение. Ширата/дължината за това е: ширина=36.343071 дължина=-97.907806. Значи искаш да кажеш, че когато въвеждам тази информация в моята база данни, трябва да трансформирам тази последна цифра всеки път? Това може да е страхотно... да има няколко маркера в малко пространство. Тогава потребителите просто ще трябва да увеличат мащаба, за да видят кой е там. Тази карта е основно за целите на ефекта. Сортируемата база данни предоставя цялата истинска информация. - person jthespartan; 20.11.2010

Мислех да поставя моя код:

function load() { if (GBrowserIsCompatible()) { var map = new GMap2(document.getElementById("map")); map.addControl(new GSmallMapControl()); map.addControl(new GMapTypeControl()); map.setCenter(new GLatLng(47.614495, -122.341861), 2); map.enableScrollWheelZoom();

GDownloadUrl("world_xml.php", function(data) { var xml = GXml.parse(data); var markers = xml.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { var first_name = markers[i].getAttribute("first_name"); var last_name = markers[i].getAttribute("last_name"); var email = markers[i].getAttribute("email"); var affiliation = markers[i].getAttribute("affiliation"); var status = markers[i].getAttribute("status"); var service = markers[i].getAttribute("service"); var rank = markers[i].getAttribute("rank"); var specialty = markers[i].getAttribute("specialty"); var city = markers[i].getAttribute("city"); var state = markers[i].getAttribute("state"); var country = markers[i].getAttribute("country"); var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng"))); var marker = createMarker(point, rank, first_name, last_name, email, affiliation, status, service, specialty, city, state, country); map.addOverlay(marker); } });

} }

функция createMarker(точка, ранг, име, фамилия, имейл, принадлежност, статус, услуга, специалност, град, щат, държава) { var marker = нов GMarker(точка); var html = "" + ранг + " " + first_name + " " + last_name + "
" + service + ", " + status + "
" + speciality + "
" + принадлежност + "
" + град + ", " + държава + " " + държава + "
" + имейл + "
" + " "; GEvent.addListener(marker, 'click', function() { marker.openInfoWindowHtml(html); }); маркер за връщане; }

person jthespartan    schedule 20.11.2010