Javascript 将XPath foreach用于Google地图地理编码器
我正在使用GoogleMapsAPI进行数据可视化,显示rss提要中的位置。 我已经设法让地图和rss位置正常工作,但我很难在地图中找到位置 这是提要的摘录:Javascript 将XPath foreach用于Google地图地理编码器,javascript,php,google-maps,xpath,rss,Javascript,Php,Google Maps,Xpath,Rss,我正在使用GoogleMapsAPI进行数据可视化,显示rss提要中的位置。 我已经设法让地图和rss位置正常工作,但我很难在地图中找到位置 这是提要的摘录: <rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"> <channel> <title>Alarmeringen.nl feed</title> <link>http://
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
<channel>
<title>Alarmeringen.nl feed</title>
<link>http://alarmeringen.nl</link>
<description>Alarmeringen.nl: Alle alarmeringen voor: Amsterdam-Amstelland</description>
<atom:link href="http://alarmeringen.nl/feeds/region/amsterdam-amstelland/brandweer.rss"
rel="self"/>
<language>nl-NL</language>
<lastBuildDate>Wed, 11 Jun 2014 16:46:42 +0200</lastBuildDate>
<item>
<title>HV 2 LIFTOPSLUITING (+Inc.net: Reg.Inmeld+) , Talbotstraat 47 AMSTERDAM [ ASZ
]</title>
<link>http://alarmeringen.nl/amsterdam-amstelland/amsterdam/15757258/p2000-assistentie-bij-liftopsluiting-op-talbotstraat-in-amsterdam-brandweer-hulpverlening-ter-plaatse.html</link>
<description>Assistentie bij liftopsluiting op Talbotstraat in Amsterdam, brandweer
hulpverlening ter plaatse</description>
<pubDate>Wed, 11 Jun 2014 16:46:42 +0200</pubDate>
<guid>d5ae65f5049871959f15130ceb06bf2f</guid>
</item>
<!-- .. many more items ... -->
<item>
<title>BR 1 BRAND WONING (+Inc.net: 2+) (KEUKEN) (WOONHUIS) (SLACHTOFFERS: ) ,
Anfieldroad 228 AMSTERDAM [ OVDN VVD ]</title>
<link>http://alarmeringen.nl/amsterdam-amstelland/amsterdam/15755472/p2000-woningbrand-op-anfieldroad-in-amsterdam-brandweer-met-spoed-ter-plaatse.html</link>
<description>Woningbrand op Anfieldroad in Amsterdam, brandweer met spoed ter
plaatse</description>
<pubDate>Wed, 11 Jun 2014 13:28:07 +0200</pubDate>
<guid>ad9a2c0586db794415588e2b4e50375a</guid>
</item>
</channel>
</rss>
更新
这是我用来在地图上显示地址的JavaScript代码:
function initialize()
{
geocoder = new google.maps.Geocoder();
var myLatlng = new google.maps.LatLng(52.37022, 4.89517);
var mapOptions = {
zoom: 11,
center: myLatlng,
mapTypeControl: true,
mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
navigationControl: true,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
if (geocoder)
{
geocoder.geocode(
{
'address': address // The variable is used here
},
function(results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
if (status != google.maps.GeocoderStatus.ZERO_RESULTS)
{
map.setCenter(results[0].geometry.location);
var infowindow = new google.maps.InfoWindow(
{
content: '<b>' + address + '</b>',
size: new google.maps.Size(150, 50)
});
var marker = new google.maps.Marker(
{
position: results[0].geometry.location,
map: map,
title:address
});
google.maps.event.addListener(marker, 'click', function()
{
infowindow.open(map,marker);
});
}
else
{
alert('No results found');
}
}
else
{
alert('Geocode was not successful for the following reason: ' + status);
}
}
);
}
}
函数初始化()
{
geocoder=新的google.maps.geocoder();
var mylatng=newgoogle.maps.LatLng(52.37022,4.89517);
变量映射选项={
缩放:11,
中心:myLatlng,
mapTypeControl:true,
mapTypeControlOptions:{style:google.maps.MapTypeControlStyle.DROPDOWN_MENU},
导航控制:对,
mapTypeId:google.maps.mapTypeId.ROADMAP
}
var map=new google.maps.map(document.getElementById('map-canvas'),mapOptions);
if(地理编码器)
{
地理编码(
{
“地址”:地址//此处使用变量
},
功能(结果、状态)
{
if(status==google.maps.GeocoderStatus.OK)
{
if(status!=google.maps.GeocoderStatus.ZERO\u结果)
{
map.setCenter(结果[0].geometry.location);
var infowindow=new google.maps.infowindow(
{
内容:''+地址+'',
尺寸:新谷歌。地图。尺寸(150,50)
});
var marker=new google.maps.marker(
{
位置:结果[0]。geometry.location,
地图:地图,
标题:地址
});
google.maps.event.addListener(标记'click',函数()
{
信息窗口。打开(地图、标记);
});
}
其他的
{
警报(“未找到结果”);
}
}
其他的
{
警报('地理编码因以下原因未成功:'+状态);
}
}
);
}
}
您似乎想要生成将在客户端使用的JavaScript变量。您正在选择许多对象。我会假设你希望它们都能提供。一种方法是生成代码,用JavaScript创建一个数组,并将每个字符串作为数组的一个元素
您还可以使用XPath提取标题
内容中的字符串。我在下面的示例中使用了不同但等效的方法:
<?php
$document = new DOMDocument();
$xml = $document->load('http://alarmeringen.nl/feeds/region/amsterdam-amstelland/brandweer.rss');
$xpath = new DOMXpath($document);
$titles = $xpath->evaluate('//title');
echo '<script>'."\n";
echo ' var addresses = new Array(); '."\n";
$count = 0;
foreach($titles as $title) {
$variable = $xpath->evaluate('normalize-space(substring-after(substring-before(text(), " ["), ", "))', $title);
if ($variable != '') {
echo ' addresses['.$count++.'] = "'.$variable.'";'."\n";
}
}
echo '</script>'."\n";
?>
从结果中可以看出,它在地图上放置了一个表示该地址的标记
如果您需要同时在地图中放置多个标记,我建议您查看以下问题/答案:似乎您希望生成将在客户端使用的JavaScript变量。您正在选择许多对象。您希望如何将它们全部放在一个变量中?会是数组吗?谢谢你的回复。但现在我得到了“零结果”的信息。我仍然无法在用于在地图上显示地址的变量中获取地址。在我看来,源可能已更改。它似乎是动态的。我把它放在这个可以测试的地方。我只是将
替换为
,这样您就可以看到结果(并避免任何代码删除)。我知道代码中发生了什么,但我仍然不知道如何获取数组中的地址以显示在地图上。我添加了一个小提琴,显示如何在地图上获取一个地址。
function initialize()
{
geocoder = new google.maps.Geocoder();
var myLatlng = new google.maps.LatLng(52.37022, 4.89517);
var mapOptions = {
zoom: 11,
center: myLatlng,
mapTypeControl: true,
mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
navigationControl: true,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
if (geocoder)
{
geocoder.geocode(
{
'address': address // The variable is used here
},
function(results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
if (status != google.maps.GeocoderStatus.ZERO_RESULTS)
{
map.setCenter(results[0].geometry.location);
var infowindow = new google.maps.InfoWindow(
{
content: '<b>' + address + '</b>',
size: new google.maps.Size(150, 50)
});
var marker = new google.maps.Marker(
{
position: results[0].geometry.location,
map: map,
title:address
});
google.maps.event.addListener(marker, 'click', function()
{
infowindow.open(map,marker);
});
}
else
{
alert('No results found');
}
}
else
{
alert('Geocode was not successful for the following reason: ' + status);
}
}
);
}
}
<?php
$document = new DOMDocument();
$xml = $document->load('http://alarmeringen.nl/feeds/region/amsterdam-amstelland/brandweer.rss');
$xpath = new DOMXpath($document);
$titles = $xpath->evaluate('//title');
echo '<script>'."\n";
echo ' var addresses = new Array(); '."\n";
$count = 0;
foreach($titles as $title) {
$variable = $xpath->evaluate('normalize-space(substring-after(substring-before(text(), " ["), ", "))', $title);
if ($variable != '') {
echo ' addresses['.$count++.'] = "'.$variable.'";'."\n";
}
}
echo '</script>'."\n";
?>
<script>
var addresses = new Array();
addresses[0] = "Louis Couperusstraat 16 AMSTERDAM";
addresses[1] = "Transformatorweg 28 AMSTERDAM";
addresses[2] = "Kolfschotenstraat 4 AMSTERDAM ZUIDOOST";
addresses[3] = "H.J.E. Wenckebachweg 48 AMSTERDAM Gevangenissen";
addresses[4] = "Pieter Lastmankade 168 AMSTERDAM";
addresses[5] = "Fiatstraat 1 AMSTERDAM";
addresses[6] = "Boterdijk UITHOORN";
addresses[7] = "Nieuwezijds Voorburgwal 130 AMSTERDAM";
addresses[8] = "Nieuwezijds Voorburgwal 130 AMSTERDAM";
addresses[9] = "Fiatstraat 1 AMSTERDAM";
addresses[10] = "David Blesstraat 12 AMSTERDAM";
</script>
var address = addresses[0];