我是Google 3D Earth API的新手
我想在Google地球上添加多个palcemarkers?
这是我的示例代码,任何人都可以建议我在哪里添加多个标记?
var ge;
var placemaker = new Array();
var point = new Array();
google.load("earth", "1");
function init() {
google.earth.createInstance('map3d', initCB, failureCB);
}
function initCB(instance) {
ge = instance;
ge.getWindow().setVisibility(true);
ge.getNavigationControl().setVisibility(ge.VISIBILITY_HIDE);
for(var i = 0; i < data.length; i++ )
{
// Set the placemark's location.
point[i] = ge.createPoint( data[i].content );
point[i].setLatitude( data[i].lat );
point[i].setLongitude( data[i].log );
placemark[i].setGeometry(point[i]);
// Add the placemark to Earth.
ge.getFeatures().appendChild(placemark[i]);
}
}
function failureCB(errorCode) {}
google.setOnLoadCallback(init);
这里的数据是一个对象数组,包含lat,log和content。 我不会在地球上看到任何地标。 如果我按下一个单一的地方标记将工作正常,但如果我使用循环不工作。
在Google Map V中,有边界选项。 有没有可用于3D地球的选项?
答案 0 :(得分:2)
您需要使用createPlacemark()
创建地标对象。
您可能不需要创建地标数组,因为Google地球API会保留您可以使用ge.getFeatures().getChildNodes()
进行迭代的地标列表。
for(var i = 0; i < data.length; i++ )
{
// Create the Placemark
var placemark = ge.createPlacemark('');
// Set the placemark's location.
point[i] = ge.createPoint('');
point[i].setLatitude( data[i].lat );
point[i].setLongitude( data[i].lon );
placemark.setGeometry(point[i]);
// Add the placemark to Earth.
ge.getFeatures().appendChild(placemark);
}
此外,由于拥有数据数组,可能不需要点数组。 可以简化如下:
for(var i = 0; i < data.length; i++ )
{
// Create the Placemark
var placemark = ge.createPlacemark('');
// Set the placemark's location.
var point = ge.createPoint('');
point.setLatitude( data[i].lat );
point.setLongitude( data[i].lon );
placemark.setGeometry(point);
// Add the placemark to Earth.
ge.getFeatures().appendChild(placemark);
}
如果您想计算一堆通用KML功能的中心范围,可以使用Google地球API扩展程序:https://code.google.com/p/earth-api-utility-library/wiki/GEarthExtensionsDomReference#computeBounds(object)
但是如果您只有一个点数组,那么您可以轻松地手动计算中心,然后将LookAt设置为计算出的中心视点。
最终的initCB()看起来像这样:
function initCB(instance) {
ge = instance;
ge.getWindow().setVisibility(true);
ge.getNavigationControl().setVisibility(ge.VISIBILITY_HIDE);
var latSum = 0.0;
var lonSum = 0.0;
for(var i = 0; i < data.length; i++ )
{
// Set the placemark's location.
var point = ge.createPoint('');
point.setLatitude( data[i].lat );
point.setLongitude( data[i].lon );
latSum += data[i].lat;
lonSum += data[i].lon;
var placemark = ge.createPlacemark(data[i].content);
placemark.setGeometry(point);
// Add the placemark to Earth.
ge.getFeatures().appendChild(placemark);
}
// Create LookAt at the center view point
var lookAt = ge.createLookAt('');
lookAt.set(latSum / data.length, lonSum / data.length, 0,
ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, 20000);
ge.getView().setAbstractView(lookAt);
}