GOOGLE MAPS API V3 – это то, что я пытаюсь использовать.
У меня есть все координаты в mysql. Я просто, например, должен взять 5 списков и поместить их на карту, но я бы хотел, чтобы можно было найти центр, основанный на нескольких координатах, которые я хотел бы отображать, и уровне масштабирования. Да, знаете?
У меня время моей жизни с чем-то, что я знаю, ужасно просто, я просто не могу понять этот API. Я буду платить 20 долларов всем, кто может мне помочь.
//select * from mysql limit 5 //ok great we got 5 results, great job, format the 5 results so google maps like it, [name,lat,lng] whatever. //put them on the map and let them be clickable so i can put stuff in the infowindow thing //make the map adjust to the proper zoom level and center point
Это то, что я искал, надеюсь, что это поможет другим.
кредит [Крису B] для формулы здравого смысла математики для получения координаты центра, sw-шнур – это самый низкий лат и lon, а ne-координата – наибольший лат и lon
sort($lat)&&sort($lon); $r['c'] = array_sum($lat)/count($lat).', '.array_sum($lon)/count($lon); $r['ne'] = $lat[count($lat)-1].', '.$lon[count($lon)-1]; $r['sw'] = $lat[0].', '.$lon[0];
var myOptions = {zoom:4,center: new google.maps.LatLng(<?php echo $r['c']; ?>),mapTypeId:google.maps.MapTypeId.ROADMAP} var map = new google.maps.Map(document.getElementById("map_canvas"),myOptions); <?php foreach($x as $l) echo 'new google.maps.Marker({position:new google.maps.LatLng('.$l['lat'].','.$l['lon'].'),map:map,clickable:true});'; ?> map.fitBounds(new google.maps.LatLngBounds(new google.maps.LatLng(<?php echo $r['sw']; ?>),new google.maps.LatLng(<?php echo $r['ne']; ?>)));
Если средняя / взвешенная точка центра приемлема – вы можете просто усреднить все широты и усреднить все долготы:
$latTotal = 0; $lngTotal = 0; foreach ($markers as $marker) { $latTotal += $marker['lat']; $lngTotal += $marker['lng']; } $centerLat = $latTotal/count($markers); $centerLng = $lngTotal/count($markers);
В остальном, в Google есть хорошие учебники V3.
Я использовал Google Maps v3 месяц или два назад, но позже переключился на v2. Однако у меня была такая же проблема, как и вы, поэтому я написал класс MarkerManager для API v3. Я не могу найти последнюю версию своего класса, но я нашел, надеюсь, рабочий. Вы можете получить его здесь .
Я должен предупредить вас, хотя это вообще не оптимизировано и не использует оверлеи, поэтому, когда я пытался помещать 50+ маркеров в менеджер и переключил скрытие / показать, что класс sloooow … Но, может быть, у вас может быть некоторый успех с Это.
Пример использования:
var map = new google.maps.Map(document.getElementById('MapLayerId'), { zoom: 7, position: new google.maps.LatLng(latitude, longitude), mapTypeId: google.maps.MapTypeId.ROADMAP }); var marker1 = new google.maps.Marker({ position: new google.maps.LatLng(latitude, longitude), map: map }); var marker2 = new google.maps.Marker({ position: new google.maps.LatLng(latitude, longitude), map: map }); var manager = new MarkerManager(map, {fitBounds: true}); manager.add(marker1); manager.add(marker2); manager.show();
GDownloadUrl в эквиваленте V2 downloadUrl в GOOGLE MAPS API V3
Как загрузить все координаты в базе данных (Mysql или Sql).
var myLatlng = new google.maps.LatLng("37.427770" ,"-122.144841"); var myOptions = {zoom: 15, center: myLatlng, mapTypeId: google.maps.MapTypeId.ROADMAP,} map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); var url='marker.php?arg1=x&arg2=y...'; downloadUrl(url, function(data) { var markers = data.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { var latlng = new google.maps.LatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng"))); var marker = new google.maps.Marker({position: latlng, map: map}); } }); function createXmlHttpRequest() { try { if (typeof ActiveXObject != 'undefined') { return new ActiveXObject('Microsoft.XMLHTTP'); } else if (window["XMLHttpRequest"]) { return new XMLHttpRequest(); } } catch (e) { changeStatus(e); } return null; }; function downloadUrl(url, callback) { var status = -1; var request = createXmlHttpRequest(); if (!request) { return false; } request.open('GET', url); request.onreadystatechange = function() { if (request.readyState == 4) { try { status = request.status; } catch (e) { // Usually indicates request timed out in FF. } if (status == 200) { var s=request.responseText; callback( xmlParse(s) ); } } } try { request.send(null); }catch (e) { changeStatus(e); } }; function xmlParse(str) { if (typeof ActiveXObject != 'undefined' && typeof GetObject != 'undefined') { var doc = new ActiveXObject('Microsoft.XMLDOM'); doc.loadXML(str); return doc; } if (typeof DOMParser != 'undefined') { return (new DOMParser()).parseFromString(str, 'text/xml'); } return createElement('div', null); }
Вы проверили официальную учебную программу google map PHP / Mysql? http://code.google.com/apis/maps/articles/phpsqlajax.html
Попробуйте этот алгоритм для нахождения центроида многоугольника: