想要从谷歌地图嵌入式iframe中提取街道地址


Want to extract street address from a Google Maps embedded iframe

好的,这就是我正在做的事情。

一些背景:我正在对其他人构建的现有WordPress网站进行更改。他们创建了一个文本区域,客户端在其中复制并粘贴Google地图的iframe嵌入。这适用于客户在其网站上发布的属性。

困境:这一切都很好,但我正在重建他们属性的详细信息页面,我想删除所有 iframe 信息,只留下属性地址,以便我可以使用它通过 Google Maps V3 jQuery 插件创建新地图。

我想把这个转过来:

<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=5475+NW+75+AVE,+Ocala+FL+34482&aq=&sll=29.300577,-82.294762&sspn=0.006755,0.013304&vpsrc=0&ie=UTF8&hq=&hnear=5475+NW+75th+Ave,+Ocala,+Florida+34482&t=m&z=14&ll=29.244022,-82.241361&output=embed"></iframe><br /><small><a href="http://maps.google.com/maps?f=q&source=embed&hl=en&geocode=&q=5475+NW+75+AVE,+Ocala+FL+34482&aq=&sll=29.300577,-82.294762&sspn=0.006755,0.013304&vpsrc=0&ie=UTF8&hq=&hnear=5475+NW+75th+Ave,+Ocala,+Florida+34482&t=m&z=14&ll=29.244022,-82.241361" style="color:#0000FF;text-align:left">View Larger Map</a></small>

进入这个:

5475 NW 75 AVE, Ocala FL 34482

我认为通过研究 preg_replace(( 我走在正确的轨道上,但这个的正则表达式让我明白了。或者,如果我能提取坐标也会有所帮助。我可以使用地址或经度和长坐标来完成工作。

提前感谢我能得到的任何帮助!

使用解决方案进行编辑,因为我的 SO 代表仍然很低:

多亏了马里奥,我才能完成工作。这是我为任何人提供的最终代码,它可能会有所帮助。

你从这个开始:

<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=5475+NW+75+AVE,+Ocala+FL+34482&aq=&sll=29.300577,-82.294762&sspn=0.006755,0.013304&vpsrc=0&ie=UTF8&hq=&hnear=5475+NW+75th+Ave,+Ocala,+Florida+34482&t=m&z=14&ll=29.244022,-82.241361&output=embed"></iframe><br /><small><a href="http://maps.google.com/maps?f=q&source=embed&hl=en&geocode=&q=5475+NW+75+AVE,+Ocala+FL+34482&aq=&sll=29.300577,-82.294762&sspn=0.006755,0.013304&vpsrc=0&ie=UTF8&hq=&hnear=5475+NW+75th+Ave,+Ocala,+Florida+34482&t=m&z=14&ll=29.244022,-82.241361" style="color:#0000FF;text-align:left">View Larger Map</a></small>

你想要这个:

5475 NW 75 AVE, 奥卡拉 FL 34482

这是对我有用的:

// We first find and extract the 'src' from the iframe
// $map is my original iframe embed
// $q is our extracted and stripped text
preg_match('#q=([^&"]+)#', $map, $match)
and ($q = urldecode($match[1]));
// Now you can echo out the address or use it elsewhere.
// In my case, I am using jQuery goMap (http://www.pittss.lv/jquery/gomap)
// and can add a new point on the map via $q
echo $q;

如果你坚持过度杀伤的解决方案,你将首先使用像 QueryPath 这样的 HTML 遍历库来拆分 HTML 并获取属性:

$url = qp($html)->find("iframe")->attr("src");

但这毫无意义,实际上您应该从文本片段中提取 URL:

preg_match('#http://[^"'']+#', $html, $match)
and ($url = $match[0]);

从那里只需将其与parse_url($url, PHP_URL_QUERY)分开,然后用parse_str($qs, $vars)提取位,这样您就可以$var["q"].

但是,如果它是一个连贯的输入,你可以用以下方法划分出q=参数:

preg_match('#q=([^&"]+)#', $html, $match)
and ($q = urldecode($match[1]));

更懒惰的是在整个 HTML 片段上使用 parse_str,并祈祷前导和尾随垃圾不会干扰所需的片段。