数据库
PostGIS
PostGIS作为PostgreSQL对象关系数据库系统的扩展模块,与Oracle中Spatial相似,使用SFS规范,遵循OGC 的Simple Feature for SQL。
支持所有的空间数据类型,这些类型包括:点(POINT)、线(LINESTRING)、 多边形(POLYGON)、多点(MULTIPOINT)、 多线(MULTILINESTRING)、 多多边形(MULTIPOLYGON)和集合对象集(GEOMETRYCOLLECTION)等。PostGIS支持所有的对象表达方法,比如WKT和WKB。PostGIS支持所有的数据存取和构造方法,如GeomFromText()、AsBinary(),以及GeometryN()等。PostGIS提供简单的空间分析函数(如Area和Length)同时也提供其他一些具有复杂分析功能的函数,比如Distance。PostGIS提供了对于元数据的支持,如GEOMETRYCOLUMNS和SPATIAL REF SYS,同时,PostGIS也提供了相应的支持函数,如AddGeometryColumn和DropGeometryColumn。PostGIS提供了一系列的二元谓词(如Contains、Within、Overlaps和Touches)用于检测空间对象之间的空间关系,同时返回布尔值来表征对象之间符合这个关系。PostGIS提供了空间操作符(如Union和Difference)用于空间数据操作。比如,Union操作符融合多边形之间的边界。两个交迭的多边形通过Union运算就会形成一个新的多边形,这个新的多边形的边界为两个多边形中最大边界。
PostGIS也具有大型数据库的特性,如数据备份,数据库恢复,灾难恢复等。
MySql空间扩展
MySQL从4.1开始引入了空间功能,实现和使用方式基本和POSTGIS类似。但函数支持没有postGIS多,对于高精度函数需要在5.6版本才开始支持。
MongoDB
MongoDB(https://www.mongodb.com/)是一个开源面向文档的NoSQL 数据库,用C++编写。它提供一种强大、灵活、可扩展的数据存储形式。MongoDB功能丰富,内置MapReduce聚合的支持,支持地理空间索引。MongoDb具有弱一致性,保证用户的访问速度,文档结构的访问方式,能够更便捷地获取数据,内置GirdFS 支持大容量的储存,内置Sharding,第三方支持丰富,性能优越。MongoDB在存储空间数据比传统的关系数据库如MySQL 和PostgreSQL 更具优势。MongoDB 对空间数据是原生支持,不需要安装第三方空间数据库引擎即可构建空间索引进行进行快速的空间查询。MongoDB 支持平面( 2d) 和球面( 2dsphere indexes) 两种空间索引。面向大众型的GIS 应用会存储大量的POI 数据或者用户产生的位置数据,利用MongoDB 储存可以提高检索效率。MongoDB 支持MapReduce计算模型,处理海量LBS数据有较高的效率。MongoDB有多种基于的Node.JS的第三方库实现对MongoDB的操作,这样使得对数据的操作更加的便捷。
ElasticSearch
可以接受带有空间位置坐标的信息,包括geopoint和geoshape(线面),同时可以实现空间聚合,geohash等功能。
数据管理组件
GDAL
GDAL(http://www.gdal.org/)是一个基于C++的栅格格式的空间数据格式解释器。作为一个类库,对于那些用它所支持的数据类型的应用程序来说它代表一种抽象的数据模型。GDAL持大多数的栅格数据类型。
在开发上GDAL支持多种语言的接口如:Perl、Python、VB6、Java、C#。
OGR
OGR(http://www.gdal.org/ogr/)是C++的简单要素类库提供对各种矢量数据文件格式的读取(某些时候也支持写)功能。OGR是根据OpenGIS的简单要素数据模型和Simple features for COM(SFCOM)构建的。OGC也支持大多数的矢量数据类型支持数类型。
GeOxygene
GeOxygene(http://www.oxygene-project.sourceforge.net/)基于Java和开源技术同时提供一个实现OGC规范和ISO标准可扩展的对象数据模型(地理要素、几何对象、拓扑和元数据)。它支持Java开发接口。数据存储在关系数据中(RDBMS)保证用户快速和可靠的访问数据,但用户不用担心SQL描述语句,他们通过为应用程序建立UML和Java代码的模型。在对象和关系数据库之间使用开源软件进行映射。到现在可以使用OJB同时支持Oracle和PostGIS中的数据。
GML4J
GML4J(http://gml4j.sourceforge.net/)是一个作用于Geography Markup Language(GML)的Java API工具。当前GM4J的作用是一个GML数据的扫描器。通过它可以读取和解释那代表地理要素、几何对象、它们的几何、要素的属性、集合对象的属性、复杂属性、坐标系统和其他的GML结构的XML。现阶段GML4J只支持GML读取和访问,在以后将支持GML数据的修改。
分析组件
JTS
JTS Topology Suite(http://sourceforge.net/projects/jts-topo-suite/)是一套2维的空间谓词和函数的应用程序接口。它由Java语言写成,提供了全的、延续的和健壮的基本的2维空间算法的实现,并且效率非常高。
Net Topology Suite(http;//nts.sourceforge.net/)则是一个.Net的开源项目,该项目的主要目的是将JTS Topology Suite应用程序提供给.Net应用程序使用。
GSLIB
GSLIB(http://www.gslib.com/)是一个提供了空间统计的程序包,它是当前最强大和综合的一个统计包,并且具有灵活性和开放的接口。其缺点是缺少用户支持,用户界面不友好且缺少面向对象建模能力。
PROJ.4
PROJ.4(http://trac.osgeo.org/proj/)是一个开源的地图投影库,提供对地理信息数据投影以及动态转换的功能,WMS,WFS或WCS Services也需要它的支持。
GeoTools
GeoTools(http://www.geotools.org/)是也是遵循OGC规范的GIS工具箱。它拥有一个模块化的体系架构,这保证每个功能部分可以非常容易的加入和删除。 GeoTools目标是支持OGC所有的规范并且各类国际规范和标准。
GeoTools已经在一个统一的框架下开发了一系列的JAVA对象集合,其完全满足了OGC的服务端的各种服务并且提供了OGC兼容的单独应用程序。GeoTools项目由一系列的API接口以及这些接口的实现组成。开发一整套产品或应用程序并不是GeoTools的目的,但是其鼓励其他应用项目使用它以各类工作。
桌面平台
Grass GIS
GRASS(地理资源分析支持系统, http://grass.fbk.eu/)是一个栅格/矢量GIS、图像处理系统和图件成图系统。GRASS包括超过350个程序和工具,实现:1)显示器和纸质地或图象的打印显示;2)操作栅格、矢量或点数据;3)处理多光谱图像数据;4)创建、管理和存储空间数据。GRASS支持图形界面或文字界面。 GRASS可以与商用打印机、绘图仪、数字化仪或商用数据库交互。
GRASS基于GNUGPL协议下发行,有超过100万行的C源代码可以自下载得到。GRASS提供了一个复杂的GIS库,可用于开发自己的项目。
OSSIM
OSSIM(http://www.ossim.org/)是一个用于遥感、图片处理、地理信息系统、照相测量方面的高性能软件。OSSIM库主要使用C++完成,支持多种平台,现在包括Linux、dows、MacOS X和Solaris,并且可以移植到其他平台。由于OSSIM库用了模型一控制器一视图(MCv)的结构,所以算法及实现与GUI是分离的,使得OSSIM可以支持多种GUI接口。第一个GUI的实现使用了QT,其的GUI框架及接口也在开发计划中(如Cocoa/Windows等)。
SharpMap
SharpMap(http://www.codeplex.com/SharpMap)是一个基于.net 2.0使用c#开发的Map渲染类库,可以渲染各类GIS数据(目前支持ESRIShape和PostGIS格式),可应用于桌面和Web程序。目前稳定版本为0.9(2.0beta已发布),代码行数10000行左右,实现了下功能:
①支持的数据格式:PostGreSQL/PostGIS,ESRI Shapefile,支持WMS layers,支持ECW 和JPEG2000 栅格数据格式;
②Windows Forms 控件,可以移动和缩放;
③通过HttpHandler支持ASP.net程序;
④点、线、多边形、多点、多线和多多边形等几何类型和几何集合(GeometryCollections)等OpenGIS Simple Features Specification;
⑤可通过Data Providers(增加数据类型支持)、Layer Types(增加层类型)和Geometry Types等扩展;
⑥图形使用GDI+渲染,支持anti-aliased等;
⑦专题图。
SharpMap目前可以算是一个实现了最基本功能的GIS系统,但一些很重要的功能,例如投影,比例尺,空间分析,图形的属性信息,查询检索等等,通过同NTS等开源空间类库的结合可以在SharpMap中实现的空间变换、缓冲区等功能。
World Wind
World Wind(http://worldwind.arc.nasa.gov/)是个开放软件,允许用户修改WorldWind软件本身。软件用C#编写,调用微软SQLServer影像库TerrainServer进行全球地形三位显示,低分辨率的Blne marble数据包含的初始安装内,当用户放大到特定区域时,附加的高分辨率数据将会自动从NASA服务器上下载。它通过将遥感影像与RTM高程(航天飞机雷达地形数据库)叠加生成三位地形。在功能方面,软件具有长度测量功能(仅能测量两点间的直线距离)、坐标和高程查询、屏幕截图、添加标注及三位动态显示等功能。
MapWindow
MapWindow GIS(http://mapwindow4.codeplex.com/)桌面应用程序是一个免费开源基于标准的地理信息软件,使用它可以浏览和编辑多种GIS数据格式。这个软件包括很多地理处理的插件如:缓冲分析、合并处理等,也可以使用脚本编辑器编写VB.NET和C#的脚本。最新版本的MapWindow应用程序完全基于.NET2.0平台和C#。现在又开发出了MapWindow.Web可以让用户更容易开发基于ASP.Net的web应用。这样MapWindow逐渐形成一个完整的体系,从开发嵌入式系统的MapWinGIS.OCX到应用程序框架的MapWindow应用程序再到发布web程序的MapWindow.web。
MapWindow 6(http://mapwindow6.codeplex.com/)是在MapWindow 4的基础上进行改进,整个框架采用C#完成,代码完整清晰,其优点是:
①完全采用.net平台(不需要COM注册或DLL加载);
②可以通过使用Mono运行在Mac或Linux平台上;
③大量扩展了符号集,点、线、面的符号化更丰富,而且可以基于属性内容进行专题化,同时支持矢量化的字体符号;
④面向对象的代码:直接对各要素进行重叠分析、相交分析等。支持OGC的几何对象模型,基于System.Data.DataTable的数据集;
⑤可兼容的插件模式:插件的接口就像普通对象的事件对象一样;
⑥组件模式:所有的组件通过MapWindow.dll提供,能够拖放控件就可以定制GIS程序。
QGIS
QGIS是一个用户界面友好的桌面地理信息系统,可运行在Linux、Unix、Mac OSX和Windows等平台之上。QGIS是基于Qt,使用C++开发的一个用户界面友好、跨平台的开源版桌面地理信息系统。 http://www.qgis.org/
QGIS软件的主要特点有:
1 支持多种GIS数据文件格式。通过GDAL/OGR扩展可以支持多达几十种数据格式.
2 支持PostGIS数据库。
3支持从WMS,WFS服务器中获取数据
4 集成了Grass的部分功能。
5 支持对GIS数据的基本操作,如属性的编辑修改等。
6 支持创建地图。
7 通过插件的形式支持功能的扩展
udig
uDig是一个 open source (EPL and BSD) 桌面应用程序框架,构建在Eclipse RCP和GeoTools(一个开源的Java GIS工具包)上的桌面GIS(地理信息系统) ;是一款开源桌面GIS软件,基于Java和Eclipse平台,可以进行shp格式地图文件的编辑和查看;是一个开源空间数据查看器/编辑器,对OpenGIS标准,关于互联网GIS、网络地图服务器和网络功能服务器有特别的加强。uDig提供一个一般的java平台来用开源组件建设空间应用。
Grass
桌面经典GIS软件,显示引擎使用cario, http://grass.fbk.eu/
OpenStreetMap
OpenStreetMap(简称OSM,中文是公开地图)是一个网上地图协作计划, 由网络大众共同打造的免费开源、可编辑的地图服务,目标是创造一个内容*且能让所有人编辑的世界地图。
OpenStreetMap它是利用公众集体的力量和无偿的贡献来改善地图相关的地理数据。OSM是非营利性的,它将数据回馈给社区重新用于其它的产品与服务。而其他地图则是将大多数的地图数据出售给第三方。
http://www.openstreetmap.org/
Mapnik
用来开发 GIS 应用程序的工具包,其核心是一个 C++ 的共享库提供空间数据访问和可视化的算法和模式。OpenStreetMap地图用mapnik渲染,显示引擎使用AGG,效率与美感优秀。 http://mapnik.org/
OSGGIS
3D地图制图工具,: http://wush.net/trac/osggis
Web服务
GeoServer
GeoServer(http://geoserver.org/)是一个符合J2EE规范,且实现了WCS、WMS及WFS规格,支持TransactionWFS(WFS-T),其技术核心是整合了颇负盛名的JavaGISolkit--GeoTools。对于空间信息存储,它支持ESRI Shapefile及PostGIS、Oracle、ArcSDE等空间数据库,输出的GML档案满足GML2.1的要求。由于它是纯Java的,所以更适合于复杂的环境要求,而且由于它的开源,所以开发组织可以基于GeoServer灵活实现特定的目标要求,而这些都是商业GIS组件所缺乏的。
GeoServer作为一个纯粹的Java实现,被部署在应用服务器中,简单的如Tomcat等;它的WMS和WFS组件响应来自于浏览器或uDig的请求,访问配置的空间数据库,如PostGIS、OracleSpatial等,产生地图和GML文档传输至客户端。
具有以下优点: 1) 用 java 语言编写、标准的 J2EE 框架、基于 ser vlet 和 STRUTS 框架、 支持高效的 Spring 框架开发; 2) 兼容 WMS 和 WFS 特性、支持 WFS-T 规范; 3) 高效的数据库支持 PostGIS、ShapeFile、ArcSDE,Oracle、MySQL 等; 4) 支持上百种投影; 5) 能够将网络地图输出为 jpeg、gif、png 等格式;
MapServer
MapServer(http://mapserver.org/)基于C语言,利用GEOS、OGR/GDAL对多种失量和栅格数据的支持,通过Proj.4共享库实时的进行投影变换。同时,还集合PostGIS和开源数据库PostgreSQL对地理空间数据进行存储和SQL查询操作,基于ka.map、MapLab、Cartoweb和Chameleon等一系列客户端JavaScfiptAPI来支持对地理空间数据的传输与表达,并且遵守开放地理空间协会(Open Geospatial Consortium,OGC)制定的WMS、WFS、WCS、WMC、SLD、GML和FilterEncoding等一系列规范。对不同项目的借鉴和运用,增强了MapServer的功能,并使开发团队更多地关注于网络制图的核心功能。
MapServer是一套用来构建空间网络应用的开源开发环境,并不是一套全能的GIS系统,它更擅长于在网络上展示空间数据,在服务器端实时的将地理空间数据处理成地图发送给客户端。MapServer拥有一个庞大的社区,并有一个来自全球的近20名核心开发人员以致力于产品的维护和增强。同时还有各种不同的组织机构为MapServer的开发和维护提供资助。
提供两种工作方式,CGI方式(适用于CGI、AJAX、FLEX开发人员)和MapScript方式(适用于Php、Java、 C#、Python开发人员)。以原生CGI方式效率最高,配合TileCache,可以快速生成大范围的地图瓦片数据。比较基于.Net和J2EE的商 业或开源平台,MapServer更适合高负荷的大型互联网地图应用。MapServer 是基于C写的地图服务软件,比用JAVA写的GeoServer速度要快。而且 MapServer 历史要比 GeoServer 悠久,甚至MapServer 的性能与商业的 ArcIMS 的功能可以娉美。
Mapnik
Mapnik(http://mapnik.org/)是一个用于开发地图应用程序的工具。Mapnik用C++写同时有Python绑定接口。使用Mapnik可以很方便的进行桌面和web应用程序开发。
Mapnik主要提供地图的渲染功能,使用AGC库同时提供世界级的标注引擎。可以说Mapnik是现在最强大的开源地图渲染工具。
sse4j
Java开发的提供地理信息数据源构建的垂直搜索引擎应用接口、针对在线地图服务(互联网或移动互联网)的服务端,能够提供POI搜索、道路搜索、区域搜索、地址匹配、路径规划、公交换乘和无线定位等功能。 http://code.google.com/p/sse4j/
Js库
OpenLayers
OpenLayers(http://openlayers.org/)是一个开源的jS框架,用于在您的浏览器中实现地图浏览的效果和基本的zoom,pan等功能。OpenLayers支持的地图来源包括了WMS,GoogleMap,KaMap,MSVirtualEarth等等,您也可以用简单的图片作为源,在这一方面OpenLayers提供了非常多的选择。此外,OpenLayers实现了行业标准的地理数据访问方法如OGC的Web Mapping Service(WMS)and Web Feature Service(WFS)协议。OpenLayers可以简单的在任何页面中放入动态的地图。它可以从多种的数据源加载显示地图。MetaCarta公司开始开发了OpenLayers的初始版本同时将它开放给了公众以作为以后各种地理信息系统的应用。openscales(Flex): http://openscales.org/
TileCache
TileCache(http://tilecache.org/)是一个实现WMS.C的标准的服务器, TileCache提供了一个基于PythonTile的WMS.C/TMS服务器,同时具有开可插入的缓存和后台渲染机制。在最简单的应用中,只要求TileCache可以访问磁盘可以运行Python的CGI脚本。同时可以连接需要缓存的WMS服务。使用这些资源,你可以创建任何WMS服务在你的本地硬盘的缓存,同时使用支持WMS-C标准的客户端如:OpenLayers或任何支持TMS的客户端如:OpenLayers和wordKit就可以访问这些缓存数据。
FGMAP
FGMap是一个仿Google Maps API for Flash 做的WebGIS客户端组件,允许 Flex 开发人员将 Google Maps,MapABC地图,Bing地图,QQ地图 嵌入到 Flash 应用程序中。而不需要使用KEY或验证。 http://code.google.com/p/fgmap-webgis/
LeafLet
Leaflet 是一个为建设交互性好适用于移动设备地图,而开发的现代的、开源的 JavaScript 库。代码仅有 33 KB,但它具有开发在线地图的大部分功能。Leaflet设计坚持简便、高性能和可用性好的哲学思想,在所有主要桌面和移动平台能高效运作,在现代浏览器上会利用HTML5和CSS3的优势,同时也支持旧的浏览器访问。支持插件扩展,有一个友好、易于使用的API文档和一个简单的、可读的源代码。Leaflet强大的开源库插件涉及到地图应用的各个方面包括地图服务,数据提供,数据格式,地理编码,路线和路线搜索,地图控件和交互等类型的插件共有140多个。这些控件 丰富leaflet的功能,同时也可以十分方便的实现自定义的控件具有良好的可扩展性。http://leafletjs.com