【问题标题】:Using Google Maps API to get Address of Business使用 Google Maps API 获取商家地址
【发布时间】:2010-02-16 13:34:19
【问题描述】:

我有一个要求,我希望 Google Maps API 有一个解决方案。我从未使用过 Google Maps API - 所以我对此很陌生。

在网站首页有一个表单,当用户来的时候,我希望发生以下事情:

1) 城市字段应填充基于 IP 的用户城市

2) 还有一个名为 store name 的字段 - 当用户开始输入商店名称时 - 我想获取该城市中具有该名称的所有商业列表,并将其显示为下拉列表,用户可以从中选择适当的分支。无需在地图上显示任何内容。 例如 - 如果休斯顿的用户开始输入 McDonalds,则应开始显示以下商家信息

  • 德克萨斯州休斯顿 Pearland Ave 12 号麦当劳
  • McDonalds, 2600 Bary Area Blvd, Houston TX
  • 德克萨斯州休斯顿 Clearlake Blvd 262 号麦当劳

此外,当我们从 Google API 获取商家信息的地址时 - 我们是否将其作为一个字符串获取并且我们需要对其进行解析,或者我们是否获取不同的字段街道名称、城市、州、邮政编码等

任何信息或示例将不胜感激 谢谢

【问题讨论】:

  • 我添加了一个示例,使用客户端位置和本地搜索来获取客户本地的企业,以供您自己和其他寻找此类事物的人参考。

标签: google-maps google-maps-api-3


【解决方案1】:

我认为您不需要 Google 地图。首先,使用条款除了在可公开访问的网页上显示 Google 地图上的内容外,不允许任何其他用途,其次,还有另一个 Google API 可以完全满足您的需求:客户端位置 API:http://code.google.com/apis/ajax/documentation/#ClientLocation

关于“企业”:您将不得不从某个地方获取这些数据——我不相信谷歌有这方面的服务。也许您可以简单地使用 Google 搜索 API 和一些逻辑来仅查找商家 (http://code.google.com/apis/ajaxsearch/)

编辑:我代表企业,也许你可以看看这个样本:http://code.google.com/apis/ajaxsearch/samples.html#local-search

【讨论】:

  • 您好 Roland 感谢您的回复 - 我的意思是业务 - 我指的是已经出现在 google 本地搜索中的业务。例如,如果您转到 maps.google.co.in 并搜索 McDonalds Houston - 它会显示以下结果: 2017 Main Street, Houston, TX, United States‎ 808 Dallas Street, Houston, TX, United States 4005 Elgin Street, Houston, TX , 美国 因此,如果我通过“MCdonalds”和“Houston”,我们无法从 Google 获取此信息。谢谢
  • 糟糕 - 很抱歉,我没有看到您的编辑说明。
  • 所以我可以使用code.google.com/apis/ajax/playground/#center_localsearch 它没有在地图上显示它,它给了我公司地址。是否有任何条款表明我不能将其用于除在地图上显示之外的其他目的。谢谢
  • 好吧,只要您不使用 google maps api,您就可以。我提到的 api 不是 google maps api。当然,您应该按照我提供的链接阅读任何使用/服务条款,看看它们是否与您的应用程序兼容。
  • 看起来这些 API 和/或文档已更改,因为这些链接不再有效。你知道目前最好的解决方案是什么吗?
【解决方案2】:

更新:这里是使用 google clientlocation api 和使用 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 = [];
    }


}

【讨论】:

  • 感谢示例代码 Sanders 我基本上是在寻找一种用户指定公司名称和城市的方法 - 并且使用该信息我可以使用 Google 代码提取地址。 Roland 为我提供了这个链接:code.google.com/apis/ajax/playground/#center_localsearch 但我担心的是我是否可以使用这些信息并将其存储在我的数据库中
  • 是的,我刚刚用一个简单的 JsonP 策略完成了从 GLocalSearch 中提取的样本。至于此示例的存储和使用,您将不得不检查发布在 google api 页面上的使用条款。我为其他来寻找这类东西的人发布了样本
  • 您需要检查 Google 许可证。我不相信您可以“清理”他们的数据以进行再使用/存储。对于我们的地图绘制,我们必须随身携带营业执照。此外,您可以在免费版本上拨打的电话数量有限,但这可能不会影响您。
【解决方案3】:

如果您只是查找餐厅,请尝试使用 Yelp 的 API。您可以在搜索范围内按名称搜索企业。他们的 API 也比 google 的更简单易用。

http://www.yelp.com/developers/documentation/search_api

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多