编译GDAL支持ArcObjects
编译GDAL支持ArcObjects。
首先修改nmake.opt文件中对应的ArcObjects,修改后的如下所示:
#uncomment to use ArcObjects
ARCOBJECTS_ENABLED = YES
ARCOBJECTS_PLUGIN = YES
ARCOBJECTS_SDK = C:\Program Files (x86)\ArcGIS\Desktop10.2\com
ARCOBJECTS_INC = $(ARCOBJECTS_SDK)\..\include
然后打开VS的命令行,cd到ArcObjects的目录,如F:\Work\GDAL\gdal-1.11.2\ogr\ogrsf_frmts\arcobjects。然后输入nmake /f makefive.vc plugin后回车输出如下图所示。
可以看到有很多错误,提示找不到olb文件,打开ogr_ao.h文件发现在46~48行,#import的时候指定的olb路径为写死的,将这几个路径改为自己的电脑中ArcGIS的安装目录即可,如下所示:
// ArcGIS COM Includes
#import "C:\Program Files (x86)\ArcGIS\com\esriSystem.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids, exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE"), rename("min", "esrimin"), rename("max", "esrimax")
#import "C:\Program Files (x86)\ArcGIS\com\esriGeometry.olb" raw_interfaces_only, raw_native_types, named_guids, exclude("ISegment")
#import "C:\Program Files (x86)\ArcGIS\com\esriGeoDatabase.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "C:\Program Files (x86)\ArcGIS\com\esriDataSourcesGDB.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
修改后的为:
// ArcGIS COM Includes
#import "C:\Program Files (x86)\ArcGIS\Desktop10.2\com\esriSystem.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids, exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE"), rename("min", "esrimin"), rename("max", "esrimax")
#import "C:\Program Files (x86)\ArcGIS\Desktop10.2\com\esriGeometry.olb" raw_interfaces_only, raw_native_types, named_guids, exclude("ISegment")
#import "C:\Program Files (x86)\ArcGIS\Desktop10.2\com\esriGeoDatabase.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "C:\Program Files (x86)\ArcGIS\Desktop10.2\com\esriDataSourcesGDB.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
保存后,再次运行nmake编译命令即可。输出如下图所示:
从上图中可以看出,又有一些错误信息,根据错误信息的提示,打开文件aoutils.cpp并定位到378~380和394~396行处,原始代码如下图所示:
通过查看olb文件导入的tlh文件可以发现,此处是用来判断ArcGIS产品的类型,在文件esrisystem.tlh中发现产品类型定义如下:
enum __declspec(uuid("06870014-a87e-48f0-81e4-41eb502e7470"))
esriLicenseProductCode
{
esriLicenseProductCodeEngine = 10,
esriLicenseProductCodeEngineGeoDB = 20,
esriLicenseProductCodeArcServer = 30,
esriLicenseProductCodeBasic = 40,
esriLicenseProductCodeStandard = 50,
esriLicenseProductCodeAdvanced = 60
};
从上面生成的代码可以发现,确实没有代码里面的esriLicenseProductCodeArcView、esriLicenseProductCodeArcEditor和esriLicenseProductCodeArcInfo这三个产品,原因应该是GDAL中ArcObjects的驱动写的时候使用ArcGIS早期的版本,而目前使用的10.0以后的版本发生了变化导致,而GDAL库中的代码没有做相应的调整导致。所以将上面三个分别改为esriLicenseProductCodeBasic、esriLicenseProductCodeStandard和esriLicenseProductCodeAdvanced 。保存后再次进行编译即可编译成功,提示信息如下图所示。
同时在源码文件夹下会生成一个ogr_ao.dll的插件文件,将该dll放入gdal的插件目录即可使用ArcObjects驱动。
编译GDAL支持ArcObjects的更多相关文章
- 编译GDAL支持OpenCL使用GPU加速
前言 GDAL库中提供的gdalwarp支持各种高性能的图像重采样算法,图像重采样算法广泛应用于图像校正,重投影,裁切,镶嵌等算法中,而且对于这些算法来说,计算坐标变换的运算量是相当少的,绝大部分运算 ...
- 编译GDAL支持MySQL
GDAL支持MySQL需要MySQL的库才可以,编译很简单,修改nmake.opt文件中对应的MySQL的库的路径和lib即可. nmake.opt文件中397行左右,如下: # MySQL Libr ...
- Linux下编译GDAL
一.准备工作 从官网下载GDAL.PROJ.4和GEOS,将其存放在/home/liml/Work/3rdPart目录并解压,如下图所示.下载地址请自行Google.注:使用的系统是CentOS6.4 ...
- VS2015编译GDAL库出现宏重复定义 snprintf: 宏重定义
E:\OpenSourceGraph\gdal-1.10.0\gdal\port cpl_config.h 20行 #define HAVE_VPRINTF 1#define HAVE_ ...
- Win7(32/64)VS2010配置编译GDAL环境(图文教程+亲测可用!)
最近的一个VS2010的项目中用到了GDAL,关于GDAL这个库的说明与赞美,这里就不赘述了,下面是在VS2010中配置GDAL的详细过程. 系统说明 Win7(32位/64位),VS2010,GDA ...
- ios 编译openssl支持arm64(转)
最近在编译支付宝 快捷支付(无线) ios 端的时候发现demo不支持arm64.在网上找了下,看到客服说是openssl的库文件不支持arm64,于是自己编译了支持arm64的库文件,发现还是不行, ...
- Ubuntu上用premake编译GDAL
GDAL的编译脚本呈现出不同平台不同解决方案的百花齐放现状.我是从windows平台开始编译GDAL的,用的自然是nmake.那就是一种每个目录下都需要写makefile文件的构建方法,写的人麻烦,我 ...
- 编译Nginx支持Tcp_warppers
Tcp wrappers : Transmission Control Protocol (TCP) Wrappers 为由 inetd 生成的服务提供了增强的安全性.TCP Wrappers 是一种 ...
- 编译GDAL使用最新的HDF库配置文件
HDF库最新版本中的动态库以及目录结构都发生了变化,导致按照之前的博客进行编译GDAL时,会出问题.使用HDF4版本为HDF4-4.2.10,HDF5的版本为HDF5-1.8.12.两个库的目录结构如 ...
随机推荐
- [bzoj4866] [Ynoi2017]由乃的商场之旅
来自FallDream的博客,未经允许,请勿转载,谢谢, 由乃有一天去参加一个商场举办的游戏.商场派了一些球王排成一行.每个人面前有几堆球.说来也巧,由乃和你一样,觉得这游戏很无聊,于是决定换一个商场 ...
- python中模块,包,库的概念
模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...
- IE6浏览器有哪些常见的bug,缺陷或者与标准不一致的地方,如何解决
IE6不支持min-height,解决办法使用css hack: .target { min-height: 100px; height: auto !important; height: 100px ...
- 前端工程师:电信专业转前端是如何拿到阿里、腾讯offer的?
1.个人情况 ● 211本科 985硕士 电信专业 女生 ● 16年3月开始学习前端 ● 16年7月开始实习,共五家实习经历(不是特别厉害的厂) ● 秋招拿到两个offer(阿里.腾讯).没错只有这两 ...
- 如何为分布式系统优雅的更换RPC
为啥需要更换RPC? 很多小伙伴都遇到过需要为分布式系统调用更换RPC的问题,为什么会遇到这种事呢?其实,在系统搭建初期,需求简单,架构简单,最重要的是请求量也少,所以很多系统都采用快速原型开发模式, ...
- 算法导轮之B树的学习
最近学习了算法导轮里B树相关的知识,在此写一篇博客作为总结. 1.引言 B树是为磁盘或其他直接存取的辅助存储设备而设计的一种平衡搜索树.B树类似于红黑树,但它与红黑树最大不同之处在于B树的节点可以拥有 ...
- 使用Fiddler改变线上js文件的引用路径
一般的项目开发都是先在本地环境开发,测试环境中完成测试,最后再提交到线上环境. 但是由于版本构建工具有时出现bug或者一些缓存的因素导致测试环境代码可能和线上不一样,这是多么蓝瘦的事情.此处说的是在原 ...
- Sublime Text3时间戳查看转换插件的开发
平常配置表中,经常需要用到时间配置,比如活动开始结束.从可读性上,我们喜欢2017-04-27 17:00:00,从程序角度,我们喜欢用1493283600.前者是包含时区概念的,而后者市区无关,所以 ...
- Java面试06|项目相关介绍
1.明确你的项目到底是做什么的,有哪些功能 广告投放机:项目主要是为移动端有针对性的进行广告展示. 媒体管理平台SSP:为媒体端实现多种变现途径 (1)广告投放机中关于广告检索与排序的功能 1.广告检 ...
- FJUT寒假作业第三周数蚂蚁(记录第一道并查集)
http://210.34.193.66:8080/vj/Contest.jsp?cid=162#P7 思路:用并查集合并集合,最后遍历,找到集合的根的个数. 并查集是森林,森林中的每一颗树是一个集合 ...