




已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
GeoServer Eclipse 搭建矢量数据库搭建安装数据库sudoapt-get installpostgresql postgresql-contrib postgis postgresql-9.1-postgis安装完毕,我们需要更改postgres用户的密码,否则我们就没法使用这个数据库服务器。以postgres这个系统用户的身份运行psql命令,在终端中输入如下:sudo su postgres -c psql template1这时候会出现新的提示符,输入下面两个命令,用新密码替换 :ALTER USER postgres WITH PASSWORD ; b)创建用户及数据库postgres# CREATE USER zuefir WITH PASSWORD xxxx;postgres# CREATE DATABASE osm;postgres# GRANT ALL PRIVILEGES ON DATABASE osm to zuefir;c)为数据库添加空间扩展CREATEEXTENSION postgis;- Enable TopologyCREATEEXTENSION postgis_topology;- fuzzy matching needed for TigerCREATEEXTENSION fuzzystrmatch;- 地理编码CREATEEXTENSION postgis_tiger_geocoder;- 用于存储属性tags,key-valueCREATEEXTENSION hstore;修改PostgreSQL数据库的默认用户postgres的密码 2.PostgreSQL登录(使用psql客户端登录) rootserver2-virtual-machine:# sudo -u postgres psql /其中,sudo -u postgres 是使用postgres 用户登录的意思 /PostgreSQL数据默认会创建一个postgres的数据库用户作为数据库的管理员,密码是随机的,所以这里 /设定为postgres 3.修改PostgreSQL登录密码: postgres=# ALTER USER postgres WITH PASSWORD postgres; /postgres=#为PostgreSQL下的命令提示符 4.退出PostgreSQL psql客户端 postgres=# q 代码说明 #和#之前的字符是系统提示符,postgres=#是psql客户端的提示符,红色字符为输入命令(本文其它部分亦如此); 功能说明 PostgreSQL数据默认会创建一个postgres的数据库用户作为数据库的管理员,密码是随机的,我人需要修改为指定的密码,这里设定为postgres修改linux系统的postgres用户的密码1.删除PostgreSQL用户密码 rootserver2-virtual-machine:# sudo passwd -d postgres passwd: password expiry information changed. /passwd -d 是清空指定用户密码的意思 2.设置PostgreSQL用户密码 PostgreSQL数据默认会创建一个linux用户postgres,通过上面的代码修改密码为postgres(这取决于 第二步中的密码,只要与其相同即可)。 现在,我们就可以在数据库服务器上用 postgres帐号通过psql或者pgAdmin等等客户端操作数据库了。 rootserver2-virtual-machine:#sudo -u postgres passwd 输入新的 UNIX 密码: 重新输入新的 UNIX 密码: passwd:已成功更新密码修改PostgresSQL数据库配置实现远程访问 rootserver2-virtual-machine:# vi /etc/postgresql/9.1/main/postgresql.conf 1.监听任何地址访问,修改连接权限 #listen_addresses = localhost改为 listen_addresses = * 2.启用密码验证 #password_encryption = on改为password_encryption = on 3.可访问的用户ip段 rootserver2-virtual-machine:# vi /etc/postgresql/9.1/main/pg_hba.conf,并在文档末尾加上以下内容 # to allow your client visiting postgresql server host all all md5 4.重启PostgreSQL数据库 rootserver2-virtual-machine:# /etc/init.d/postgresql restart管理PostgreSQL用户和数据库 1.登录postgre SQL数据库 rootserver2-virtual-machine:# psql -U postgres -h 2.创建新用户zhaofeng,但不给建数据库的权限 postgres=# create user “zhaofeng” with password 123456 nocreatedb; /注意用户名要用双引号,以区分大小写,密码不用 3.建立数据库,并指定所有者 postgres=# create database “testdb” with owner=”zhaofeng”; 4.在外部命令行的管理命令 rootserver2-virtual-machine:# -u postgres createuser -D -P test1 /-D该用户没有创建数据库的权利,-P提示输入密码,选择管理类型y/n rootserver2-virtual-machine:# -u postgres createdb -O test1 db1 /-O设定所有者为test1安装postgresql数据库pgAdmin3客户端管理程序 rootserver2-virtual-machine:# apt-get install pgadmin3添加PostGIS功能到数据库,执行如下命令psql -U postgres -d osm -f “你PostgreSQL安装路径/share/contrib/postgis-2.1/postgis.sql”添加EPSG: 900913支持psql -U postgres -d osm -f “本地的文件路径/900913.sql”900913.sql没有可以在osm2pgsql的github中下载到添加OSM数据到数据库下载github上的osm2pgsql中的default.style文件并拷贝到本地osm2pgsql的x64目录中,把下载的chain.osm.bz2文件解压得到的chain.osm文件也拷贝到osm2pgsql的x64目录中。新打开一个命令行进入osm2pgsql的x64目录中,执行如下命令:osm2pgsql -U postgres -d osm -s -S ./default.style ./china.osm一般情况下会报一个”Error reading style file line 151 (fields=4) flag phstore is invalid in non-hstore mode“的错误,这说明确实hstore表示所以我们需要添加这个标识。点击pgAdmin III 工具栏中的SQL标识在弹出的SQL编辑器中输入:create extension hstore;命令点击顶部工具栏中的这时还需要为命令添加一个“hstore “选项 完整的执行命令是:“osm2pgsql -U postgres -d osm hstore -s -S ./default.style ./china.osm “这样就正确了。后面导入可以不添加 S ./default.style GeoServer导入eclipse下载GeoServer 源码 /cd 进入src目录mvn clean install成功之后 生成导入eclipse的文件mvn eclipse:eclipseGeoServer二次开发GeoServer相关概念的介绍Geoserver是一个功能齐全,遵循OGC开放标准的开源WFS-T和WMS服务器。利用Geoserver可以把数据作为maps/images来发布(利用WMS来实现)也可以直接发布实际的数据(利用WFS来实现),同时也提供了修改,删除和新增的功能(利用WFS-T)。GeoServer, 顾名思义,是一个Server. 它是开源的,允许用户查看和编辑地理数据。这是地理信息系统(GIS) 领域。GeoServer 是符合OGC 规范的一个全功能的WFS-T 和WMS server。GeoServer能够发布的数据类型:l 地图或影象应用WMS,l 实时数据应用WFS,l 用户更新、删除和编辑的数据应用WFS-T。相关概念的:WMS: Web Map Service(Web地图服务)l利用具有地理空间位置信息的数据制作地图。其中将地图定义为地理数据可视的表现。这个规范定义了三个操作:nGetCapabitities返回服务级元数据,它是对服务信息内容和要求参数的一种描述;nGetMap返回一个地图影像,其地理空间参考和大小参数是明确定义了的;nGetFeatureInfo(可选)返回显示在地图上的某些特殊要素的信息WFS: Web Feature Service(Web要素服务)lWeb地图服务返回的是图层级的地图影像,lWeb要素服务(WFS)返回的是要素级的GML编码,并提供对要素的增加、修改、删除等事务操作,是对Web地图服务的进一步深入。OGC Web要素服务允许客户端从多个Web要素服务中取得使用地理标记语言(GML)编码的地理空间数据,定义了五个操作:nGetCapabilites返回Web要素服务性能描述文档(用XML描述);nDescribeFeatureType返回描述可以提供服务的任何要素结构的XML文档;nGetFeature一个获取要素实例的请求提供服务;nTransaction为事务请求提供服务;nLockFeature处理在一个事务期间对一个或多个要素类型实例上锁的请求。WFS-T: Web Map Service-Transactional. 允许用户以可传输的块编辑地理数据。WCS:Web Coverage Service(Web覆盖服务)Web覆盖服务(WCS)面向空间影像数据,它将包含地理位置值的地理空间数据作为“覆盖(Coverage)”在网上相互交换。l网络覆盖服务由三种操作组成:GetCapabilities,GetCoverage和DescribeCoverageType:nGetCapabilities操作返回描述服务和数据集的XML文档。nGetCoverage操作是在GetCapabilities确定什么样的查询可以执行、什么样的数据能够获取之后执行的,它使用通用的覆盖格式返回地理位置的值或属性。nDescribeCoverageType操作允许客户端请求由具体的WCS服务器提供的任一覆盖层的完全描述。GML:Geography Markup Language.一种用于描述地理数据的XML。OGCOpen Geospatial Consortium开放地理信息联盟总之,GeoServer是您需要显示地图在网页的那些工具的当中一个,用户可以缩放并且移动。可以与一些客户端联合使用,比如:MapBuilder (for web pages), UDig, GVSig,等等。对标准的使用允许信息从GeoServer到其它地理信息可以很容易地被结合。如果你对GeoServer发出一个WMS请求,你就可能得到如下的一张图:查看Demo在welcome界面中单击demo page链接,进入页面后单击WFS-T链接就可以启动一个名叫MapBuilder的基于Javascript的地图地图编辑器。启动MapBuilder后我们可以看到一张样图,那就就从它开始吧!用其提供的工具对图进行修改。自己练习。关于geoserver开发geoserver只能用j2ee开发geoserver是符合ogcwms/wfs/wcs标准的地图服务器,建设一套完整的webgis系统还需要客户端配合,mapbuilder和openlayers是非常好的两个选择。对于较大的项目,空间数据库也是必不可少的,geoserver支持商业的oracle、db2,开源的postgis、mysql。扯得更远一点,geoserver支持googlemap和googleearth。Geotools外文官网/Geotools是开源的Java代码库,在GIS中提供对地理空间数据的标准操作。简单说,它就是一个中间件,提供的功能符合OGC规范,且与GeoAPI有密切的联系。它支持的数据格式有Shapefile、GML、WFS、PostGIS、Oracle Spatial、ArcSDE、MySQL、GeoMedia、MapInfo等。利用Geotools能够实现:l格网覆盖Grid coverages栅格数据,l坐标系统转换Coordinate Transformation,l数据渲染Renderers,l格式化Styling符号化数据集等功能。WFS地址把下面地址中的HighwayInterchange改成自己创建的featuretype的名字,在浏览器中查看,WFS的URL,http:/localhost:8080/geoserver/wfs?request=getfeature&service=wfs&version=1.0.0&typename=States下面地址的youtian改成自己的FeatureType名字,就是自己的WFS地址http:/localhost:8080/geoserver/wms/kml_reflect?layers=youtianOpenlayersOpenlayers dom结构OpenLayers项目分析(一)项目介绍(OpenLayers JavaScript Mapping Library)(一)项目介绍网址:/OpenLayers是由MetaCarta公司开发的,用于WebGIS客户端的JavaScript包,目前的最高版本是2.5 V,通过BSD License发行。它实现访问地理空间数据的方法都符合行业标准,比如OpenGIS的WMS和WFS规范,OpenLayers采用纯面向对象的JavaScript方式开发,同时借用了Prototype框架和Rico库的一些组件。采用OpenLayers作为客户端不存在浏览器依赖性。由于OpenLayers采用JavaScript语言实现,而应用于Web浏览器中的DOM(文档对象模型)由JavaScript实现,同时,Web浏览器(比如IE,FF等)都支持DOM。OpenLayers APIs采用动态类型脚本语言JavaScript编写,实现了类似与Ajax功能的无刷新更新页面,能够带给用户丰富的桌面体验(它本身就有一个Ajax类,用于实现Ajax功能)。目前,OpenLayers所能够支持的Format有:XML、GML、GeoJSON、GeoRSS、JSON、KML、WFS、WKT(Well-Known Text)。在OPenlayers.Format名称空间下的各个类里,实现了具体读写这些Format的解析器。OpenLayers所能够利用的地图数据资源“丰富多彩”,在这方面提供给拥护较多的选择,比如WMS、WFS、GoogleMap、KaMap、MSVirtualEarth、WorldWind等等。当然,也可以用简单的图片作为源。第一次使用OpenLayers:先到它的官方网站下载他的压缩包,解压后可以看到其中的一些目录和文件,拷贝目录下的OpenLayer.js、根目录下的lib目录、根目录下的img目录到你网站的Scripts目录下(当然,这个只是例子,您网站的目录结构您自己说得算,只要保证OpenLayers.js,/lib,/img在同一目录中即可)。然后,创建一个index.html作为查看地图的页面,导入OpenLayers.js和你将要创建的js。我们以加载WMS和GML文件为例。var lon = 5; /x-axis coodinate in map unitsvar lat = 40; /y-axis coordinate in map unitsvar zoom = 5; /number of zoom levelsvar map, layer; /声明变量map、layer;等同于var map = null; var layer = null;map = new OpenLayers.Map(map);/实例化一个地图类OpenLayers.Maplayer = new OpenLayers.Layer.WMS( OpenLayers WMS,/wms/vmap0, layers: basic );/以WMS的格式实例化图层类OpenLayers.Layermap.addLayer(layer);map.zoomToExtent(newOpenLayers.Bounds(-3.922119,44.335327,4.866943,49.553833);/在Map对象上加载Layer对象,并用map.zoomToExtent函数使地图合适地显示map.addLayer(new OpenLayers.Layer.GML(GML, gml/polygon.xml);/再在刚加载的WMS文件上,加载一GML文件剩下的工作就是,加上一些控件OpenLayers.Control之类的东西,比如LayerSwitcher等。它们会在地图浏览的“窗口”上增加一些工具栏或是“按钮”,增加互动性和功能性。当然,Openlayers中的东西远不止这些,至于它的框架分析、APIs实现机制,会在后续文章中说出。写这个的过程,也是一个学习的过程,其中难免有不妥之处,热烈欢迎大家批评指正,相互交流。OpenLayers项目完整分析(二)源代码总体结构分析(二)源代码总体结构分析通过前面的项目介绍,我们大概已经知道Openlayers是什么,能够做什么,有什么意义。接下来我们分析它怎么样,以及怎样实现的等问题。这个图是从它的文档上截取的,旨在从感官上认识一下OpenLayers的类。下面分别介绍(文档中的类是按字母顺序排列的,也按这个顺序说吧):我们看到在类的顶层“高高在上”的是OpenLayers,它为整个项目实现提供名称空间(JavaScript语言没有名称空间一说,但是它确实有自己的机制实现类似的功能,后面会说明),它直接拥有一常量VERSION_NUMBER,以标识版本。Ajax:顾名思义,用于实现Ajax功能,只是OpenLayers的开发者们把它单独写到一个类里了,其中用到了Prototype.js框架里的一些东西。同时,设计的时候也考虑了跨浏览器的问题。BaseTypes:这里定制了OpenLayers中用到的string,number和function。比如,OpenLayers. String. startsWith,用于测试一个字符串是否一以另一个字符串开头;OpenLayers. Number. limitSigDigs,用于限制整数的有效数位;OpenLayers. Function.bind,用于把某一函数绑定于对象等等。Console:OpenLayers.Console,此名称空间用于调试和把错误等输出到“控制台”上,需要结合使用./Firebug/firebug.js。Control:我们通常所说的控件类,它提供各种各样的控件,比如上节中说的图层开关LayerSwitcher,编辑工具条EditingToolbar等等。加载控件的例子:class = new OpenLayers.Map(map, controls: );map.addControl(new OpenLayers.Control.PanZoomBar();map.addControl(new OpenLayers.Control.MouseToolbar();Events:用于实现OpenLayers的事件机制。具体来说,OpenLayers中的事件分为两种,一种是浏览器事件,例如mouseup,mousedown之类的;另外一种是自定义的,如addLayer之类的。OpenLayers中的事件机制是非常值得我们学习的,后面将具体讨论。Feature:我们知道:Feature是geography和attributes的集合。在OpenLayers中,特别地OpenLayers.Feature类由一个marker和一个lonla组成。OpenLayers. Feature.WFS与OpenLayers. Feature. Vector继承于它。Format:此类用于读写各种格式的数据,它的子类都分别创建了各个格式的解析器。这些格式有:XML、GML、GeoJSON、GeoRSS、JSON、KML、WFS、WKT(Well-Known Text)。Geometry:怎么翻译呢,几何?是对地理对象的描述。它的子类有Collection、Curve、LinearRing、LineString、MultiLineString、MultiPoint、MultiPolygon、Point、Polygon、Rectangle、Surface,正是这些类的实例,构成了我们看到的地图。需要说明的是,Surface类暂时还没有实现。Handler:这个类用于处理序列事件,可被激活和取消。同时,它也有命名类似于浏览器事件的方法。当一个handler被激活,处理事件的方法就会被注册到浏览器监听器listener,以响应相应的事件;当一个handler被取消,这些方法在事件监听器中也会相应的被取消注册。Handler通过控件control被创建,而control通过icon表现。Icon:在计算机屏幕上以图标的形式呈现,有url、尺寸size和位置position个属性。一般情况,它与OpenLayers.Marker结合应用,表现为一个Marker。Layer:图层。Map:网页中动态地图。它就像容器,可向里面添加图层Layer和控件Control。实际上,单个Map是毫无意义的,正是Layer和Control成就了它。Marker:它的实例是OpenLayers.LonLat和OpenLayers.Icon的集合。通俗一点儿说,Icon附上一定的经纬度就是Marker。Popup:地图上一个小巧的层,实现地图“开关”功能。使用例子:Class = new OpenLayers.Popup(chicken,new OpenLayers.LonLat(5,40),new OpenLayers.Size(200,200),example popup,true);map.addPopup(popup);Renderer:渲染类。在OpenLayers中,渲染功能是作为矢量图层的一个属性存在的,我们称之为渲染器,矢量图层就是通过这个渲染器提供的方法将矢量数据显示出来。以SVG和VML为例,继承关系是这样的:至于OpenLayers. Renderer. Elements为什么要存在,以及它的渲染机制,后面会说。Tile:设计这个类用于指明单个“瓦片”Tile,或者更小的分辨率。Tiles存储它们自身的信息,比如url和size等。它的类继承关系如下:Util:“跑龙套”的类。写到这里,可以看到OpenLayers的类缠绕的挺麻烦的,接下来的文章将从代码部分分析更细部的东西。OpenLayers项目分析(三)BaseTypes(三)BaseTypes:定义底层类与定制JS内置类先说基类型BaseTypes下,OpenLyers构建的“自己”的类。它们分别是:OpenLayers. LonLat、OpenLayers. Pixel、OpenLayers.Size、OpenLayers. Element、OpenLayers. Bounds和OpenLayers. Class。下面分别介绍:OpenLayers. LonLat:经纬度类,其实例为地图提供一经度、纬度对,即位置。有两个属性lon(x-axis coodinate)和lat(y-axis coordinate)。这里说明一下,怎么经纬度又与x轴坐标、y轴坐标纠缠在一起?是这样:当地图是在地理坐标投影下,它就是经纬度;不然就是地图上的xy轴坐标。除构造函数外,实现了五个函数:toShortString:function()把坐标转换为字符串;clone:function()复制一个LonLat对象;Add:function(lon,lat)改变现有地图的位置;return new OpenLayers.LonLat(this.lon + lon, this.lat + lat);equals:function(ll)判断传入的lon,lat对是否与当前的相等;wrapDateLine:function(maxExtent)复制下(lon,lat),指定为边界的最大范围。OpenLayers. Pixel:像素类,在显示器上以(x,y)坐标的的形式呈现像素位置。有两个属性x坐标、y坐标,提供四个成员函数:clone:function()拷贝像素;equals:function(px)判断两像素是否相等;add:function(x,y)改变(x,y)使其成为新像素;return new OpenLayers.Pixel(this.x + x, this.y + y);offset:function(px)调用add()使像素位置发生偏移。newPx = this.add(px.x, px.y);OpenLayers.Size:也有两个属性,宽度width、高度height。实现了两个成员函数:clone:function()和equals:function(sz)不多说了。OpenLayers. Element:在这个名称空间下,开发者写了好多API,有visible、toggle、hide、show、remove、getHeight、getDimensions和getStyle,以实现元素的显示、隐藏、删除、取得高度,取得范围等功能。以getHeight函数为例我们看看它的代码:getHeight: function(element) element = OpenLayers.Util.getElement(element);return element.offsetHeight;这里涉及到文档对象模型DOM的一些东西,函数本身很简单,最后返回元素的高度。OpenLayers. Bounds:在这个类中,数据以四个浮点型数left, bottom, right, top的格式存储,它是一个像盒子一样的范围。它实现了三个描述一个Bound的函数:toString、toArray和toBBOX。其中,toString的代码如下:toString:function() return ( left-bottom=( + this.left + , + this.bottom + )+ right-top=( + this.right + , + this.top + ) );结果类似于left-bottom=(5,42) right-top=(10,45)三个Bound数据来源函数:fromString、fromArray和fromSize;五个获取对象属性的函数:getWidth、getHeight、getSize、getCenterPixel、getCenterLonLat;余下还有:add:function(x,y),extend:function(object),containsLonLat,containsPixel,contains,intersectsBounds,containsBounds,determineQuadrant,wrapDateLine。以函数extend为例,看看源码。extend:function(object) var bounds = null;if (object) switch(object.CLASS_NAME) case OpenLayers.LonLat:bounds = new OpenLayers.Bounds (object.lon, object.lat, object.lon, object.lat);break;case OpenLayers.Geometry.Point:bounds = new OpenLayers.Bounds(object.x, object.y,object.x, object.y);break;case OpenLayers.Bounds:bounds = object;break;if (bounds) if ( (this.left = null) | (bounds.left this.left) this.left = bounds.left;if ( (this.bottom = null) | (bounds.bottom this.right) ) this.right = bounds.right;if ( (this.top = null) | (bounds.top this.top) ) this.top = bounds.top;可以看出,对Bounds的扩展可以有三种形式:point, lonlat,或者bounds,计算的条件是零坐标是在屏幕的左上角。OpenLayers. Class:这个类是OpenLayers中的“大红人”,只要创建其他类就得用它,同时也实现了多重继承。用法如下:单继承创建:class = OpenLayers.Class(prototype);多继承创建:class = OpenLayers.Class(Class1, Class2, prototype);净说底层类了,对js内置类的扩展下回写。OpenLayers项目分析(三)BaseTypes (续)(三)BaseTypes:OpenLayers中定制JavaScript内置类OpenLayers不仅“自己”写了一些底层的类,像上回说的那些都是。同时也定制了一些JS的一些内置类,即对JS内置类的扩展。这个扩展主要包含3类:String,Number,Function,存在于BaseTypes.js文件中。String:OpenLayers对string类型定制了个方法,分别是startsWith、contains、trim和camelize;还有另外个方法:String. startsWith、String. contains、String.trim和String. Camelize,它们将会在3.0Version中被删除,可能是以前版本遗留下来的,这里就不说它们了。/Test whether a string starts with another string.startsWith: function(str, sub) return (str.indexOf(sub) = 0);/Test whether a string contains another string.contains: function(str, sub) return (str.indexOf(sub) != -1);/Removes leading and trailing whitespace characters from a string.trim: function(str) return str.replace(/s*(.*?)s*$/, $1);/Camel-case a hyphenated string./Ex.chicken-headbecomeschickenHead,/and-chicken-headbecomesChickenHead./“骆驼”化带有连字符的字符串。camelize: function(str) var oStringList = str.split(-);var camelizedString = oStringList0;for (var i = 1; i 0) fig = parseFloat(num.toPrecision(sig); else fig = 0;return fig;Function:扩展了两个方法bind和bindAsEventListener(同样存在Function.bind和Function. bindAsEventListener两个被“遗弃”的函数)。/Bind a function to an object./Method to easily create closures withthis altered.bind: function(func, object) / create a reference to all arguments past the second onevar args = Atotype.slice.apply(arguments, 2);return function() / Push on any additional arguments from the actual function call./ These will come after those sent to the bind call.var newArgs = args.concat(Atotype.slice.apply(arguments, 0);return func.apply(object, newArgs);/Bind a function to an object, and configure it to receive the event/object as first parameter when called.bindAsEventListener: function(func, object) return function(event) return func.call(object, event | window.event);这里说说这两个方法。首先看看bind方法,这是一个能够被Function的实例得到的方法,如下所示:Ftotype.bind = function() var _method = this, args = , object = arguments0;for (var i = 1; i arguments.length; i+)args.push(argumentsi);return function(moreargs) for (var i = 0; i arguments.length; i+)args.push(argumentsi);return _method.apply(object, args);_method代表Function实例自身,bind可接收多个参数,不过它绑定是是第一个参数,该参数是一个function或者是调用环境,后面的都是执行函数的参数。Ftotype.bindAsEventListener = function(object) var _method = this;return function(event) return _method.call(object, event | window.event);这里只是将object作为_method引用的环境,就是说现在可以在object对象中这样使用,object. _method(event|window.event)。也许你注意到了Funtion扩展的两个方法一个用到了call而另一个用的是apply,其实这两个并没有什么太大的区别,只是参数传递的形式不同,如若没有参数要传递,那么这两个是一样的:apply(obj,argumentsArray),call(obj,arg1,arg2)。OpenLayers项目分析(四)空间数据的组织与实现提到数据,先思考几个问题:GIS,核心是什么?数据?平台?服务?空间数据的特征、表达方式?地理数据的模型(结构)?在OpenLayers空间数据的实现主要存在OpenLayers. Geometry类及其子类中。我们先看下面的两个图片,表现了这些类的继承关系。从图上可以清楚的看出MultiPoint、Polygon和MultiLineString这三个类实现了多重继承,即直接继承于Geometry类,又继承于Collection类(为什么要这样实现?)。OpenLyers对于Geometry对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 装饰维修合同(标准版)
- 购买鱼资料合同(标准版)
- 青年公寓合同(标准版)
- 2025图形设计自考试题及答案
- 食品省代合同(标准版)
- 2025年学历类自考中国古代文学作品选(一)-教育学(一)参考题库含答案解析(5卷)
- 2025年学历类自考中国古代文学作品选(一)-学前儿童保育学参考题库含答案解析(5卷)
- 过继赡养合同(标准版)
- 2025设计美学自考考试题型及答案
- 2025瑞丰银行笔试题库及答案
- 软件著作权无偿转让合同5篇
- 2025年公安警种知识测试题及答案
- 抵押车贷合同(标准版)
- 2025年秋季学期教科版三年级上册科学教学计划(三篇)
- 2024人教PEP版三年级英语上册全册教案
- 机械制图(第五版)全套课件
- 人卫慕课《走进肺功能》试题答案
- 第十二章-地球系统科学课件
- 2022~2023血站上岗证考试题库及答案参考85
- 蒙台梭利的学前教育思想课件
- 公司产品报价单通用格式模板
评论
0/150
提交评论