1

我有一个由地图 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 图层中添加了一些点,但是当我在地图上执行雷达搜索时,它无法识别我的 KML 图层中的这些点……</p>

请帮忙……</p>

4

1 回答 1

1

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

  • 以脚本可以读取的形式加载 KML 文件(可能是 JSON)
  • 遍历KML数据,筛选出你想要的数据
  • 显示搜索结果

因此,一个简单的实现是使用 yahoo 管道将 KML 文件转换为 JSON 并使用$.ajax. 处理同源策略并解析 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
})

创建一个简单的搜索功能。在这里,我们只是做一个非常粗略的文本搜索作为概念证明,我们可以通过使用谷歌地图的计算来添加半径搜索,如此处所述

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]);
        }
    })

}

例子

于 2014-05-17T17:17:59.557 回答