delphi中给supermap的地图页面添加点
环境:
Delphi7中用WebBrowser打开地图页面,需要在其中添加一个起始点的显示。
supermap的地图显示用ajax实现。
解决办法:
1)在地图页面上添加显示点的javascript函数ShowPOI2(x,y,CallerID),可以添加在js文件中,比如说page.js或者customation.js等同地图页面一起载入的文件。
function ShowPOI2(x,y,callerid)
{
var InnerHtmlName="<img src='images/car2.gif'/><font face='宋体' size='2' color='#800080' style='text-decoration: blink'>"+callerid+"</font>";
map.CustomLayer.InsertMark("POIInfo1", x, y, 0, 0, InnerHtmlName,10);
map.SetCenterAndZoom(x,y,8);
}
其中,
CustomLayer.InsertMark(id, x, y, w, h, innerHtml, className, zIndex)
添加自定义注记。如果地图中已经存在与该注记ID相同的对象,则替换存在的注记。
id:自定义注记的ID值。x:对象的x坐标(地理坐标)
y:对象的y坐标(地理坐标)
w:对象的宽度(显示宽度),以象素(px)为单位
h: 对象的高度(显示高度),以象素(px)为单位
innerHtml:呈现时的HTML
className:呈现时的样式单CSS的ID
zIndex:自定义注记层的Index值。
摘自is.net的开发手册。
如果有多个点要同时显示的,并且都是用InsertMark添加的,那么第一个参数id,就必须不同;或者也可以考虑用addMark添加,addmark允许id相同。
2) 在Delphi中,用webbrowser载入地图页面,利用IHTMLWindow2的executeScript进行调用,传递x,y,callerid的值到ShowPOI函数。如下:
jsfunc := Format('ShowPOI2(%f,%f,%s)', [x, y,
QuotedStr(ACallerID)]);
frame_doc.parentWindow.execScript(jsfunc, 'JavaScript');
注意要引用到地图的frame,不然,会找不到相应的script。
3) 注意,如果点的值位于地图的显示范围之外,可能引起地图白屏,就是白茫茫一片,什么也看不到。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。