对分解的自定义字段数组进行地理编码

时间:2012-09-09 作者:studionashvegas

所以,我对WordPress中Google Maps的API和分解的自定义字段之间的交叉信号有点问题。我希望能够对从自定义字段中分解出来的地址进行地理编码,格式为“名称,地址”:

<?php
$trucks = get_post_meta($post->ID, "truck", false);
if ($trucks[0]=="") { ?>

<p>No Trucks Operating Today</p>

<?php } else { ?>

<?php foreach($trucks as $truck) {
$truckdata = explode(\',\', $truck );
$name = $truckdata[0];
$location = $truckdata[1];
echo $name . \' is located at\' . $location .\'<br />\'; ?>

<?php } ?>
这段代码将允许我调用每个自定义字段,将值分解为其名称和位置,再分解为一个单独的值,并在下面回显它们。

接下来我要做的是将每个值映射到谷歌地图中。以下是我正在使用的代码:

    <script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script> 
    <script type="text/javascript"> 
        $(document).ready(function() { initialize(); });

        function initialize() {
            var map_options = {
                center: new google.maps.LatLng(33.84659,-84.35686),
                zoom: 14,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };

            var google_map = new google.maps.Map(document.getElementById("map_canvas"), map_options);

            var info_window = new google.maps.InfoWindow({
                content: \'loading\'
            });

            var t = [];
            var x = [];
            var y = [];
            var h = [];

            t.push(\'Location Name 1\');
            x.push(33.84659);
            y.push(-84.35686);
            h.push(\'<p><strong>Location Name 1</strong><br/>Address 1</p>\');

            t.push(\'Location Name 2\');
            x.push(33.846253);
            y.push(-84.362125);
            h.push(\'<p><strong>Location Name 2</strong><br/>Address 2</p>\');

            var i = 0;
            for ( item in t ) {
                var m = new google.maps.Marker({
                    map:       google_map,
                    animation: google.maps.Animation.DROP,
                    title:     t[i],
                    position:  new google.maps.LatLng(x[i],y[i]),
                    html:      h[i]
                });

                google.maps.event.addListener(m, \'click\', function() {
                    info_window.setContent(this.html);
                    info_window.open(google_map, this);
                });
                i++;
            }
        }
    </script> 
    <div id="map_canvas" style="width:400px;height:400px;">Google Map</div> 
这是一个示例,但所讨论的代码是t、x、y和h变量。我知道我应该能够获取地址,将其弹出到地理编码器中,并输出标记的位置。我的问题是:

1) 如何循环遍历自定义字段以获取javascript中的地址?有没有办法用WP\\u查询获取数组(因为它只从一篇文章中获取)并在javascript文件中使用这些变量?

2) 如何对地址进行地理编码,并将其置于lat和lon位置,以便为标记获取正确的坐标

3) 一旦我对地址进行了地理编码,如何放置地图标记来回应下面的情绪?

1 个回复
SO网友:Milo

这不是一个完整的答案,但有几点建议-

不要对前端请求的地址进行地理编码,这是对周期的浪费。一个地址只需要进行一次地理编码,然后就可以将纬度/经度数据与post meta一起存储。使用save_post 钩子在后端保存帖子时进行地理编码。

您可以使用php对地址进行如下地理编码:

$request_url = "http://maps.google.com/maps/geo?output=xml&q=" . urlencode($address);
$xml = simplexml_load_file( $request_url );
$status = $xml->Response->Status->code;
if( strcmp($status, "200" ) == 0 ):
    $coordinates = split( \',\', $xml->Response->Placemark->Point->coordinates );
    $lat = $coordinates[1];
    $lon = $coordinates[0];
endif;
这只是一个简单的示例,您需要在其中添加一些针对地理代码故障的错误处理。有关更多信息,请参阅谷歌地图API文档。

要将位置数据转换为javascript,请使用wp_localize_script. 您可以将筛选器添加到the_posts, 这将为您提供一个帖子数组,并让您获取每个帖子的帖子元,以本地化脚本的数据。然后,当脚本加载时,您将有权访问该数组,以迭代并放置标记。

结束

相关推荐

我的帖子链接到哪里?我一直收到一个Not Found错误,而且我没有Single.php页面

最近有人为我定制了一个WP博客。这个人做的工作不是很有意愿,所以我决定自己做。我自定义了自己的博客页面,所有这些都可以正常工作,但当我点击这些帖子时,我会看到一个“找不到错误”页面。我浏览了一些人写的旧博客,我不知道那个人把我的帖子链接到了哪里。我唯一的线索是<?php the_content(); ?>: <?php wp_link_pages( array( \'before\' => \'<div class=\"page-link\">\' . __( \'Pa