我有一个由map API组成的Javascript。与此同时,我使用Google Map Engine(Lite)创建了KML地图图层,并将该KML图层集成到我的地图中,如下所示,
function initialize() {
var infowindow = new google.maps.InfoWindow();
var pyrmont = new google.maps.LatLng(6.990440,81.055313);
var mapOptions = {
center: pyrmont,
zoom: 11,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map-canvas"),
mapOptions);
var ctaLayer = new google.maps.KmlLayer({
url: 'http://mapsengine.google.com/map/u/0/kml?mid=z77FHFP6y-14......'
});
ctaLayer.setMap(map);
var request = {
location: pyrmont,
radius: '2500',
keyword: 'school'
};
service = new google.maps.places.PlacesService(map);
service.radarSearch(request, callback);
我在KML图层中添加了一些点,但是当我在地图上执行radarSearch时,它无法识别我的KML图层中的那些点......
请帮助......
答案 0 :(得分:1)
也许并非具体,可以使用Google Place Search API搜索KML文件,但您可以使用普通的旧javascript在KML文件中进行搜索。您需要做的步骤是
因此,一个简单的实现方法是使用yahoo管道将KML文件转换为JSON并使用$.ajax
加载它。处理Same-Origin策略并解析KML。然后我们存储相关数据以便稍后搜索
var searchData=null
$.ajax("http://pipes.yahoo.com/pipes/pipe.run?_id=10a81555228e77349570df1cc6823ed2&_render=json&urlinput1=" + kmlURL)
.done(function (data) {
searchData=data.value.items[0].Document.Placemark //structure of yahoo pipe
})
创建一个简单的搜索功能。在这里,我们只是做一个非常粗略的文本搜索作为概念证明,我们可以使用谷歌地图的计算添加半径搜索here
function searchKML(request,callback){
var ret=[]
if(!searchData) return
for(var i=0;i<searchData.length;i++){
//insert distance search. continue if too far
if( searchData[i].description.indexOf(request.keyword)!=-1 ||
searchData[i].name.indexOf(request.keyword)!=-1 ){
ret.push(searchData[i])
}
}
callback(ret)
}
为生成的搜索创建标记的功能
function createMarkerKML(place){
var loc=place.Point.coordinates.split(",")
var marker = new google.maps.Marker({
map: map,
position: new google.maps.LatLng(loc[1],loc[0])
});
google.maps.event.addListener(marker, 'click', function () {
infowindow.setContent(place.name);
infowindow.open(map, marker);
})
}
有了这些功能,您只需使用常规搜索调用searchKML
即可将搜索功能与Google自己的搜索功能集成
function searchMap(str) {
var request = {
location: map.getCenter(),
radius: '2500',
keyword: str
};
service.radarSearch(request, callback); //normal search
searchKML(request,function(results){
for (var i = 0; i < results.length; i++) {
createMarkerKML(results[i]);
}
})
}