2010-02-16 17 views
13

Mam wymagania i mam nadzieję, że interfejs API Google Maps będzie miał rozwiązanie. Nigdy nie korzystałem z Google Maps API - więc jestem na tym nowicjuszem.Używanie interfejsu Google Maps API do uzyskania adresu firmy

Na stronie internetowej znajduje się formularz, gdy użytkownik wchodzi chcę następujące rzeczy się wydarzy:

1) Pole miasto powinno być wypełniane Użytkownicy Miasto bazujący na adresach IP

2) Istnieje drugie pole o nazwie sklepu - gdy użytkownik zaczyna wpisywać nazwę sklepu - chcę pobrać wszystkie wykazy firm o tej nazwie w tym mieście i pokazać je jako menu rozwijane, z którego użytkownik może wybrać odpowiednią gałąź. Nie ma potrzeby pokazywania czegokolwiek na mapie. Egs - Jeśli użytkownik w Houston zacznie wpisywać McDonalds następujące firmach powinny zacząć pojawiać się

  • McDonalds, 12 Pearland Ave, Houston TX
  • McDonalds, 2600 Bary Area Blvd, Houston TX
  • McDonalds, 262 Clearlake Blvd, Houston TX

Również, gdy otrzymamy adres do wpisu o firmie z Google API - otrzymamy go jako jeden ciąg i musimy go przeanalizować lub czy otrzymamy go w różnych polach Nazwa ulicy, miasto , Stan, kod pocztowy itp.

Wszelkie informacje lub przykłady będą naprawdę docenione Dzięki

+0

dodałem próbki przy użyciu zarówno lokalizację klienta i lokalnego wyszukiwania przynieść firmom lokalnym klientem odsyłającym przez siebie i innych, które przychodzą szuka tego rodzaju rzeczy. –

Odpowiedz

14

nie sądzę chcesz Google Maps. Po pierwsze, warunki użytkowania nie zezwalają na jakiekolwiek inne użycie niż wyświetlanie rzeczy na Mapie Google na publicznie dostępnej stronie internetowej, po drugie, istnieje inny interfejs API Google, który wykonuje dokładnie to, czego potrzebujesz: Interfejs API klienta: http://code.google.com/apis/ajax/documentation/#ClientLocation

Dotyczące "firm": Będziesz musiał gdzieś pozyskać te dane - nie wierzę, że Google ma na to usługę. Być może po prostu użyć Search API Google i pewnej logiki, aby znaleźć tylko firmom (http://code.google.com/apis/ajaxsearch/)

EDIT: I dla firm, być może można przyjrzeć się tej próbki: http://code.google.com/apis/ajaxsearch/samples.html#local-search

+0

+1 doskonała odpowiedź –

+1

Witaj Rolandzie Dziękuję za odpowiedź - kiedy mam na myśli biznes - mówię o firmach, które już pojawiają się w wyszukiwarce lokalnej Google. Na przykład, jeśli przejdziesz do http://maps.google.co.w/i wyszukaj McDonalds Houston - pokaże Ci następujące wyniki: 2017 Main Street, Houston, TX, Stany Zjednoczone 808 Dallas Street, Houston, TX, Stany Zjednoczone 4005 Elgin Street, Houston, TX, Stany Zjednoczone Nie możemy uzyskać tych informacji od Google, jeśli przekażę "MCdonalds" i "Houston". Dzięki – Gublooo

+0

Ups - przepraszam, że nie widziałem twojej notatki edycji Patrzę teraz na to. – Gublooo

3

aktualizacja: tu jest przykład użycia google clientlocation api i wyszukiwania lokalnego przy użyciu jsonp.


<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 

    <script type="text/javascript" src="http://www.google.com/jsapi?key=ABQIAAAALDWeTDQHOJCbCf0JnUqL8BT2yXp_ZAY8_ufC3CFXhHIE1NvwkxQA7AE8xB9MyWgHECPY2qimOp7BUQ"></script> 

    <script src="scripts/clientLocation.js" type="text/javascript"></script> 

    <script src="scripts/localSearch.js" type="text/javascript"></script> 

    <script type="text/javascript"> 



     function $g(id) { 
      return document.getElementById(id); 
     } 

     function displayLocation(latitudeEl, longitudeEl, cityEl, regionEl, countryEl, country_codeEl) { 
      var cloc = new ClientLocation.Location(google.loader.ClientLocation); 
      if (latitudeEl) latitudeEl.innerHTML = cloc.latitude; 
      if (longitudeEl) longitudeEl.innerHTML = cloc.longitude; 
      if (cityEl) cityEl.innerHTML = cloc.address.city; 
      if (regionEl) regionEl.innerHTML = cloc.address.region; 
      if (country) country.innerHTML = cloc.address.country; 
      if (country_codeEl) country_codeEl.innerHTML = cloc.address.country_code; 
     } 
     function localSearch(term, callback, context) { 
      var cloc = new ClientLocation.Location(google.loader.ClientLocation); 
      var searchUrl = 'http://www.google.com/uds/GlocalSearch?callback=' + callback + '&context=' + context + '&hl=en&q=' + encodeURIComponent(term) + '&sll=' + cloc.latitude + ',' + cloc.longitude + '&key=ABQIAAAALDWeTDQHOJCbCf0JnUqL8BT2yXp_ZAY8_ufC3CFXhHIE1NvwkxQA7AE8xB9MyWgHECPY2qimOp7BUQ&v=1.0'; 

      // http://jaybyjayfresh.com/2007/09/17/using-script-tags-to-do-remote-http-calls-in-javascript/ 
      scriptLoaded = function() { 
       removeNode(newScript); 
      }; 

      var headID = document.getElementsByTagName("head")[0]; 
      var newScript = document.createElement('script'); 
      newScript.type = 'text/javascript'; 
      newScript.onload = scriptLoaded; 
      newScript.src = searchUrl; 
      headID.appendChild(newScript); 
     } 
     function search() { 
      var term = $g("txtSearch").value; 
      localSearch(term, "displayResults", "0"); 

     } 
     function displayResults(context, results, status, details, unused) { 
      var titles = []; 
      for (var i = 0; i < results.results.length; i++) { 
       // this cast is not necessary, just here to illustrate 
       // vs intellisense and reduce coding errors. 
       var result = new LocalSearch.Result(results.results[i]); 
       titles.push(result.title); 
      } 
      $g("searchResults").innerHTML = titles.join("</br>"); 
     } 
     function init() { 

      displayLocation($g("latitude"), $g("longitude"), $g("city"), $g("region"), $g("country"), $g("country_code")); 
     } 
    </script> 

</head> 
<body onload="init()"> 
    <form id="form1" runat="server"> 
    <div> 
     latitude : <span id="latitude"></span> 
     <br /> 
     longitude : <span id="longitude"></span> 
     <br /> 
     city : <span id="city"></span> 
     <br /> 
     region : <span id="region"></span> 
     <br /> 
     country : <span id="country"></span> 
     <br /> 
     country_code : <span id="country_code"></span> 
     <br /> 
    </div> 
    <input type="text" id="txtSearch" /><input type="button" id="btnSearch" value="get results" 
     onclick="search();" /><br /> 
    &nbsp;<div id="searchResults"> 
    </div> 
    </form> 
</body> 
</html> 

// <copyright file="clientLocation.js" company="Sky Sanders"> 
// This source is placed in the Public Domain. 
// http://skysanders.net/subtext 
// Attribution is appreciated. 
// </copyright> 


/* 
object literal format for google.loader.clientlocation 
{ 
"latitude": 33.324, 
"longitude": -111.867, 
"address": { 
"city": "Chandler", 
"region": "AZ", 
"country": "USA", 
"country_code": "US" 
} 
} 
*/ 

var ClientLocation = {}; 

ClientLocation.Address = function() { 
    /// <field name="city" type="String" /> 
    /// <field name="region" type="String" /> 
    /// <field name="country" type="String" /> 
    /// <field name="country_code" type="String" /> 
    /// <returns type="ClientLocation.Address"/> 
    if (arguments.length > 0) { 
     this.city = arguments[0].city; 
     this.region = arguments[0].region; 
     this.country = arguments[0].country; 
     this.country_code = arguments[0].country_code; 
     return; 
    } 
    else { 
     this.city = ""; 
     this.region = ""; 
     this.country = ""; 
     this.country_code = ""; 
    } 

} 
ClientLocation.Location = function() { 
    /// <field name="latitude" type="Number" /> 
    /// <field name="longitude" type="Number" /> 
    /// <field name="address" type="ClientLocation.Address" /> 
    if (arguments.length > 0) { 

     this.latitude = arguments[0].latitude; 
     this.longitude = arguments[0].longitude; 
     this.address = arguments[0].address; 

    } 
    else { 
     this.latitude = 0; 
     this.longitude = 0; 
     this.address = undefined; 
    } 

} 


// <copyright file="localSearc.js" company="Sky Sanders"> 
// This source is placed in the Public Domain. 
// http://skysanders.net/subtext 
// Attribution is appreciated. 
// </copyright> 
/* 
GlocalSearch result 

{ 
"GsearchResultClass": "GlocalSearch", 
"viewportmode": "computed", 
"listingType": "local", 
"lat": "33.389689", 
"lng": "-111.853909", 
"accuracy": "8", 
"title": "Best \u003cb\u003eBuy\u003c/b\u003e", 
"titleNoFormatting": "Best Buy", 
"ddUrl": "http://www.google.com/maps....", 
"ddUrlToHere": "http://www.google.com/maps?....", 
"ddUrlFromHere": "http://www.google.com/maps?....", 
"streetAddress": "1337 South Alma School Road", 
"city": "Mesa", 
"region": "AZ", 
"country": "United States", 
"staticMapUrl": "http://mt.google.com/mapdata?....", 
"url": "http://www.google.com/maps/place?source....", 
"content": "", 
"maxAge": 604800, 
"phoneNumbers": [{ 
"type": "", 
"number": "(480) 644-7139" 
}, 
{ 
"type": "", 
"number": "(480) 464-0444" 
}], 
"addressLines": ["1337 South Alma School Road", "Mesa, AZ"] 
} 

*/ 


var LocalSearch = {}; 

LocalSearch.PhoneNumber = function() { 
    /// <field name="type" type="String"/> 
    /// <field name="number" type="String"/> 
    /// <returns type="LocalSearch.PhoneNumber"/> 

    if (arguments.length > 0) { 
     this.type = arguments[0].type; 
     this.number = arguments[0].number; 
    } 
    else { 
     this.type = ""; 
     this.number = ""; 
    } 
} 



LocalSearch.Result = function() { 
    /// <field name="GsearchResultClass" type="String"/> 
    /// <field name="viewportmode" type="String"/> 
    /// <field name="listingType" type="String"/> 
    /// <field name="lat" type="String"/> 
    /// <field name="lng" type="String"/> 
    /// <field name="accuracy" type="String"/> 
    /// <field name="title" type="String"/> 
    /// <field name="titleNoFormatting" type="String"/> 
    /// <field name="ddUrl" type="String"/> 
    /// <field name="ddUrlToHere" type="String"/> 
    /// <field name="ddUrlFromHere" type="String"/> 
    /// <field name="streetAddress" type="String"/> 
    /// <field name="city" type="String"/> 
    /// <field name="region" type="String"/> 
    /// <field name="country" type="String"/> 
    /// <field name="staticMapUrl" type="String"/> 
    /// <field name="url" type="String"/> 
    /// <field name="content" type="String"/> 
    /// <field name="maxAge" type="Number"/> 
    /// <field name="phoneNumbers" type="Array"/> 
    /// <field name="addressLines" type="Array"/> 
    // <returns type="LocalSearch.Result"/> 
    if (arguments.length > 0) { 
     this.GsearchResultClass = arguments[0].GsearchResultClass; 
     this.viewportmode = arguments[0].viewportmode; 
     this.listingType = arguments[0].listingType; 
     this.lat = arguments[0].lat; 
     this.lng = arguments[0].lng; 
     this.accuracy = arguments[0].accuracy; 
     this.title = arguments[0].title; 
     this.titleNoFormatting = arguments[0].titleNoFormatting; 
     this.ddUrl = arguments[0].ddUrl; 
     this.ddUrlToHere = arguments[0].ddUrlToHere; 
     this.ddUrlFromHere = arguments[0].ddUrlFromHere; 
     this.streetAddress = arguments[0].streetAddress; 
     this.city = arguments[0].city; 
     this.region = arguments[0].region; 
     this.country = arguments[0].country; 
     this.staticMapUrl = arguments[0].staticMapUrl; 
     this.url = arguments[0].url; 
     this.content = arguments[0].content; 
     this.maxAge = arguments[0].maxAge; 
     this.phoneNumbers = arguments[0].phoneNumbers; 
     this.addressLines = arguments[0].addressLines; 

    } 
    else { 

     this.GsearchResultClass = ""; 
     this.viewportmode = ""; 
     this.listingType = ""; 
     this.lat = ""; 
     this.lng = ""; 
     this.accuracy = ""; 
     this.title = ""; 
     this.titleNoFormatting = ""; 
     this.ddUrl = ""; 
     this.ddUrlToHere = ""; 
     this.ddUrlFromHere = ""; 
     this.streetAddress = ""; 
     this.city = ""; 
     this.region = ""; 
     this.country = ""; 
     this.staticMapUrl = ""; 
     this.url = ""; 
     this.content = ""; 
     this.maxAge = 0; 
     this.phoneNumbers = []; 
     this.addressLines = []; 
    } 


} 
+1

Dzięki za przykładowy kod Sanders Szukałem w zasadzie sposobu, w jaki użytkownik określa nazwę i miasto - i używając tych informacji, mogę wyciągnąć adres za pomocą kodu Google. Roland dostarczył mi ten link, który ma dokładnie to: http://code.google.com/apis/ajax/playground/#center_localsearch Ale martwię się, czy mogę użyć tych informacji i zapisać je w mojej bazie danych – Gublooo

+1

tak , właśnie kończyłem próbę wyciągnięcia z GLocalSearch z prostą strategią JsonP. Jeśli chodzi o przechowywanie i korzystanie z tego przykładu, będziesz musiał zapoznać się z warunkami użytkowania opublikowanymi na stronie Google api. Wysłałem próbkę dla innych osób, które szukają tego typu rzeczy. –

+1

Musisz sprawdzić licencję Google. Nie wierzę, że możesz "wyczyścić" swoje dane w celu ponownego użycia/przechowywania. Aby sporządzić mapę, musieliśmy z nimi korzystać. Poza tym masz ograniczoną liczbę połączeń, które możesz wykonywać w darmowych wersjach, ale to może nie mieć żadnego wpływu. – KeyOfJ

Powiązane problemy