2016-01-11 5 views
-1

В моем приложении я хочу группировать адреса элементов по областям, мои объекты уже используют API карт Google для выбора адреса и имеют координаты Lat/Long. Я хочу группировать их по областям автоматически.Область поиска API Карт Google по адресу

пример будет Если у нас есть адрес https://www.google.com/maps/place/Erfurto+g.+1,+Vilnius+04220,+Lietuva/@54.6765968,25.2102183,15.5z/data=!4m2!3m1!1s0x46dd9398506f84bd:0x6cc62f1d26bc6613

Он должен автоматически присваивается области, отмеченной здесь: https://www.google.com/maps/place/Lazdynai,+Vilnius,+Lietuva/@54.6702541,25.1870655,14z/data=!4m2!3m1!1s0x46dd93a6cc53ba05:0x2600d18d4c454331

районы должны быть также введены в моем приложении.

Как я понимаю, я должен хранить все координаты MultiPolygon в моем back-end, а затем использовать некоторый алгоритм, чтобы найти, соответствуют ли координаты адреса этому полигону? Я прав? Или я могу получить это, используя API карт Google?

+1

Вы можете быть более конкретным, пожалуйста? Скажите мне, что у вас (в базе данных?). У вас есть границы старейшин? У вас есть расположение маркеров? ... И скажите мне, где вы хотите получить эти результаты. Вы помещаете его в форму и отправляете результат на сервер (базу данных)? ... –

+0

@EmmanuelDelay В базе данных у меня есть элементы с адресами и марками местоположения (широта/долгота), уже извлеченные из Maps API. Кроме того, у меня есть несколько старейшин, предметы теперь назначаются старейшинам вручную. Я хочу сделать это автоматически. Фактический вопрос: какая информация дополнительно должна храниться для старейшинства (возможно, полигональные координаты или placeID из Maps API) И как я могу определить, что этот элемент принадлежит этому старейшине. Я хочу использовать эти результаты при фильтрации по старости. – saniokazzz

ответ

1

Я сделал несколько очень грубых полигонов (извините, если я оскорбляю кого-нибудь из Вильнюса :)), но я думаю, вы получите эту идею.

основной метод, который вы ищете, google.maps.geometry.poly.containsLocation()

Так что я думаю, что это дает вам компоненты, необходимые; плющилки. Но если есть что-то конкретное, что вы хотите, пожалуйста, скажите мне.

<!DOCTYPE html> 
<html> 
<head> 
    <style> 
    html, body, #map-canvas { 
     height: 400px; 
     margin: 0px; 
     padding: 0px 
    } 
    #my_div { 
     border: 1px solid grey; 
    } 
    </style> 
    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?libraries=geometry"></script>  
    <script> 
    // these are very rough estimations of the Elderships of Vilnius 
    // please use the correct boundaries 
    var polygonData = [ 
     {name: 'Senamiestis', color: '#ff0000', points: [[54.68256489008578, 25.315074920654297],[54.67631238544733, 25.30803680419922],[54.670555259971174, 25.288639068603516],[54.6752205795425, 25.269927978515625],[54.68812186362444, 25.259113311767578],[54.69506701073871, 25.26529312133789],[54.68832031289468, 25.30099868774414]]}, 
     {name: 'Rasos', color: '#00ff00', points: [[54.669066215366605, 25.305633544921875],[54.68554193480844, 25.329322814941406],[54.68335879002739, 25.362625122070312],[54.656754688760536, 25.345458984375],[54.610254981579146, 25.328292846679688],[54.60568162741719, 25.308380126953125],[54.65516583289068, 25.29705047607422]]}, 
     {name: 'Antakalnis', color: '#0000ff', points: [[54.72699938009521, 25.30426025390625],[54.71589532099472, 25.34820556640625],[54.80780860259057, 25.500640869140625],[54.81967870427071, 25.335845947265625],[54.771385204918595, 25.300140380859375]]} 
    ]; 
    var polygons = []; 
    var map; 
    // random markers. 
    var markerData = [ 
     [54.75478050308602,25.3638149499893], 
     [54.68324427673198,25.27517330646513], 
     [54.70583916710748,25.240154385566694], 
     [54.68453433466152,25.293562531471235], 
     [54.72900384013322,25.330534100532514], 
     [54.682078227560325,25.28394949436186], 
     [54.65034635955749,25.30793917179106] 
    ]; 
    var markers = []; 

    var mapOptions = { 
     zoom: 10, 
     center: new google.maps.LatLng(54.682611637187925,25.287838697433454), // Vilnius university 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 

    function initialize() { 
     map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 

     // draw the markers 
     var markerLocations = toLatLng(markerData); 
     for(var i in markerLocations) { 
     markers.push(new google.maps.Marker({ 
      position: markerLocations[i], 
      title: i,       // I'll just set the index as title. 
      map: map 
     })); 
     } 

     // draw the polygons 
     for(var j in polygonData) { 
     var points = toLatLng(polygonData[j].points); 
     polygons[j] = drawPolygon(points, polygonData[j].color, polygonData[j].name); 
     // let's see if markers are in this polygon 
     var content = ''; 
     for(var i in markerLocations) { 
      if (google.maps.geometry.poly.containsLocation(markers[i].position, polygons[j])) { 
      // display 
      content += '<li>' + markers[i].title + '</li>'; 
      // I guess what you really want to do, is put this data in an array, or so 
      } 
     } 
     document.getElementById('display-data').innerHTML += '<h3>' + polygonData[j].name + '</h3>' + '<ul>' + content + '</ul><hr/>'; 
     } 
    } 

    // takes an array of coordinats, [ [], [], [] ] , and returns Google Maps LatLng objects 
    function toLatLng(point_arrays) { 
     var locations = []; 
     for(var i in point_arrays) { 
     locations.push(new google.maps.LatLng(point_arrays[i][0], point_arrays[i][1])); 
     } 
     return locations; 
    } 

    // draws a polygon 
    function drawPolygon(points, color, name) { 
     if(points.length < 3) { 
     return; 
     } 
     // @see https://developers.google.com/maps/documentation/javascript/examples/polygon-simple 
     polygon = new google.maps.Polygon({ 
     paths: points, 
     strokeColor: color, 
     strokeOpacity: 0.8, 
     strokeWeight: 2, 
     fillColor: color, 
     fillOpacity: 0.35, 
     title: name, 
     map: map 
     }); 
     return polygon; 
    } 

    google.maps.event.addDomListener(window, 'load', initialize); 
    </script> 
    <style> 
    ul, li { 
     list-style: none; 
    } 
    li { 
     display: inline; 
     border: 1px solid grey; 
     padding: 5px; 
     margin: 5px; 
    } 
    </style> 
</head> 
<body> 
    <div id="map-canvas"></div> 
    <div id="display-data"></div> 
</body> 
</html> 

Что вы можете сделать, это обновление таблицы маркеров в базе данных; добавьте поле «старейшина».

Вы отправляете данные, полученные из моего сценария на сервер, с помощью Ajax, вы обновляете таблицу (= вы заполняете идентификатор старейшины в поле старости маркера), так что вам нужно только сделать это один раз (и вам нужно обновить новые маркеры ...).

+0

Благодарим вас за ответ. Еще один вопрос, где я могу найти точки полигонов для определенной области? Невозможно найти API Google Maps для этого. – saniokazzz

+0

Да, к сожалению, API Карт Google не предоставляет их. Насколько я знаю –

Смежные вопросы