Google maps api 3 Google Earth与Google Maps和Places API的集成
我正在使用新的Google Earth集成代码和带有Maps V3的Google Places Api的组合。将当前结果输出到表中后,用户可以单击该表,并打开相应的标记和信息窗口。目前,这在MapsV3中工作得很好,但无法将infowindow的锚定位在正确的位置Google maps api 3 Google Earth与Google Maps和Places API的集成,google-maps-api-3,google-places-api,google-earth-plugin,google-places,Google Maps Api 3,Google Places Api,Google Earth Plugin,Google Places,我正在使用新的Google Earth集成代码和带有Maps V3的Google Places Api的组合。将当前结果输出到表中后,用户可以单击该表,并打开相应的标记和信息窗口。目前,这在MapsV3中工作得很好,但无法将infowindow的锚定位在正确的位置 function addResult(result, i) { var results = document.getElementById("results"); var tr = document.createElement('tr
function addResult(result, i) {
var results = document.getElementById("results");
var tr = document.createElement('tr');
tr.style.backgroundColor = (i% 2 == 0 ? '#F0F0F0' : '#FFFFFF');
tr.onclick = function() {
google.maps.event.trigger(markers[i], 'click'); //end add marker listener
}
google.maps.event.addListener(this.map_,
GoogleEarth.INFO_WINDOW_OPENED_EVENT_,
function(infowindow) {
//If Earth is open, create balloon
if (!that.earthVisible_) {
return;
}
var balloon = that.instance_.createHtmlStringBalloon('');
//TODO assuming anchor == marker == lastclicked
var placemark = that.lastClickedPlacemark_;
balloon.setFeature(placemark);
balloon.setContentString(infowindow.getContent());
that.instance_.setBalloon(balloon);
});
// On click of a placemark we want to trigger the map click event.
google.earth.addEventListener(ge.getGlobe(), 'click', function(event) {
var target = event.getTarget();
var overlay = that.placemarks_[target.getId()];
if (overlay) {
event.preventDefault();
// Close any currently opened map info windows.
var infoWindows = that.getOverlaysForType_('InfoWindow');
for (var i = 0, infoWindow; infoWindow = infoWindows[i]; i++) {
infoWindow.close();
}
that.lastClickedPlacemark_ = target;
google.maps.event.trigger(overlay, 'click');
}
});
我需要创建一个函数来定位表中单击的结果的Lat和Long,并为google earth设置窗口的定位点,同时还要处理在地图上单击的位置标记和在搜索栏中输入的地址
请参见此处的示例:
编辑
好的,我正在尝试这样做,当你点击结果表时,它将打开正确的气球,并将其连接到正确的位置标记。你帮了我很大的忙,帮助我更多地了解我真正在做什么。请看一下这个代码,让我知道我能做什么。JSFIDLE上还有另一部分代码,它控制引出序号出现的时间和地点,并基于lastClickPlacemark_uu变量
///My Attempt at the code
var getPosition = function(marker) {
var lat = marker.position.$a;
var lng = marker.position.ab;
var myLatlng = new google.maps.LatLng(lat, lng);
TODO assuming anchor == marker == lastclicked
var marker = new google.maps.Marker({
position: myLatlng,
map: map
});
var balloon = googleEarth.instance_.createHtmlStringBalloon('');
var placemark = marker;
balloon.setFeature(placemark);
balloon.setContentString(infowindow.getContent());
googleEarth.instance_.setBalloon(balloon);
// alert(lat + ',' + lng); // do something with it...
}
// The code that currently controls the window open and is based on the lastClickPlacemark_ variable
GoogleEarth.prototype.addEarthEvents_ = function() {
var ge = this.instance_;
ge.getWindow().setVisibility(true);
// add a navigation control
var navControl = ge.getNavigationControl();
navControl.setVisibility(ge.VISIBILITY_AUTO);
var screen = navControl.getScreenXY();
screen.setYUnits(ge.UNITS_INSET_PIXELS);
screen.setXUnits(ge.UNITS_PIXELS);
// add some layers
var layerRoot = ge.getLayerRoot();
layerRoot.enableLayerById(ge.LAYER_BORDERS, true);
layerRoot.enableLayerById(ge.LAYER_ROADS, true);
var that = this;
google.maps.event.addListener(this.map_,
GoogleEarth.INFO_WINDOW_OPENED_EVENT_,
function(infowindow) {
//If Earth is open, create balloon
if (!that.earthVisible_) {
return;
}
var balloon = that.instance_.createHtmlStringBalloon('');
//TODO assuming anchor == marker == lastclicked
var placemark = that.lastClickedPlacemark_;
balloon.setFeature(placemark);
balloon.setContentString(infowindow.getContent());
that.instance_.setBalloon(balloon);
});
// On click of a placemark we want to trigger the map click event.
google.earth.addEventListener(ge.getGlobe(), 'click', function(event) {
var target = event.getTarget();
var overlay = that.placemarks_[target.getId()];
if (overlay) {
event.preventDefault();
// Close any currently opened map info windows.
var infoWindows = that.getOverlaysForType_('InfoWindow');
for (var i = 0, infoWindow; infoWindow = infoWindows[i]; i++) {
infoWindow.close();
}
that.lastClickedPlacemark_ = target;
google.maps.event.trigger(overlay, 'click');
}
});
};
//SOMETHING LIKE THIS?????
var getPosition = function(marker) {
ge = googleEarth.instance_;
var lat = marker.position.$a;
var lng = marker.position.ab;
// var myLatlng = new google.maps.LatLng(lat, lng);
var placemark = ge.getElementById(marker);
var balloon = ge.createHtmlStringBalloon('');
balloon.setFeature(placemark);
ge.setBalloon(balloon);
// alert(lat + ',' + lng); // do something with it...
}
一个函数
“这将定位表中单击结果的Lat和Long”
可能是这样的
var getPosition = function(marker) {
var lat = marker.position.$a;
var lng = marker.position.ab;
alert(lat + ',' + lng); // do something with it...
}
您可以在这里调用它,以便获得与表中的项对应的特征的位置
tr.onclick = function() {
google.maps.event.trigger(markers[i], 'click'); //end add marker listener
getPosition(markers[i]); // get the position
}
第二部分不太清楚
同时在地图上单击位置标记
如果我理解您的意思,那么您可以修改您的marker事件侦听器,以便在地图上单击标记时调用相同的函数
google.maps.event.addListener(markers[i], 'click', function() {
getDetails(results[i], i);
getPosition(markers[i]); // get the position
});
最后
和在搜索栏中输入的地址
没有任何意义-地址没有位置,除非你对它们进行地理编码-而且我在你的页面上看不到任何搜索栏
编辑
“我只需要弄清楚如何应用这些单独的lat和lng
值,并将其设置为placemark“
同样,我不是100%确定我理解,但是如果你想用你的数据创建一个新的标记,你可以很容易地修改函数
var createMarker = function(marker) {
var lat = marker.position.$a;
var lng = marker.position.ab;
var myLatlng = new google.maps.LatLng(lat, lng);
var marker = new google.maps.Marker({
position: myLatlng,
map: map
});
}
设置JSFIDLE或jsbin,以便我们可以编辑您的代码在此处设置JSFIDLE!谢谢你的帮助!这是我在amatuer程序员创建新函数时遇到的问题之一,而我却不知道自己在做什么。lol。在使用这些API时,任何其他帮助建议或提示都将是惊人的!这个
在jsfiddle上不起作用:)是的,我知道我直接从我正在处理的文档中粘贴了代码。该js文件位于JSFIDLE的js部分,可以忽略查找本地脚本的代码行。谢谢。我不知道你在问什么,或者你所说的“为谷歌地球设置窗口的锚”是什么意思。你能澄清一下吗?这正是我需要的。我会在有机会的时候检查这个,如果我有问题会回来。再次感谢您的投入!!真是太棒了!现在我只需要找出如何应用这些单独的lat和lng值,并将它们设置为placemark。如果你在我做任何输入之前回到这一点(听起来很悲伤,你是如何走到这一点的)再次感谢。还有几个问题,哈哈,你帮了大忙。请看我的编辑你好?我被困在这最后一步,任何帮助都将不胜感激!!我不知道为什么我的答案中删除了投票和答案检查。。。