转一篇文章,以便在后续文章中讲解——开源gis项目Mitab在C#中的使用方法
2011-04-03 13:00
645 查看
Yush
我一直是用MapX写的写MapInfo公司Tab格式的文件,但是由于涉及到大量的图元绘制,MapX的绘制速度是受到限制的,其绘制的速度并不快,于是探索是不是有比他更好的组件。前段时间曾经用过ShapeLib来绘制shp文件,其绘制的速度还是相当可以的,有兴趣的话可以搜搜,其提供的开源包中有实例程序,怎么来用。
而我今天要介绍的这个Mitab开源包中,并没有提供可以直接运行能看到效果的实例Demo,于是我开始了解如果在dot net程序中使用他。
Mitab开源项目是采用C++编写的库,其编译了mitab.dll文件,我们用他的功能也主要从这个dll中调用功能。但不是单纯的添加引用或者添加一个这个dll为控件能解决问题的,要用好这个dll,不得不继续分析他的开源包,在MiApi.cs文件中,有很多的[DllImport("mitab.dll")]语句,于是我明白了如何应用,下面来介绍他的应用步骤。
第一步:新建一个C#桌面应用程序;
第二步:添加开源库中的MiApi.cs和MiWrapper.cs两个类到程序中。
第三步:拷贝mitab.dll到程序的.exe的目录中,因为[DllImport("mitab.dll")]就是要查找系统运行的目录中是否存在这个dll文件,所以一定要拷贝。
第四步:写生成Tab文件的函数,调用MiApi.cs中函数。具体如何应用这些函数,请参考开源包中的mitab_vb_test.vb这个文件。
第五步:运行程序,生成Tab,搞定。
附我写的一个demo实例代码。
我一直是用MapX写的写MapInfo公司Tab格式的文件,但是由于涉及到大量的图元绘制,MapX的绘制速度是受到限制的,其绘制的速度并不快,于是探索是不是有比他更好的组件。前段时间曾经用过ShapeLib来绘制shp文件,其绘制的速度还是相当可以的,有兴趣的话可以搜搜,其提供的开源包中有实例程序,怎么来用。
而我今天要介绍的这个Mitab开源包中,并没有提供可以直接运行能看到效果的实例Demo,于是我开始了解如果在dot net程序中使用他。
Mitab开源项目是采用C++编写的库,其编译了mitab.dll文件,我们用他的功能也主要从这个dll中调用功能。但不是单纯的添加引用或者添加一个这个dll为控件能解决问题的,要用好这个dll,不得不继续分析他的开源包,在MiApi.cs文件中,有很多的[DllImport("mitab.dll")]语句,于是我明白了如何应用,下面来介绍他的应用步骤。
第一步:新建一个C#桌面应用程序;
第二步:添加开源库中的MiApi.cs和MiWrapper.cs两个类到程序中。
第三步:拷贝mitab.dll到程序的.exe的目录中,因为[DllImport("mitab.dll")]就是要查找系统运行的目录中是否存在这个dll文件,所以一定要拷贝。
第四步:写生成Tab文件的函数,调用MiApi.cs中函数。具体如何应用这些函数,请参考开源包中的mitab_vb_test.vb这个文件。
第五步:运行程序,生成Tab,搞定。
附我写的一个demo实例代码。
public void testWritefile() { WriteFile("D://11//testtab.tab", "tab"); } private void WriteFile(string pszDest, string pszMifOrTab) { long dataset; long feature; double[] x = new double[100]; double[] y = new double[100]; long field_index; string sTmp; long i1; long i2; dataset = (long)EBop.MapObjects.MapInfo.MiApi.mitab_c_create(pszDest, pszMifOrTab, "CoordSys Earth Projection 1, 0", 90, 0, 180, -180); if (dataset == 0) { sTmp = ""; sTmp = EBop.MapObjects.MapInfo.MiApi.mitab_c_getlasterrormsg(); MessageBox.Show("Failed to create " + pszMifOrTab + " file: " + sTmp); return; } /* -------------------------------------------------------------------- */ /* Add a text, float and integer field. */ /* -------------------------------------------------------------------- */ field_index = (long)EBop.MapObjects.MapInfo.MiApi.mitab_c_add_field((System.IntPtr)dataset, "TestInt", 2, 8, 0, 0, 0); field_index = (long)EBop.MapObjects.MapInfo.MiApi.mitab_c_add_field((System.IntPtr)dataset, "TestFloat", 5, 12, 2, 0, 0); field_index = (long)EBop.MapObjects.MapInfo.MiApi.mitab_c_add_field((System.IntPtr)dataset, "TestString", 1, 10, 0, 0, 0); /* -------------------------------------------------------------------- */ /* Write a point. */ /* -------------------------------------------------------------------- */ feature = (long)EBop.MapObjects.MapInfo.MiApi.mitab_c_create_feature((System.IntPtr)dataset, 1); x[0] = 98; y[0] = 50; EBop.MapObjects.MapInfo.MiApi.mitab_c_set_points((System.IntPtr)feature, 0, 1, ref x[0], ref y[0]); i1 = 256; i2 = 255; i1 = i1 * i2; EBop.MapObjects.MapInfo.MiApi.mitab_c_set_symbol((System.IntPtr)feature, 41, 15, (int)i1); EBop.MapObjects.MapInfo.MiApi.mitab_c_set_field((System.IntPtr)feature, 0, "100"); EBop.MapObjects.MapInfo.MiApi.mitab_c_set_field((System.IntPtr)feature, 1, "100.5"); EBop.MapObjects.MapInfo.MiApi.mitab_c_set_field((System.IntPtr)feature, 2, "12345678901234567890"); EBop.MapObjects.MapInfo.MiApi.mitab_c_write_feature((System.IntPtr)dataset, (System.IntPtr)feature); EBop.MapObjects.MapInfo.MiApi.mitab_c_destroy_feature((System.IntPtr)feature); /* -------------------------------------------------------------------- */ /* Write a MultiPoint. */ /* -------------------------------------------------------------------- */ feature = (long)EBop.MapObjects.MapInfo.MiApi.mitab_c_create_feature((System.IntPtr)dataset, 10); x[0] = 90; y[0] = 51; x[1] = 90.5; y[1] = 51.5; x[2] = 91; y[2] = 52; EBop.MapObjects.MapInfo.MiApi.mitab_c_set_points((System.IntPtr)feature, 0, 3, ref x[0], ref y[0]); i1 = 256; i2 = 255; i1 = i1 * i2; EBop.MapObjects.MapInfo.MiApi.mitab_c_set_symbol((System.IntPtr)feature, 41, 15, (int)i1); EBop.MapObjects.MapInfo.MiApi.mitab_c_set_field((System.IntPtr)feature, 0, "100"); EBop.MapObjects.MapInfo.MiApi.mitab_c_set_field((System.IntPtr)feature, 1, "100.5"); EBop.MapObjects.MapInfo.MiApi.mitab_c_set_field((System.IntPtr)feature, 2, "12345678901234567890"); EBop.MapObjects.MapInfo.MiApi.mitab_c_write_feature((System.IntPtr)dataset, (System.IntPtr)feature); EBop.MapObjects.MapInfo.MiApi.mitab_c_destroy_feature((System.IntPtr)feature); /* -------------------------------------------------------------------- */ /* Write a line. */ /* -------------------------------------------------------------------- */ feature = (long)EBop.MapObjects.MapInfo.MiApi.mitab_c_create_feature((System.IntPtr)dataset, 5); x[0] = 100; y[0] = 49; x[1] = 101; y[1] = 48; EBop.MapObjects.MapInfo.MiApi.mitab_c_set_points((System.IntPtr)feature, 0, 2, ref x[0], ref y[0]); EBop.MapObjects.MapInfo.MiApi.mitab_c_set_pen((System.IntPtr)feature, 1, 2, 255); EBop.MapObjects.MapInfo.MiApi.mitab_c_write_feature((System.IntPtr)dataset, (System.IntPtr)feature); EBop.MapObjects.MapInfo.MiApi.mitab_c_destroy_feature((System.IntPtr)feature); /* -------------------------------------------------------------------- */ /* Write text. */ /* -------------------------------------------------------------------- */ feature = (long)EBop.MapObjects.MapInfo.MiApi.mitab_c_create_feature((System.IntPtr)dataset, 4); x[0] = 101; y[0] = 51; EBop.MapObjects.MapInfo.MiApi.mitab_c_set_points((System.IntPtr)feature, 0, 1, ref x[0], ref y[0]); EBop.MapObjects.MapInfo.MiApi.mitab_c_set_text((System.IntPtr)feature, "My text"); EBop.MapObjects.MapInfo.MiApi.mitab_c_set_font((System.IntPtr)feature, "Arial"); EBop.MapObjects.MapInfo.MiApi.mitab_c_set_text_display((System.IntPtr)feature, 45, 1, 7, 255 * 65536, 0, -1, -1, -1); EBop.MapObjects.MapInfo.MiApi.mitab_c_write_feature((System.IntPtr)dataset, (System.IntPtr)feature); EBop.MapObjects.MapInfo.MiApi.mitab_c_destroy_feature((System.IntPtr)feature); /* -------------------------------------------------------------------- */ /* Write region (polygon). */ /* -------------------------------------------------------------------- */ feature = (long)EBop.MapObjects.MapInfo.MiApi.mitab_c_create_feature((System.IntPtr)dataset, 7); x[0] = 101; y[0] = 51; x[1] = 100; y[1] = 51; x[2] = 100; y[2] = 50; x[3] = 101; y[3] = 50; x[4] = 101; y[4] = 51; EBop.MapObjects.MapInfo.MiApi.mitab_c_set_points((System.IntPtr)feature, 0, 5, ref x[0], ref y[0]); x[0] = 100.5; y[0] = 50.5; x[1] = 100.5; y[1] = 50.7; x[2] = 100.7; y[2] = 50.7; x[3] = 100.7; y[3] = 50.5; x[4] = 100.5; y[4] = 50.5; EBop.MapObjects.MapInfo.MiApi.mitab_c_set_points((System.IntPtr)feature, 1, 5, ref x[0], ref y[0]); EBop.MapObjects.MapInfo.MiApi.mitab_c_set_brush((System.IntPtr)feature, 255, 0, 2, 0); EBop.MapObjects.MapInfo.MiApi.mitab_c_set_pen((System.IntPtr)feature, 1, 2, 65535); EBop.MapObjects.MapInfo.MiApi.mitab_c_write_feature((System.IntPtr)dataset, (System.IntPtr)feature); EBop.MapObjects.MapInfo.MiApi.mitab_c_destroy_feature((System.IntPtr)feature); /* -------------------------------------------------------------------- */ /* Cleanup */ /* -------------------------------------------------------------------- */ EBop.MapObjects.MapInfo.MiApi.mitab_c_close((System.IntPtr)dataset); if (EBop.MapObjects.MapInfo.MiApi.mitab_c_getlasterrorno() != 0) { sTmp = EBop.MapObjects.MapInfo.MiApi.mitab_c_getlasterrormsg(); //i1 = mitab_c_getlasterrormsg_vb(sTmp, 255); MessageBox.Show("Last Error: " + sTmp); } }
相关文章推荐
- 转一篇文章,以便在后续文章中讲解——开源gis项目Mitab在C#中的使用方法
- 开源gis项目Mitab在C#中的使用方法(转载)
- 开源gis项目Mitab在C#中的使用方法(原创)
- 翻译了一篇在C#中使用ADOBE SVG VIEWER的文章
- [C#技术] .NET平台开源JSON库LitJSON的使用方法
- 使用cvs或svn从sourceforge上获取开源项目的方法
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
- android-async-http开源项目介绍及使用方法
- C#强化系列文章四:匿名方法的使用
- [C#技术] .NET平台开源JSON库LitJSON的使用方法
- Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向 推荐
- 开源项目PullToRefresh上拉加载、下拉刷新的使用方法整理
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
- 下载使用CocoaPods的开源项目时,编译出现错误解决方法
- Android最好用的侧滑栏开源项目SlidingMenu,集成方法与使用
- Android Studio该如何导入别人的开源库到自己的项目中并使用库中的控件,网上找过方法但是并不能搞定,希望实际问题 实际解决,拯救我这个傻瓜
- [C#技术] .NET平台开源JSON库LitJSON的使用方法
- 微信开源项目讲解使用公开课
- NopCommerce开源项目中很基础但是很实用的C# Helper方法
- 国内开源项目“C语言正则表达式”——特性、使用方法、正则模式等介绍。