|
liuzheli :
昨天在这里发帖子了,斑竹不在,我自己看了一些spatial方面的书。自己对map definition manager摸索了一天的时间,有一些收获,同时有很多疑惑。 我先说一下我的尝试和我成功的一些经验,对一些有此问题的或许有帮助: 1、定义连接。论坛里有相关帖子,如果出现驱动找不到之类的问题在论坛里都能解决方案了,不说了。 2、打开地图定义管理器。 ----新建一个文件 选择oracle spatical 输入相应的信息。用户用mapinfo,mapinfo(这个在我的oracle 数据库里已经存在了)。 选择表,输入JUMINDI(这个是我用easyloader上传上来的。上传到mapinfo的这个用户里的表) ,id字段:MI_PRINX 选择查询mapinfo_mapcatalog的其他设置 访问本地数据。 图层名称起名为JUMINDI 到这里,可以在地图管理器上看到相关的地图信息。 -----保存地图定义到数据库 首先在mapinfo用户下新建表ceshi,其中包含两个字段 name(varchar2),spaticalvalue(clob)。 在地图管理器里点另存地图定义为。 选择数据库,选中已经建立的连接。 选择“用表” 输入 ceshi ,名称列输入name,地图定义列输入spaticalvalue。 这个时候点刷新,看不到地图文件,因为还没向库里保存任何地图定义。在地图名称里输入JUMINDI。 点保存。这个时候将地图定义保存到数据库中。 3、编码测试。 采用中等客户端。其中初始化mapj对象的代码如下: MapJ myMap = new MapJ(); // this MapJ object myMap.setDeviceBounds(new DoubleRect(0, 0, m_mapWidth, m_mapHeight)); myMap.setZoom(500); //以下是向mapj对象里加入数据库数据内容 OraSoMapDefContainer mdc = new OraSoMapDefContainer("oracle.jdbc.driver.OracleDriver", "jdbc:oracle:thin:@10.80.168.231:1521:new","mapinfo", "mapinfo", "ceshi", "name", "spaticalvalue"); myMap.loadMapDefinition(mdc, "JUMINDIT"); //以下是向mapj对象里加入标注图层 AnnotationTableDescHelper atdh = new AnnotationTableDescHelper("ALayer"); AnnotationDataProviderHelper adph = new AnnotationDataProviderHelper(); LocalDataProviderRef ldpr = new LocalDataProviderRef(adph); Layer animate_layer = myMap.getLayers().insert(ldpr, atdh,0, "ALayer"); return myMap; 这个时候可以在客户端看到该地图的信息。 下面我说一下我的疑惑,希望斑竹能早点回复。 1、我不太清楚mapinfo用户是什么时候怎么建立的。 2、我们的项目,前期是上一届学生做的,vc做的CS结构的,所以在数据库里他们使用了另一个用户GIS。在这个GIS用户下,他们用easyloader上传了各个地图文件,也自己定义了几个图层。但是在这个GIS用户下,我找不到mapinfo_mapcatalog这个表。在mapinfo用户下的这个表里却包含了一些通过easyloader上传到GIS用户下的信息,属主名也都是GIS。 3、我在GIS用户下利用sql语句建立mapinfo_mapcatalog表。同时建立包含(名称列name,地图定义列spaticalvalue)的表ceshi ,然后按照最上面我在mapinfo用户下成功的保存地图定义的过程,将地图定义保存到gis用户下的ceshi里。但是我在编码测试时候就无法得到地图信息了。 斑竹,能帮我看看到底是什么问题吗? 很是迷惑啊。 我用easyloader能把地图信息上传到GIS用户下,但是我能把这些信息写到GIS用户下我自己建的mapinfo_mapcatalog中吗?写进去后能起作用吗? 我的问题到底出在哪里呢? 求斑竹了~~~~~~~~~~~~~~~~~~~
liuzheli:
我在GIS用户下建立了mapinfo_mapcatalog表并且以develop guide里给出的CREATE TABLE MAPDEFINITIONS (NAME VARCHAR(40),MAPDEF CLOB)建立该MAPDEFINITIONS 表。 在利用map definition manager的时候成功的把GIS用户下的地图显示出来。 可是我自己编码的时候还是无法显示出来, 在地图定义管理器是利用localrenderer来进行渲染的。但是我把那些spatical里的图层放到数据库的表单里后,在中等客户端在服务器端利用MapXtremeImageRenderer调用mapxtreme的这个servlet远程渲染 可以吗? 难道说,要把地图放到spatical中,最终从数据库获取的地图信息都必须在本地渲染吗? 还是说我应该在自己的servlet里进行本地渲染后再返回客户端? 请斑竹讲解
liuzheli :
因为GIS用户下,mapinfo_mapcatalog表是我手动添加的。而不存在mapinfo用户下相同表里包含的相关信息,难道说,是因为这个原因吗?如果因为这个原因,为什么我的地图定义管理器却可以显示出来呢? 呵呵,斑竹,老多疑惑了,求斑竹解答。 等我spatical这块整明白了,我整理一下发个帖子出来回报斑竹:)
liuzheli:
我在jsp文件里,利用如下代码访问spatical里的地图表时 OraSoDataProviderHelper oraDPHelper=new OraSoDataProviderHelper("10.80.168.231",1521, "new","gis", "atm419",DriverType.thin,"oracle.jdbc.driver.OracleDriver"); String[] idColumn = {"mi_prinx"}; OraSoTableDescHelper oraTDHelper = new OraSoTableDescHelper("BJGREEN", false, idColumn,"geoloc", null,RenditionType.none, null,RenditionType.none,CoordSys.longLatWGS84, 2, "GIS"); MapXtremeDataProviderRef mxtDPRef1 = new MapXtremeDataProviderRef(oraDPHelper, mapxtremeServletUrl); myMap.getLayers().add(mxtDPRef1, oraTDHelper, "BJGREEN"); 可以取得图层的信息。但是无法看到地图。 请问,是不是真的得需要用本地渲染啊? 呵呵,斑竹啊,我一下提了这么多问题。 请斑竹别见笑
wtusmchen :
请老刘帮着解答一下:),我对空间数据库这一块也不熟
James.Liu :
有没有报什么错误?
在MDF管理器中能不能成功添加空间数据库图层?
liuzheli :
在mdf管理器里能添加空间数据库图层。并且能保存到数据库自己建立的mapdefinition表里。
但是在代码里却访问不到。
有可能是渲染的时候出现了问题。我现在不清楚存储在空间数据库中的数据是不是必须本地渲染呢?
我目前采用的是MapXtremeImageRenderer调用远程mapxtreme的servlet渲染的。
liuzheli :
如下是我在jsp页用做调试的代码: //加载空间地图定义 MapJ myMap=new MapJ(); String mapxtremeServletUrl=" http://10.80.168.233:7000/mapxtreme45/servlet/mapxtreme"; myMap.setDeviceBounds(new DoubleRect(0,0,800,600)); myMap.setZoom(100); OraSoMapDefContainer mdc = new OraSoMapDefContainer("oracle.jdbc.driver.OracleDriver", "jdbc:oracle:thin:@10.80.168.231:1521:new","MAPINFO", "MAPINFO", "MAPDEFINITIONS", "NAME", "MAPDEF"); myMap.loadMapDefinition(mdc, "JUMINDI"); //渲染地图 MapXtremeImageRenderer renderer=new MapXtremeImageRenderer(mapxtremeServletUrl); renderer.render(ImageRequestComposer.create(myMap, 256, Color.white, "image/gif"));(resin服务器编译的时候在该句话提示出错!!!!!!) renderer.toFile("D:/resin_mapx/img/comp.gif"); 服务器报错信息如下: java.lang.NoClassDefFoundError: com/mapinfo/dp/jdbc/oraso/OraSoDataProvider at com.mapinfo.xmlprot.mxtj.layerxmlhandlers.OraSoLayerXMLHandler.createDataProvider(Unknown Source) at com.mapinfo.xmlprot.mxtj.ai.a(Unknown Source) at com.mapinfo.xmlprot.mxtj.ai.create(Unknown Source) at com.mapinfo.dp.util.LocalDataProviderRef.locateDataProvider(Unknown Source) at com.mapinfo.mapj.Layer.b(Unknown Source) at com.mapinfo.mapj.Layer.getTableInfo(Unknown Source) at com.mapinfo.mapj.Layer.getThemeList(Unknown Source) at com.mapinfo.xmlprot.mxtj.j.createFeatureThemeList(Unknown Source) at com.mapinfo.xmlprot.mxtj.j.createFeatureGeometry(Unknown Source) at com.mapinfo.xmlprot.mxtj.j.createImageRequestLayer(Unknown Source) at com.mapinfo.xmlprot.mxtj.ImageRequestComposer.b(Unknown Source) at com.mapinfo.xmlprot.mxtj.ImageRequestComposer.a(Unknown Source) at com.mapinfo.xmlprot.mxtj.ap.build(Unknown Source) at com.mapinfo.mapxtreme.client.MapXtremeImageRenderer.render(Unknown Source) at _mapj__jsp._jspService(/mapj.jsp:95) at com.caucho.jsp.JavaPage.service(JavaPage.java:75) at com.caucho.jsp.Page.subservice(Page.java:485) at com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java:182) at com.caucho.server.http.Invocation.service(Invocation.java:312) at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:135) at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:221) at com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:163) at com.caucho.server.TcpConnection.run(TcpConnection.java:137) at java.lang.Thread.run(Thread.java:534) 请斑竹帮我解答。 我自己一会编码用localrender测试一下
liuzheli :
如果我直接连接空间数据库的表的时候,能得到mapj里的图层以及某个图层的具体信息。但是地图渲染不出来。 OraSoDataProviderHelper oraDPHelper=new OraSoDataProviderHelper("10.80.168.231",1521, "new","GIS", "ATM419",DriverType.thin,"oracle.jdbc.driver.OracleDriver"); String[] idColumn = {"mi_prinx"}; OraSoTableDescHelper oraTDHelper = new OraSoTableDescHelper("BJGREEN", false, idColumn,"geoloc", null,RenditionType.none, null,RenditionType.none,CoordSys.longLatWGS84, 2, "GIS"); MapXtremeDataProviderRef mxtDPRef1 = new MapXtremeDataProviderRef(oraDPHelper, mapxtremeServletUrl); myMap.getLayers().add(mxtDPRef1, oraTDHelper, "JUMINDI"); 我再看看吧,哎~~郁闷
wtusmchen :
java.lang.NoClassDefFoundError: com/mapinfo/dp/jdbc/oraso/OraSoDataProvider 缺了mxjoradp.jar,到C:\Program Files\MapInfo\MapXtreme-4.7.0\lib\common下拷贝一个
liuzheli :
哈,真是那个问题,现在解决了 我在jsp页面里能显示出图片了 谢谢斑竹,等我整理一下,发个帖子出来 |