首页 / 浏览问题 / 组件GIS / 问题详情
地图存到数据库
66EXP 2017年09月12日
把三个地图存到orcl数据库中,想使用它们是怎么把他们调出来?

1个回答

您好,地图是保存到工作空间的,如果工作空间存到了Oracle数据库,那么只需要打开该工作空间,就可以使用工作空间中存的地图了,打开Oracle工作空间需要填的参数有Type(类型为Oracle),Server(服务器名),User(用户名),Password(密码),Name(工作空间名称)。
5,985EXP 2017年09月12日
1.例如:我用idesktop连接我新建的orcl数据库,存了两个地图数据,这里面的工作空间是啥?

2.为啥我存地图数据的时候,只能存图层数据,下面的地图存不了?
你连接的是一个Oracle数据源,数据是存在数据源里面的,但是做的地图是保存在工作空间中的,所以你需要把工作空间也保存到数据库中,工作空间下的地图才会保存下来。操作:选中“未命名的工作空间”右键----保存工作空间,选择Oracle类型。
嗯嗯,太感谢了,有你们在。超图一定会越推越广。支持你们!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SuperMap.Data;
using SuperMap.Mapping;
using SuperMap.UI;

namespace dituqiehuan
{
    public partial class Form1 : Form
    {

        
        public Form1()
        {
            InitializeComponent();
            
        }
        private void Form1_Load(object sender, EventArgs e)
        {
           
        }
        public void workspaceConnectionInfoExample()
        {
            // 构造工作空间对象和工作空间连接信息对象
            Workspace workspace = new Workspace();
            WorkspaceConnectionInfo workspaceConnectionInfo = new             WorkspaceConnectionInfo();
            // ORACLE 工作空间信息设置
            workspaceConnectionInfo.Type = WorkspaceType.Oracle;
            workspaceConnectionInfo.Server = "LD-PC";
            workspaceConnectionInfo.Database = "orcl";
            workspaceConnectionInfo.Name = "ditulunhuan";
            workspaceConnectionInfo.User = "xia";
            workspaceConnectionInfo.Password = "htcwoailuo456";

            // 以指定的工作空间连接信息打开工作空间
            Boolean isOpen = workspace.Open(workspaceConnectionInfo);
            // 判断工作空间是否打开成功
            if (isOpen)
            {
                Console.WriteLine("工作空间打开成功");
            }
            else
            {
                Console.WriteLine("工作空间打开失败");
                return;
            }
            // 释放工作空间以及其连接信息
            workspaceConnectionInfo.Dispose();
            workspace.Dispose();
        }

        private void toolStripButton2_Click(object sender, EventArgs e)
        {

            //建立MapControl与Workspace的连接
            mapControl1.Map.Workspace = workspace;
            //通过名称打开工作空间中的地图
            mapControl1.Map.Open("Jingjin");
            //刷新地图窗口
            mapControl1.Map.Refresh();

        }
       
    }
}
我往工作空间加了个超图自带的Jingjin地图,并把把工作空间存到orcl中。但我每次运行的时候为什么会发生“应用程序发生未经处理的异常.....引用类型为"System ArgumentException"的异常 参数名:mapName”这个错误,您能看看我的代码写的对吗?

1.打开Oracle工作空间不需要填数据库名

2.workspace.Dispose();是释放掉了工作空间,之后不可再使用该工作空间,释放不合理

打开工作空间示范代码如下:

    Workspace workspace = new Workspace();
    WorkspaceConnectionInfo workspaceConnectionInfo = new WorkspaceConnectionInfo();
   workspaceConnectionInfo.Type=WorkspaceType.Oracle;
        workspaceConnectionInfo.Server="supermap";//本地数据库填实例名即可,远程访问填  IP:口号/实例名
        workspaceConnectionInfo.Name="ugo";
        workspaceConnectionInfo.User="ugo";
        workspaceConnectionInfo.Password="map";

    

Boolean isOpen =  workspace.Open(workspaceConnectionInfo);
每次运行都会报出“创建数据源失败”

 private void Form1_Load(object sender, EventArgs e)
        {
            // 构造工作空间对象和工作空间连接信息对象
            Workspace workspace = new Workspace();
            WorkspaceConnectionInfo workspaceConnectionInfo = new WorkspaceConnectionInfo();
            // ORACLE 工作空间信息设置
            workspaceConnectionInfo.Type = WorkspaceType.Oracle;
            workspaceConnectionInfo.Server = "ORCL";
            workspaceConnectionInfo.Name = "ditulunhuan";
            workspaceConnectionInfo.User = "xia";
            workspaceConnectionInfo.Password = "htcwoailuo456";

            // 以指定的工作空间连接信息打开工作空间
            Boolean isOpen = workspace.Open(workspaceConnectionInfo);
            // 判断工作空间是否打开成功
            if (isOpen)
            {
                Console.WriteLine("工作空间打开成功");
            }
            else
            {
                Console.WriteLine("工作空间打开失败");
                return;
            }
        }
iDesktop能成功打开吗
可以成功打开
iobjects组件你用的多少位的?数据库是多少位的
都是64位的
1.确认参数无误,与iDesktop打开工作空间时所填参数一致。

2.调用iDesktop安装路径下bin包中的相关dll文件,程序工作目录设置成该bin包路径
嗯嗯 工作空间已经打开了。我把咱们超图自带的京津地图数据保存到了数据库中。我想把它拿出来,显示在屏幕上。这是我做了个按钮 您看这样写对吗?

 private void toolStripButton2_Click(object sender, EventArgs e)
        {

            //建立MapControl与Workspace的连接
            mapControl1.Map.Workspace = workspace;
            //通过名称打开工作空间中的地图
            mapControl1.Map.Open("Jingjin");
            //刷新地图窗口
            mapControl1.Map.Refresh();
        }
是这样的,有什么问题吗
点击这个按钮,并不出图。
地图名有误,你可以先在iDesktop查看该工作空间有哪些名称的地图。
Jingjin是个数据集,里面还包含一个名为JingjinImage影像金字塔。我该调用哪一个?

刚才两个都试了一遍,都不能打开。
数据集和地图是两个概念,您使用的方法是打开地图的方法,先简单讲一下地图,图层,数据集的区别:将一个数据集添加到了地图中就成为了地图的一个图层,而地图是由一个或者多个图层来构成的。

如果打开地图,使用mapcontrol.map.open方法,地图名可在工作空间管理器---地图节点下面查看

如果打开数据集到地图中,使用mapcontrol.map.layers.add()重载的添加数据集的方法。
运行时给出了两个警告:

1.变量“mapControl1”未声明或从未赋值。    

2. 未能找到类型“SuperMap.Data.Workspace”。请确保已引用包含此类型的程序集。如果此类型为开发项目的一部分,请确保已使用针对当前平台或任意 CPU 的设置成功生成该项目。

我的工作空间能照常打开。地图出不来,是不是这两个警告造成的?
1.mapControl1是不是没有实例化?

2.引用SuperMap.Data即可
1.怎么进行mapControl1的实例化?

2.引用已经添加,而且添加的是iobject自带的bin x64位里的dell文件。警告依旧有

如果忽略警告并运行 form1画面中超图控件就没了,重新插也插不进去
控件你是直接拖上去的还是自己在后台代码添加上去的?
直接拖上去的
工具箱你注册的是32位的组件是吧,程序引用的时候你又使用的是64位的组件
...