【问题标题】:How to dynamically `generate` a google map base on an address ?如何根据地址动态“生成”谷歌地图?
【发布时间】:2015-03-08 18:54:47
【问题描述】:

详情

  • 我想打印一张基于any 地址的地图,该地址存储在我的<span>
  • 我的地址是:410 walker street Lowell MA 01851
  • 我的<span>Address: <span id="address" > 410 walker street Lowell MA 01851 </span>
  • 我想为此使用 Google Map API

我尝试过的

Address: <span id="address" > 410 walker street Lowell MA 01851 </span>

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>

<!-- "Highlight a place or an address" -->
<iframe 

width="600" height="450" frameborder="0" style="border:0"
src="

https://www.google.com/maps/embed/v1/place?q=

410+walker+street+Lowell+MA+01851

&key=*****

">

</iframe>

这是我的结果

到目前为止一切正常,一切正常,因为我手动输入了地址 像这样?q = 410+walker+street+Lowell+MA+01851

但我不想手动输入地址。我如何动态地做到这一点?我需要一些建议 - 请。

我的方法

  • 我想知道是否可以将我的地址存储在变量$address

  • $address = "410 walker street Lowell MA 01851";

  • 最后在我的 HTML 属性src="" 的一部分中将它们打印为“410+walker+street+Lowell+MA+01851”。

问题

  • 我完全不确定这种方法是否是最佳实践。
  • 有可能吗?如何 ?
  • 谁能帮助阐明这一点?

【问题讨论】:

    标签: javascript php jquery html google-maps


    【解决方案1】:

    我也在做类似的事情。

    如果您在 iframe url 中找到 ?pb=,则表示它已缓存在某处。如果您输入自己的地址,请记住它需要进行地理定位(lat、lng),而 iframe 本身不会为您执行此操作。

    无需 API 密钥也可以完成这项工作,您可以尝试执行以下操作:

    $(document).ready( function(){
        var addr = 'Any Street 670, Any City';
        function(){  
    
            var embed= "<iframe width='425' height='350' frameborder='0'  
            scrolling='no' marginheight='0' marginwidth='0'    
            src='https://maps.google.com/maps?&amp;q="+   
            encodeURIComponent( addr ) +  
            "&amp;output=embed'></iframe>";  
    
            $('.place').html(embed);
        });
    });
    

    它对我来说很好用。

    如果还要使用坐标,请查看this SO question。

    【讨论】:

      【解决方案2】:
      <?php $address = 'Any Street 670, Any City' ; /* Insert address Here */
      
      echo '<iframe width="100%" height="170" frameborder="0" src="https://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=' . str_replace(",", "", str_replace(" ", "+", $address)) . '&z=14&output=embed"></iframe>';
                                  ?>
      

      【讨论】:

      • 你能提供一个小提琴吗?
      【解决方案3】:

      根据您想要完成的任务,如果目标是向访问者显示离他们当前位置最近的企业位置,那么可以结合使用 IP 英特尔(城市网络)和他们的 GPS 位置来实现, 在移动。

      我不确定您将如何自己从头开始执行此操作,但我知道在 Personyze 等个性化软件服务上,有一个小部件,您只需上传位置,访问者就会自动显示所在位置离他们最近。您还可以为他们提供附近的替代位置等。如果那是您的用例,值得一试。

      【讨论】:

        【解决方案4】:

        使用$.text()检索地址,对其进行编码(通过encodeURIComponent),然后设置iframe的src-属性(通过使用编码地址):

        <span id="address"> 410 walker street Lowell MA 01851 </span>
        <iframe id="map" width="600" height="450"></iframe>
        <script  type="text/javascript">
        jQuery(
          function($)
          {
               var q=encodeURIComponent($('#address').text());
               $('#map')
                .attr('src',
                     'https://www.google.com/maps/embed/v1/place?key=***&q='+q);
        
          }
        );
        </script>
        

        演示:http://jsfiddle.net/doktormolle/pkjq1hrb/

        【讨论】:

        • 我将您的sniper 与我的API_KEY 一起使用。它没有用。我想知道你做了什么让它在 JSFiddle 上工作。
        • 您必须为Google developer console中的特定项目激活Google Maps Embed API
        • 不仅是密钥,还必须激活API。当您已经能够使用您的密钥(例如在您自己的服务器上)加载嵌入式地图时,您可能已经在开发人员控制台中定义了密钥的引用者。这就是我为保护我的密钥所做的,我设置了以下引用:fiddle.jshell.net/doktormolle/*(其中 doktormolle 是我的 jsfiddle 帐户)。你也可以这样做。
        • 看一下developer-tools,应该有https://www.google.com/maps/embed....的请求,有什么反应?当没有这样的请求时,其他错误(如果没有确切的代码,我无法告诉你)
        • 使用给定的密钥我在 Firefox 中获得 Google Maps API 服务器拒绝了您的请求。此 API 项目无权使用此 API。请确保在 APIs Console 中激活了此 API:了解更多:code.google.com/apis/console,这与我的第二条评论有关(API 未启用)。当您共享您的密钥时,您应该设置允许的引用者,否则任何人都可以使用您的密钥。
        【解决方案5】:

        您想根据用户输入的地址显示位置吗? 可能这会对您有所帮助,但限制在 google place 服务器上存储数据。 试试这个代码sn-p,可能对你有点帮助。

        我已经编辑了我的答案,因为您没有使用 jquery。如果您使用的是 jquery,请查看我以前的修订版..

        var map_options = {
            center: new google.maps.LatLng(-2.548926, 118.0148634),
            zoom: 4,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        
        var map = new google.maps.Map(document.getElementById("map_canvas"), map_options);
        
        var input = document.getElementById("keyword");
        var autocomplete = new google.maps.places.Autocomplete(input);
        autocomplete.bindTo("bounds", map);
        
        var marker = new google.maps.Marker({
            map: map,
            zoom: 14,
            animation: google.maps.Animation.BOUNCE
        });
        
        google.maps.event.addListener(autocomplete, "place_changed", function () {
            var place = autocomplete.getPlace();
        
            if (place.geometry.viewport) {
                map.fitBounds(place.geometry.viewport);
            } else {
                map.setCenter(place.geometry.location);
                map.setZoom(15);
            }
        
            marker.setPosition(place.geometry.location);
        });
        
        google.maps.event.addListener(map, "click", function (event) {
            marker.setPosition(event.latLng);
        });
        <script src="http://maps.googleapis.com/maps/api/js?libraries=places&sensor=false"></script>
        <div id="map_canvas" style="width:530px; height:250px"></div>
        <label for="keyword">Location :</label>
        <input type="text" name="keyword" id="keyword">

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-04
          • 1970-01-01
          • 1970-01-01
          • 2018-01-26
          • 2012-05-03
          • 2011-09-08
          • 2017-08-06
          • 2013-03-23
          相关资源
          最近更新 更多