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)  注意,如果点的值位于地图的显示范围之外,可能引起地图白屏,就是白茫茫一片,什么也看不到。

某GIS行业软件 5.2.1(全系列) 许可文件验证分析补遗

根据:飘云阁的文章——某GIS行业软件 5.2.1(全系列) 许可文件验证分析

用OllyDbg打开deskpro,很容易就可以找到相应的位置,修改SmALib50.dll。

可是,AuxLicense50.dll就比较麻烦了因为xxxxx.IS.AppServer.exe不能单独执行,只能以服务的形式运行,所以,很难跟踪到相应的位置。

解决办法:

直接用OllyDbg 打开文件AuxLicense50.dll,相应的地址就很容易找到了,另外,并不是如该文显示的,还是SmaLib50,而是AuxLicen,注意哦

原文地址:

image

image

这样,找到位置,相应的根据该文修改,就很容易了……

第二个修改的地址是10004481附近。

我也是用Win32Asm不小心才搜索到这个位置的,不容易啊。

可惜,还是说非法许可~

supermap 地图复制

之前,想从一台机子把地图和数据拷贝过来,由于数据库密码不一样,打开工作空间,都要重新建数据源,重新配置地图

和麻烦,但其实数据是一样的,数据库的结构也是一样的。

1.把原来的空间文件保存成sxw格式,会产生几个文件,把所有的文件拷贝

image

2.编辑sxw文件

修改数据源相关的值

3.用deskpro打开sxw文件,可以另存为smw文件,也可以直接配置使用sxw的空间。

SuperMap技巧小贴士

1.技巧贴:快捷方式真方便
SuperMap Deskpro提供了很多快捷方式,掌握其中的快捷操作,鼠标和键盘相结合会大大提高效率,比如,当你在窗口画线时,出了窗口范围,想移动,这时使用键盘上的“上”“下”“左”“右”键,要比“漫游”方便些。

2.技巧贴:使用XML技术合并工作空间
SuperMap GIS提供了XML格式的工作空间管理方式,使用该技术可以方便的合并多个工作空间,使用方法是:先将A、B两个工作空间保存为SXW格式,再用记事本打开,将A中有关地图的信息拷贝到B中相应的地图节点下,保存即可。

3.常见问题贴:问题1
进行SuperMap IS .NET项目部署时一般会需要修改地图服务的IP地址,与部署的服务器相对应,怎样修改呢?
解决办法:
在工程的web.config文件中增加以下三个key
<add key="MapServer_Address" value ="192.168.119.112"/>
<add key="MapServer_Port" value = "8800"/>
<add key="MapServer_Enforced" value = "true"/>
参数说明:
第一个参数:服务器地址;
第二个参数:端口;
第三个参数:当key值与页面中的MapControl设置不同时,该参数为true表示取key的设置,该参数为false表示取MapControl的设置。

4.常见问题贴:问题2
将SDB转换为PMR,在PDA上打开该数据没有显示出地图。
原因分析:
PMR格式中保存的是空间数据,地图配置(包括图层叠加、图层风格、专题图等)是保存在工作空间PMW文件中。
解决办法:
使用eSuperMap Viewer打开PMR,将需要叠加显示的数据集在一个地图窗口中打开,并为图层设置风格,然后保存地图和工作空间。将PMR和PMW文件下载到PDA设备上,打开工作空间和地图,数据就可以按照预先设定的样式和叠加顺序显示了。

5.问题:有时候在标签专题图中需要标注不同的字段,并使不同的标注以特殊的颜色显示,该怎么办呢?
解决方法:
1、将要标注的图层复制两份叠加显示,然后分别对两个图层用不同的字段制作标签专题图,并使最上面的图层透明显示。不过当被标注的图层的数据量较大时要慎用。
2、将字段保存成文本图层,与原始图层叠加显示。

6.问题:对于刚刚接触eSuperMap尤其是在VS2005下进行开发的用户来说,可能会觉得一开始的配置问题比较繁琐,特别是在编译时出现一些配置相关的错误以及连接模拟器或是嵌入式设备的时候经常遇到程序无法执行的提示。
安装步骤:
1、建立工程时包含开发包头文件和库文件;
2、正确设置设备类型以及是模拟器还是设备,并与步骤1中库文件的设置保持严格的一致;
3、运行前一定上传与前面设置对应DLL文件,包括设备类型、模拟器还是设备以及DEBUG版本还是RELEASE版本等;在VS2005下模拟器环境中调试一般是以共享目录的形式保存文件的,一定要将程序相关联的动态库文件添加齐全。

7.在SuperMap Objects中实现自定义添加空间对象的时候
如果数据集的数据量很大,要使用Query方法得到记录集然后调用AddNew方法添加对象,可以设置第一个参数查询条件为“smid<0”,这样既可以得到记录集,又可以提高查询的速度,可谓两全其美。

8.问题:关于SuperMap GIS软件的升级(5.0→5.2),需要升级驱动
解决方法:
您可以从公司的下载中心下载5.2.0的安装包,安装完成以后,在5.2.0的安装目录下有一个support目录,从里面找到新的驱动程序Sentinel Protection Installer.exe,安装一下即可。

9.问题:关于SuperMap Deskpro中的投影转换
解决方法:
由于投影转换的计算精度问题,它的计算结果是不完全可逆的。强烈建议您在进行转换前对数据进行备份。

10.问题:我们在做地图的时候经常会碰到这样的问题,那就是,将做好的虚线线型进行风格设置,当线宽度设置为5以上的时候,整条线就会变得很粗,根本看不出虚线的风格效果。
解决方法:
解决的办法是在线型编辑器中对该线型进行固定宽度的限制(例如固定宽度值给5),就可以做出符合要求的线型了。

 
11.问题:在Windows 2003系统中使用SuperMap IS .Net经常会有不出图的问题
解决方法:
解决办法是这样的,在安装软件过程中已经新建了output虚拟目录,但是在Windows 2003默认情况下这个虚拟目录是没有读取权限的,可以在Internet信息服务中找到output这个虚拟目录,将读取的复选框钩上就可以了。

12.问题:如何在图层列表 LayerControl 中去掉不想列出的图层?
解决方法:
1 、新建一个类,在 *.cs 文件中继承 SuperMap.IS.WebControls.Utility.LayerFilter ,同时重写 Filter 方法;
2 、在 MapControl_MapFirstInit 事件定义此对象,并给 LayerControl.DisplayFilter 赋值。
类的代码如下 :
public TestFilter ()
{
}
public override bool Filter(Layer layer)
{
if(layer.Name == Tower@temp)
{
return false;
}
return true;
}
在页面中使用的代码如下:
在 MapControl_MapFirstInit 事件中添加 :
LayerFilter tf = new TestFilter();
this.LayerControl1.DisplayFilter = tf;
LayerControl1.Update();

SuperMap技巧小贴士–CAIGISBLOG

[分享]IS.net一句话FAQ

  • 如何去掉地图上的水印?

将bin目录中plug_ins.xml文件删除。

  • 本机可以出图,但是其它机器访问不出图,怎么办?

http://localhost/ISManager/Config.aspx修改“系统设置”里的“访问图片主机名”为本机器名或IP即可。

  • 怎么查看版本?

IS安装目录/bin/SuperMap.IS.AppServer.exe->属性->版本->文件版本。

  • 如何查看许可文件的版本?

用记事本打开文件,找到[SmISNET***],***为Professional是专业版,Advanced是企业版!

  • 为什么无法浏览AjaxMap?

查看版本,专业版不支持AjaxMap

继续阅读

supermap vs2005 编译错误

重新生成supermap的窗体时,显示

警告    1    找不到指定的程序。 (异常来自 HRESULT:0x8007007F)        0    0   

image

用电子注册工具注册时,显示:

全部都是“注册失败!”

如果从工具箱拖动控件到窗体,就会显示:

无法创建控件 axHost  之类的

再次重新注册时,弹出对话框“您还可以使用13次,注册联系……”等,才发觉是使用了破解软件

原来的那个破解软件,有使用次数的限制,现在,跟最新版的supmap已经配不上了,deskpro还可以用下,objects已经不能用了。

——————————————————

用自己的破解软件覆盖了一下,重新注册object,就全部显示注册成功。

关闭vs2005,再次打开,就一切正常了。