是否可以使用Google Place Search API在KML图层中进行搜索?

时间:2013-09-20 05:07:45

标签: javascript google-maps google-maps-api-3 kml google-places-api

我有一个由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图层中的那些点......

请帮助......

1 个答案:

答案 0 :(得分:1)

也许并非具体,可以使用Google Place Search API搜索KML文件,但您可以使用普通的旧javascript在KML文件中进行搜索。您需要做的步骤是

  • 以脚本可以读取的形式(可能是JSON)
  • 加载KML文件
  • 遍历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]);
        }
    })

}

Example