你好堆栈溢出的人!
老实说,我不知道是否有办法做到这一点,但我希望有,因为替代方案更加复杂,而且我不肯定如何完成它。目前,我在一个页面上运行了一个 Google 地球插件,并带有一些其他控件。该页面应该显示一个图表,其中包含调制解调器的延迟和信噪比数据,以及一个包含大量附加信息的网格,以帮助我的 ISP 在解决调制解调器故障时做得更好。
我的问题是:JavaScript 中有没有一种方法可以修改 Google 地球地标的颜色而不会弄乱 KML?
我知道你可以在 KML 中做这样的事情
<Style id="normalPlacemark">
<IconStyle>
<color>ffffff00</color>
<scale>5</scale>
<Icon>
<href>http://maps.google.com/mapfiles/kml/pushpin/wht-pushpin.png</href>
</Icon>
</IconStyle>
</Style>
但是我一直无法使用 C# 或 JavaScript 中的 AddKMLFromString() 将它附加到整个 XML 中的正确位置(我真的不熟悉)以使页面识别它。
这是我目前正在使用的修改后的插件代码:
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
var ge;
google.load("earth", "1");
//Create an instance of the Earth
function init() {
google.earth.createInstance('gmap', initCallback, failureCallback);
}
function initCallback(pluginInstance) {
ge = pluginInstance;
ge.getWindow().setVisibility(true);
//URL for KML file which is taken directly from Google
//The KML in question is Google's giant file for weather data
var href = 'aurlwherewetherdatalives.kml';
//Use Google's fetch KML method to get the weather KML file and add it to our plugin's instance
google.earth.fetchKml(ge, href, function (kmlObject) {
if (kmlObject) {
ge.getFeatures().appendChild(kmlObject);
}
if (kmlObject.getAbstractView() !== null)
ge.getView().setAbstractView(kmlObject.getAbstractView());
});
//Turn on Country Borders, States, and Cities
ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true);
//By default, remoteExists uses True where JavaScript wants true
var jsRemoteExists = <%= remoteExists.ToString().ToLower() %>;
//If the remote exists, create a placemark and camera at its location using the
//the latitude and longitude variables retreived in the c#
if (jsRemoteExists)
{
//Variables have been created
var lat = <%= CSHARPLat %>;
var lon = <%= CSHARPLong %>;
ge.getWindow().setVisibility(true);
// Create the placemark and add it to Earth.
var placemark = ge.createPlacemark('');
// Set the placemark's location.
var point = ge.createPoint('');
point.setLatitude(lat);
point.setLongitude(lon);
placemark.setGeometry(point);
// Add the placemark to Earth.
ge.getFeatures().appendChild(placemark);
var la = ge.createLookAt('');
la.setLatitude(lat);
la.setLongitude(lon);
la.setRange(150000);
ge.getView().setAbstractView(la);
}
}
function failureCallback(errorCode) {
}
function addKmlFromString(kmlString) {
var kmlObject = ge.parseKml(kmlString);
ge.getFeatures().appendChild(kmlObject);
}
window.onload = init();
</script>
在后面的 C# 代码中找到将上面的 KML 添加到字符串并找到合适的位置来添加样式会更好吗?我一直在倾注谷歌的 API 并试图将它添加到不同的地方,大多数时候它只是中断并且不显示天气数据或地标。最终目标是根据遥控器是标称、处于警报还是处于警告状态来更改地标的颜色。我已经在这里和谷歌上寻找答案,但在 JS 中似乎没有做任何事情,而且我似乎无法以正确的方式附加 KML 以使其更改地标颜色。有人有什么想法吗?