1、启动地图服务,浏览AjaxDemo报:“由于目标计算机积极拒绝,无法连接, 127.0.0.1:8800”。查看日志(SuperMap IS.NET安装目录/bin/log文件夹下,找到当天日期命名的文件夹SuperMap.IS.AppServer.exe.MapServer1.log)文件,看到“非法许可,请联系北京超图软件股份有限公司”等字样。
解决:
打开许可配置管理工具,配置许可。如果硬件锁参考硬件锁配置文档或者参考SuperMap IS.NET安装目录下Documents/Using SuperMap IS .Net.pdf文档;如果是文件许可重新配置许可,还是不行则重新申请许可。
2、Windows server2003操作系统,启动地图服务后,浏览AjaxDemo报:HTTP错误 404 – 文件或目录为找到。浏览其他后缀名为Aspx的页面均报此错误,而自己写一个html页面,浏览正常,单击网站下某个虚拟目录-右键属性,虚拟目录—配置---应用程序配置—映射---可以找到Aspx对应的可执行文件。
解决:
打开IIS6.0,web服务扩展---Asp.NET v2.0.50727扩展设置为允许即可。
3、 访问AjaxDemo不出图,但是出来了地图列表、图层列表,打开IIS,查看IS虚拟目录下的output虚拟目录,看到该目录下面有相应的quickcache/当前访问地图的名字命名_100*100的文件夹,里面有相应的图片文件。打开地图服务管理工具发现,系统参数设置—访问图片主机名—不是本机能访问到的地址。
解决:
打开地图服务管理工具找到IS配置,找到系统设置节点,修改访问图片主机名为本机和其他机子能访问的地址修改完成后,保存--重启地图服务。
注意:默认的图片访问主机名为主机名字,局域网访问强烈建议设置为ip地址。
4、浏览页面时显示页面的源代码
解决:
开始->运行:%SystemRoot%Microsoft.NETFramework v2.0.50727aspnet_regiis.exe –i,或者直接打开CMD,进入到%SystemRoot%Microsoft.NETFramework v2.0.50727目录下运行aspnet_regiis.exe –i命令即可。
5、 访问工程如manager或者AjaxDemo等需要用户名密码输入多次登录系统用户的用户名及密码,还是提示输入用户名密码。
解决:
在IIS7.5中,访问权限设置成匿名访问和集成WINDOWS身份验证(要单击出问题要访问的虚拟目录),授权规则改成允许所有人访问,打开网站的web.config配置文件,找到<authentication>节点,将其设置为“Windows”并把<authorization>这个节点中的两个规则注释了,这样就能访问了。如<authentication mode="Windows" />
<authorization><allow roles="BUILTINAdministrators" />
<!--<deny users="*" /> --> </authorization>
在IIS6.0中,
单击这个虚拟目录把访问权限设置成匿名访问和集成WINDOWS身份验证即可。
在IIS5.1中
单击这个虚拟目录把访问权限设置成匿名访问和集成Windows身份认证,注意不要勾选允许IIS控制密码,另确定授权规则改成允许所有人访问,打开网站的web.config配置文件,找到<authentication>节点,将其设置为“Windows”并把<authorization>这个节点中的两个规则注释了,这样就能访问了。如 <authentication mode="Windows" /><authorization><allow roles="BUILTINAdministrators" /><!--<deny users="*" /> --></authorization>
6、[c2] 工程发布出来、本机能访问,但是局域网访问不出图,MapControl控件打红叉或者进度条一直运行状态,用httpwatch或者fiddle跟踪地图图片请求,发现图片地址为http://hostname/...png,而该机子通过ping该主机名{hostname}时候ping不通。
解决:
打开manager找到IS配置,找到系统设置节点,修改访问图片主机名为本机和其他机子能访问的地址修改完成后,保存--重启地图服务。
7、WebControl开发模式,自己的工程不出图,浏览demo也不出图,mapcontrol控件上是打红叉,进程条一直存在,检查output文件夹,发现已经生成相应的图片了,在IIS下浏览output,也能正确访问,后来从网页的源文件中,查找到MapControl访问的图片地址,发现和output发布的虚拟目录不一致。
解决:
打开manager找到IS配置,找到系统设置节点,修改访问图片主机名为本机和其他机子能访问的地址修改完成后,保存--重启地图服务。
8、[c3] 浏览Aspxdemo和AjaxDemo均不出图,用WinFormClient浏览,返回类型选择ReturnBinaryData,可以出图,但是设置成ReturnUrl,报“远程返回404错误”。查看IIS的output所在的网站的端口不是80端口,因此取不到图片。
解决:
打开manager找到IS配置,找到系统设置节点,修改访问图片主机名为本机和其他机子能访问的地址+端口,修改完成后,保存--重启地图服务。
9、更换自己的工作空间路径后不出图,打开日志(SuperMap IS.NET安装目录/bin/log文件夹下,一般是当天日期命名的文件夹)看到:访问***的地图为null 类似报错信息
解决:
清除IIS缓存,即清掉w3wp进程,如果是xp系统,对应的进程名字为aspnet_wp.exe,重启地图服务
10、原来浏览AjaxDemo出图正常,修改了IIS服务器发布web服务端口(默认80),就不出图了。
解决:
如果仅仅修改了工程所属网站的端口,而默认SuperMap IS.NET的安装后在IIS创建的output虚拟目录在默认网站下且是默认的80端口,仅修改工程Maphandler为”./”即可。如果output也在非80端口上,则需要把图片访问地址修改为 ip地址+端口 格式。过程如:
打开SuperMapIS.config(在SuperMap IS.NET安装目录下的bin文件夹下)找到website节点,默认的website设置为:http://{hostname}/is/output,此处修改为:http:// IP地址:端口/IS/output ,即可。
注意:由于此处修改的是地图服务的参数,所以修改完成后需重启一下地图服务
11、浏览AjaxDemo报:“应用程序中的服务器错误。未将对象引用设置到对象的实例”
解决:
地图名字写错,查看MapControl控件代码找到MapName属性,修改为地图服务器发布的地图,或者直接删掉MapName属性及值。
1浏览地图,能正常放大缩小,但是显示为白图。
1数据库型数据源,数据库不能连接;
2地图某些图层丢失或者数据集损坏;
3文件型数据源,Deskpro打开就是白图。
白图问题一般是数据原因引起的,而数据问题可能的常见情况有三种,一个是文件型数据源,Deskpro打开浏览地图就是白图;一个是数据源突然断掉连接,另外一个就是某些图层丢失或者损坏引起的问题。如果出现建议先查看日志(SuperMap IS.NET安装目录下/bin/log/以当天或者最近日期启动地图服务的日期命名的文件夹下SuperMap.IS.AppServer.exe.MapServer1.log文件中)及Windows事件管理查看系统报错信息等情况。
如果是文件型数据源,要确保其他软件或系统进程没有打开过该数据,如果系统环境比较复杂,可以把这个数据拷贝到其他机子上看一下能否打开,如果还是打不开,如果有备份建议重新拷贝一份新的数据。
如果是数据源断掉引起的问题,可以停掉地图服务打开工作空间(如果数据源都是数据库型不用停掉地图服务),查看数据源能否访问,如果数据库和地图服务在不同机子查看网络是否断掉,如果断掉了,停掉地图服务,连上网线即可,然后清除图片缓存,web服务器缓存,重启地图服务器即可。
如果排除数据源断掉及文件型数据源被独占打开引起的问题,可以使用SuperMap Deskpro浏览地图查看数据情况,如果地图中某些图层对应的数据集为空,或者记录数为空,则把备份的好的数据拷贝过来即可。如果单击浏览某个数据集有对象,但是浏览属性数据没有记录的话建议重建空间索引,重新计算数据范围,或者重新从备份数据中拷贝过来新建一个数据集,然后把该图层指向该数据集即可。数据都检查正常后,清除图片缓存,web服务器缓存,重启地图服务器浏览地图。
1浏览地图页面,地图窗体整体或者部分显示黑色图片。
2地图窗体有黑色条带,其余部分为白色。
3地图页面有多个图片重复,或者全部重复。
继续阅读下文前请参考: SuperMap Deskpro限制超过500M左右的ecw数据(根据ecw的压缩比数据大小略有不同)导入到数据源中,但是可以通过新建关联文件的ecw集,来浏览地图,但是发布该地图数据时候,SuperMap IS.NET会有此限制,建议把ecw数据用影像处理软件如ermapper,edars切割成小块,导入导数据库中。 |
1出图过程内存不足
2修改了屏幕分辨率
3切块大小设置引起
4数据问题
5 Deskpro设置固定比例尺级别,SuperMapIS.NET也设置了,这两者有不同的比例尺
黑图问题在SuperMapIS.NET 5.3后续版本很少出现,如果出现建议先观察地图服务器内存使用情况、数据组成情况、日志报错信息及Windows事件管理查看系统报错信息等情况。
现象1与2的常见原因是内存不足,在Windows32位系统中单进程的内存使用不能超过2G,所以出现问题时候请先判断一下地图服务器的SuperMap.IS.Appserver进程的内存使用量情况,另外该类异常SuperMap IS.NET一般会写入日志文件中,可以查看一下日志文件(SuperMap IS.NET安装目录下/bin/log/以当天或者最近日期启动地图服务的日期命名的文件夹下SuperMap.IS.AppServer.exe.MapServer1.log文件中)报错情况。如果发现内存占用过大,则可以把引擎缓存--占用内存大小的限制设置为一个合适的值,如800左右(SuperMapIS.NET安装目录下/bin/SuperMapIS.Config文件,<memoryUseLimitSize>0</memoryUseLimitSize>节点设置为<memoryUseLimitSize>800</memoryUseLimitSize>),然后重启地图服务,清除web缓存和地图缓存,查看出图情况。
现象3一般是浏览了一段时间后,修改了屏幕分辨率后,又开始浏览地图出现该问题,建议清除缓存图片,web缓存,重启地图服务即可解决,另外如果机子显示器分辨率如果经常调整的话建议设置出图与设备无关参数,具体请参考SuperMap Deskpro做预缓存相关文档。
现象4一般数据问题建议逐个排查三个方面,一个工作空间问题,符号库问题,特殊数据如CAD数据、由其他数据格式转换为SuperMap格式的数据、是否有组件开发处理出来的工作空间及数据文件。如果工作空间建议另存为其他格式工作空间,或者导出地图模板新建一个工作空间。如果是符号库问题,建议排查特殊符号,如特殊新建的符号,栅格符号等。如果是特殊数建议确定是哪个数据集引起问题,逐个删除来排除每个数据集引起问题。
现象5 不建议Deskpro中设置地图固定比例尺级别,如果设置建议取消Deskpro中设置地图比例尺控制。
使用SuperMap Deskpro出地图预缓存,如何判断是否使用上
1使用Deskpro出了预缓存,浏览地图速度还是很慢,和以前不出缓存的速度基本差不多,出了缓存后发现缓存目录下出现了其他内容相同,但是名字不同的图片文件,日期显示最近浏览时间。
2出了缓存,但是浏览地图后发现缓存目录下生成了其他除了所设定的比例尺的文件夹外,还有其他级别比例尺命名的文件夹
3第一次浏览速度慢,在此浏览速度快了,而在此浏览上次浏览未浏览过的区域速度变慢。
4浏览地图同时打开任务管理器查看SuperMap.IS.AppServer.exe进程的CPU使用率和内存使用率比之前略有增长,而且持续时间和没出预缓存时候基本相同。
继续阅读下文前请参考: 参考SuperMap Deskpro出预缓存注意事项文档并注意关键点:修改了组件和Deskpro的与设备无关参数后组件要反注册,索引范围要是整幅地图。 |
1出了预缓存之后重新保存了地图及工作空间;
2出缓存时候参数设置漏掉;
3出缓存的图片格式和工程请求的地图图片格式是否对应;
现象1与3浏览地图速度很慢,和之前预缓存的速度差不多,看一下浏览过的缓存目录下,出现了内容相同,但是名字不同的图片文件,日期显示最近浏览时间,首先是否由于出了缓存后重新修改地图,保存地图引起的,建议出预缓存之前确定地图已经修改完成,后续出缓存过程中不要保存修改地图,尽量也不要保存工作空间;其次,判断是否由其他机子出了预缓存,但是屏幕分辨率和服务器的分辨率不同,而且也没设置出图与设备无关性参数。如果要在其他机子上出缓存,设置出图与设备无关参数,而且使用同一份工作空间;再次,判断出图设置的图片格式和地图的工程请求的图片格式不同。出缓存前考虑工程所要使用的缓存图片格式,保证工程请求的图片格式和出缓存图片格式相同,如Deskpro 出的预缓存图片格式为png,但是工程请求的图片格式(imageFormat参数)为jpg,此时根据最初设定图片格式,确实是重新出缓存还是设置工程请求的图片格式;最后看是否由于出缓存设置失误,建议参考出缓存相关文档,重新出缓存。
现象2一般是由于工程没限制使用特定比例尺,给初始化地图设置特定出了预缓存的比例尺即可。
一般情况下把浏览地图页面看不到地图的情况归为不出图的问题,常见现象如下:
1页面报:“由于目标计算机积极拒绝,无法连接。IP地址:8800”。
2页面报:“应用程序中的服务器错误。未将对象引用设置到对象的实例”
3地图窗体显示红叉号,进度条一直进行。
4地图窗体显示灰色,放大缩小没有反应,浏览器左下角报脚本错误。
5浏览Demo页面,Demo 框架会显示,但是地图显示窗口为空白。
6地图窗体为灰色,但是出来了地图列表、图层列表。
7本机可以访问,但是局域网访问就不出图了。
8新建一个工程,拖上一个地图控件,单击右上角加载地图,报错连接地图服务器失败,或者出图为带叉号。
|
不出图的常见的原因如下:
1地图服务器没有启动或者启动失败
2Maphandler书写错误
3服务器地址与端口不能访问
4Output虚拟目录不能访问
5图片访问或输出地址错误
现象是由特定的原因引起,而引起不出图的原因情况比较多,针对常见现象我们可以分析是什么原因引起的问题:
现象1:不能连接到地图服务或者连接地图服务失败,这类问题一般是由于地图服务器没启动或者启动失败引起,具体解决方案可以参考《SuperMapIS.NET启动失败常见问题》;
现象2:一般是由于修改了工作空间,而没有重启地图服务,或者工程请求的地图在工作空间中不存在引起,第一种情况的话,建议更改了地图服务发布的工作空间后重启地图服务、web服务器、重新打开浏览器进行浏览,第二种情况建议查看代码请求地图修改为工作空间已有的地图;
现象3:一般WebControl开放方式的MapControl加载图片默认带有进度条,而进度条一直存在表明一直正在获取图片,此时有两种情况,output目录不能访问或者图片访问或输出地址错误,output虚拟目录能否访问可以直接用浏览器浏览output虚拟目录下内容如http://localhost/is/output/图片名,则可以直接看到output目录能否访问了,图片访问地址是否正确可以通过浏览器右下角状态栏观察到图片访问地址是否正确或者直接查看地图服务管理工具查看图片访问地址是否正确;
现象4:一般出现在第一次使用AjaxScripts开发方式开发,部署自己的maphandler时候,除了写代码过程出现细节问题,主要由于对Maphandler的理解及output目录不能访问或者图片访问或输出地址错误,前面已对后面一种原因详细介绍,针对maphandler的理解请参考《maphandler介绍与创建》文档; 现象5与6:一般此问题有两种情况,output目录不能访问或者图片访问或输出地址错误,output虚拟目录能否访问可以直接用浏览器浏览output虚拟目录下内容如http://localhost/is/output/图片名,则可以直接看到output目录能否访问了,图片访问地址是否正确可以通过浏览器右下角状态栏观察到图片访问地址是否正确或者直接查看地图服务管理工具查看图片访问地址是否正确,如果是output虚拟目录不能访问可以查看IIS相关介绍,修改使其正常能访问,如果是图片访问地址错误,修改为能正常访问地址,例如默认的图片访问地址为{hostname},如果局域网访问则修改为服务器IP地址;
现象7:一般是由于图片访问原因,因为图片访问地址默认是主机名,如果局域网访问则有时候访问不到,所以此处建议把图片访问地址修改为主机ip地址;
现象8:一般情况下由于maphandler书写错误引起,此种现象常见于AjaxControl开发方式,由于默认的AjaxControl开发方式拖到页面一个MapControl控件,单击右上角MapControl task面板load Map按钮后弹出加载地图面板,此时需要填写Addr输入框中显示的是ip地址,但是此出需要填写为maphandler,例如本机访问可以为“http://localhost/IS/AjaxDemo/“。
上面只是对常见现象进行了简单分析,如果您想后续开发过程中快速定位问题,找到原因之所在,强烈建议您继续阅读。针对该问题一般情况下要考虑的问题如下,首先确定地图服务器已近启动且启动成功,如果不知道如何判断地图服务器是否启动成功,请参考《判断SuperMap IS.NET启动是否成功的两种方式》,如果启动失败请参考《SuperMap IS.NET启动失败问题排查注意事项》及《SuperMap IS.NET启动失败常见问题》等文档。
其次output虚拟目录是图片发布地址,一般情况下要确保IIS下有一个output目录并配置为能正常访问,默认SuperMapIS.NET安装后会在IIS上创建一个output虚拟目录,地址为http://localhost/IS/Output/;如果创建了不能访问或新建了一个output目录,需要把设置这个目录的匿名访问及集成Windows身份认证并把授权规则设置为所有人访问。
图片访问地址是地图服务器发送给客户端地图服务器产生地图的地址,找到SuperMap IS.NET安装目录/bin的SuperMapIS.config文件,用记事本打开,定位至website=http://localhost/is/output节点,查看此节点设置,是否是上面output的地址;图片输出目录是地图服务器生成地图的目录,找到SuperMapIS.config文件中options output="..output",默认的出图目录为SuperMap IS.NET安装目录/output,如果修改请重新定向,注意此处的图片访问地址的website所指向的虚拟目录必须为options节点所指向的物理出图路径。
如果工程使用Ajax开发方式,请确定Maphandle是否书写正确,Maphandle正确书写格式 是“ http://localhost/工程虚拟目录/ ”或者 “./”,前提是工程配置了系统引用库和web.config文件地图服务器地址和handler,默认范例为“ http://localhost/IS/AjaxDemo/”,如果是非80端口,请把Maphandler设置为“./”。 建议把Maphandler书写为“./”。在创建了maphandler的工程的Web.config文件中<add key="MapServer_Address" value="localhost" /><add key="MapServer_Port" value="8800" />节点配置了地图服务器,如果web工程和地图服务器不在同一台机子上请把此处MapServer_Address修改为地图服务器的IP地址,并且确定能正常访问该地址和端口。
1如果初次安装SuperMap IS.NET请先参考《SuperMap IS.NET安装调试注意事项》
2更加直观快速定位问题请参考使用fiddle或者httpwatch等工具来进行快速分析定位问题。
3跨域访问,如果不明白跨域问题请参考SuperMap IS.NET联机帮助中开发指南—专题介绍—跨域访问相关介绍,常见例子如访问工程地址如http://IP地址/虚拟目录名字/,但是图片访问地址和maphandler都是书写为http://localhost/虚拟目录名字/即有可能引起跨域访问问题,建议如果用IP均用IP,用localhost均用localhost。
4如果使用开发方式为TcpMap,则注意注意建立连接时候写入正确地址和端口,并且地图服务器正常启动、端口和地址能正常访问,常见写法IMap m_map = TcpMap.Create(MapServerAddress, MapServerPort, new Hashtable());。
地图服务器启动是否成功一般来说最直接的方式是浏览Demo能出图,然而由于web服务器因素、工程元素、浏览器因素,很难排除地图服务器本身因素引起的原因,所以列举两种最直接方式来判断地图服务器启动成功,为进一步解决问题,确定产生问题的因素做出判断。
地图服务器启动成功后,会产生三个日志文件(在SuperMapIS.NET的安装目录下bin文件夹下log文件夹)
打开SuperMap.IS.AppServer.exe.MapServer1.log,如下是正常启动地图服务器后日志情况。
另外一个SuperMap.IS.ServerManager.exe.log日志文件
最后一个SuperMap.IS.AutoTask.exe.log日志。
2、Demo分析
可以在装了.net framework3.5的系统上运行安装目录下Demo文件夹中的WinFormClient 范例工程。默认目录为(C:Program FilesSuperMapSuperMap IS .NET 6DemoWinFormClient)运行后界面如下:
单击初始化。弹出
设置地图服务的IP地址和端口单击校验,选择要查看的地图,设置返回图片的格式和返回图片的类型。如果返回类型为ReturnBinaryData则为返回图片,则地图服务正常启成功。
说到浏览范围控制,起始于一个问题:MapControl控件浏览地图时候地图范围外区域会有部分白图,这部分白图是SuperMap IS.NET动态出图出来的凡是浏览到地图区域以外的区域,都会有白图,怎么只看到有图的区域呢?其实思路很简单,当客户浏览到地图外区域时候出发地图onviewboundschanged事件,在这个事件中判断浏览到的地图范围超出当前地图的范围,回到前一地图状态。
由于这样的需求很多,所以SuperMap IS.NET也开出来了这样的接口,来控制地图可视范围
一、初始化的时候控制地图浏览范围,具体设置如下:
① AjaxControl 开发模式:在SuperMap.IS.Utility.js 文件中找到_CreateMapControl 这个
函数,然后如下代码:
params.customBounds =new Array ();
params.customBounds["changchun"]=new SuperMap.IS.MapRect(800,‐6000,6000,‐800);
② AjaxScript 开发模式:在初始化地图的脚本中,对params 值做修改,写法与ajaxcontrol
一致,只是写的位置不同;
注:如果是多个地图,可以如下设置:
params.customBounds["changchun"]=new SuperMap.IS.MapRect(800,‐6000,6000,‐800);
params.customBounds["Edit"]=new SuperMap.IS.MapRect(800,‐6000,6000,‐800);
二、在非初始化时设置:
AjaxControl 和AjaxScript 方法一致,具体设置:接口是SetCustomBounds,该方法可以
在地图初始后完成之后,任意时刻调用。
function setBounds() {
var mr = new SuperMap.IS.MapRect(800, ‐6000, 6000, ‐800);
map.SetCustomBounds(mr); }
注意:目前该方法仅支持Ajax 开发模式而且必须要设定比例尺级别,在SuperMap IS.NET5.3.5.11729 版本以后均试用,也支持SuperMap SuperMap IS.NET6.0 及以上版本。
由此又引出来一个问题:地图的权限控制,什么事地图的权限控制呢?其实就是指根据不同的用户看到不同的地物内容或者范围,很多业务系统有这样的需求,如工商系统,市级的工商局局长看到的是全市的纳税企业信息,而县级的工商局局长只能看到全县的纳税企业信息,即不同级别的人看到自己职权范围内的数据,这个在通常的业务系统中很常见,即权限管理系统。但是应用到地图上的话,就是控制不同的角色查看不同的数据(地物内容或者范围)。
其实这样的需求在GIS中实现是最简单的,即图层过滤,只需设置过滤条件,即可不同的权限用户看到不同的地图内容。但是在BS系统中,面对海量的GIS数据量和高性能的地图访问,一般的处理策略是做好地图图片缓存提高访问性能,这样的情况下图层过滤式不可能了,那这样的需求如何实现呢?其实回到问题的原始需求,思考一下这个问题,用户需求过滤的是地物和范围,而这个范围是从最开始划定的区域,最简单的一个方案:如果区域数量比较少,直接某个区域保存为一幅地图,不同用户显示不同地图即可。但是这个方案的前提是划定区域固定,而且数量有限。第二个方案:直接按照浏览范围控制显示区域即可,具体可以参考上面,这个方案适用于用户范围比较多的情况。第三个方案:动态出图方案,这样的方案适合于数据量特别少的情况,当然也可以通过叠加地图方式来叠加上底图上,即mashup了。第四个方案:动态的出图的地物比较多,这样的情况下可以采用一个和第三个方案相反的方案,第三个把需要控制显示的地图动态显示,第四个方案可以叠加一个背景特定区域透明,其他不透明的地图,这样只显示特定区域即可。
说了这么多,感觉有点罗嗦,上面是一些关于控制范围的思考,欢迎大家批评指正。