`

geometry类和feature类

阅读更多

我们上面的章节一直使用的都是feature,但是feature,中有个非常重要的属性就是geometry对象,他保存着对象的事件形态,就是我们vectorLayer上

显示的几何图形。

eg  我们要创建一个Feautre,里面会包装一个Feature

var feature_point = new OpenLayers.Feature.Vector({new OpenLayers.Geometry.Point(lon,lat)})

 

几何类的方法

atPoint(lonlat,tolerancelon,tolerancelat)  参数lonlat为OpenLayers.LonLat,后面的两个参数为点的阈值,因为feature在地图是以带style的点。

calculateBounds()          重新计算集合的边界,但是不返回任何值

clearBounds():             把geometry的边界设为null

  clone():                       复制一个OpenLayers.Geometry对象

destroy()                 销毁一个geometry,但是如果这个geometry是feature的一部分,销毁会失败

distanceTo  (geometry, options)           这个方法会返回自己与最近或是传入geometry之间距离,options有个属性,distance如果为true将会返回

                                                               包含x0y0,x1y1和距离的对象,为false的话,会返回距离数,但是要注意map的units设置的单位

extendBounds(bounds)                              不是很明白

getArea()                                       返回一个{Float},包含这个geometry的面积

getBounds()                 返回{openLayers.Bounds}对象

getCentroid()                    返回geometry的中心点,{OpenLayers.Geometry.Point}对象  

getLength()                      返回一个geometry覆盖的长度{Flot}

getVertices(nodes)            返回geometry中所有的节点对象

toString()                    返回wkt几何描述文本

 

Geometry 子类

Geometry.Point:包含(x,y)的对象

var my_point = new OpenLayers.Geometry.Point(-50,42);

Geometry.Collection:这是一个集合类,里面存放着Geometry的对象。LineString就是继承这个类。同几何对象的数组实例化。

var geom_collection = new OpenLayers.Geometry.Collection([geometry_point,geometry_line]);

Geometry.MultiPoint:这是一个点的几何对象,LineString就是继承的这个类,传递实例化对象的数组

var geom_multipoint = new OpenLayers.Geometry.MultiPoint([point1,point2])

Geometry.Curve:      曲线

Geometry.LineString:由点连接形成线,不能少于两个点的线

var geom_multi_line = new OpenLayers.Geometry.LineString([point1,point2]):

Geometry.MultiLineString::多线,不能少于两根线

var geom_multiLineString = new OpenLayers.Geometry.MultiLineString([line1,line2]);

Geometry.LinearRing:这是一个闭合的线对象,在几何上表达就是第一点,也是最后一点。

var geom_linear_ring = new OpenLayers.Geometry.linearRing([point1,point2,point3,point1])

Geometry.Polygon:这个类是一个Geometry.LinearRing的数组。

var geo_polygon = new OpenLayers.Geometry.Polygeo([linear1,linear2,linear3])

Geometry.MultiPolygon:是Geometry.polygon的数组

Geometry子类的方法

每个子类都有自己特有的方法或者是实现,我们可以参考开发文档。

 

Feature类

它一个有Geometry,和自身属性加上Style组成的类

 

方法

destroy(),销毁一个Feature Object

clone() 复制一个feature

getVisibility() 返回{boolean},feature是否可见

move(location) ,移动,可以传入OpenLayers.LonLat  和 OpenLayers.Pixel

onScreen(boundsOnly)     不是很清楚

 

使用SectFeature Control 与地图交互

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>地图交互</title>  
<script type="text/javascript" src="OpenLayers.debug.js"></script>  
<script type="text/javascript">  
    var map;  
    var vector_layer;  
      
    function init() {  
        //创建地图  
        map = new OpenLayers.Map('map');  
      
        //创建wms图层  
        var wms_layer = new OpenLayers.Layer.WMS('OpenLayers WMS',  
                'http://vmap0.tiles.osgeo.org/wms/vmap0', {  
                    layers : 'basic'  
                }, {});  
        //map.addLayer(wms_layer);  
      
        //创建矢量图层   
        vector_layer = new OpenLayers.Layer.Vector('Basic Vector Layer');  
    //  map.addLayer(vector_layer);  
          
    map.addLayers([wms_layer,vector_layer]);  
        //创建并添加feature  
        var feature_point_1 = new OpenLayers.Feature.Vector(  
                new OpenLayers.Geometry.Point(6.055, 46.234), {  
                    'location' : 'Cern',  
                    'description' : "Stand back, I'm going to try science!"  
                });  
        var feature_point_2 = new OpenLayers.Feature.Vector(  
                new OpenLayers.Geometry.Point(-129, 3), {  
                    'location' : 'The Sea',  
                    'description' : 'Here be dragons'  
                });  
        var feature_polygon = new OpenLayers.Feature.Vector(  
        //We'll make a polgon from a linear ring object, which consists of points  
        new OpenLayers.Geometry.Polygon(new OpenLayers.Geometry.LinearRing([  
                new OpenLayers.Geometry.Point(-124.2, 41.9),  
                new OpenLayers.Geometry.Point(-120.1, 41.9),  
                new OpenLayers.Geometry.Point(-120, 39),  
                new OpenLayers.Geometry.Point(-114.5, 34.9),  
                new OpenLayers.Geometry.Point(-114.7, 32.7),  
                new OpenLayers.Geometry.Point(-117.1, 32.5),  
                new OpenLayers.Geometry.Point(-120, 34),  
                new OpenLayers.Geometry.Point(-123.7, 38.4)  
        //We won't pass in the first point, the polygon will close automatically  
        ])), {  
            'location' : 'Fanghorn Forest',  
            'description' : 'Land of the Ents'  
        });  
        vector_layer.addFeatures([ feature_point_1, feature_point_2,  
                feature_polygon ]);  
      
        //创建并添加  selectFeature control  
        var select_feature_control = new OpenLayers.Control.SelectFeature(  
                vector_layer, {  
                    multiple : false,  
                    toggle : true,  
                    toggleKey : 'ctrlKey',  
                    multipleKey : 'shiftKey'  
                });  
        map.addControl(select_feature_control);  
      
        //激活控件  
        select_feature_control.activate();  
      
        //注册事件   
        vector_layer.events.register('featureselected', this, selected_feature);  
        vector_layer.events.register('featureunselected', this,unselected_feature);  
      
        if (!map.getCenter()) {  
            map.zoomToMaxExtent();  
        }  
      
    }  
    //触发选中事件   
    function selected_feature(event) {  
        //clear out the log's contents  
        document.getElementById('map_feature_log').innerHTML = '';  
      
        //Show the current selected feature (passed in from the event object)  
        var display_text = 'Clicked on: ' + '<strong>'  
                + event.feature.attributes.location + '</strong>' + ': '  
                + event.feature.attributes.description + '<hr />';  
        document.getElementById('map_feature_log').innerHTML = display_text;  
      
        //Show all the selected features  
        document.getElementById('map_feature_log').innerHTML += 'All selected features: ';  
      
        //Now, loop through the selected feature array   
        for ( var i = 0; i < vector_layer.selectedFeatures.length; i++) {  
            document.getElementById('map_feature_log').innerHTML += vector_layer.selectedFeatures[i].attributes.location  
                    + ' | ';  
        }  
    }  
    //没有被选中   
    function unselected_feature(event) {  
        var display_text = event.feature.attributes.location + ' unselected!'  
                + '<hr />';  
        document.getElementById('map_feature_log').innerHTML = display_text;  
      
        //Show all the selected features  
        document.getElementById('map_feature_log').innerHTML += 'All selected features: ';  
      
        //Now, loop through the selected feature array   
        for ( var i = 0; i < vector_layer.selectedFeatures.length; i++) {  
            document.getElementById('map_feature_log').innerHTML += vector_layer.selectedFeatures[i].attributes.location  
                    + ' | ';  
        }  
    }  
</script>  
</head>  
<body onload="init()">  
    <div id="map" style="width: 500px; height: 500px;"></div>  
    <div id="map_feature_log">显示详情</div>  
</body>  
</html>
分享到:
评论

相关推荐

    第 06 节_GEE 的数据类型(Geometry,Feature, Feature Collection).pdf

    通过掌握Geometry、Feature和FeatureCollection的创建和操作,用户能够有效地进行空间数据的查询、分析和可视化。这对于从环境科学、城市规划到灾害监测等多个领域的应用至关重要。随着遥感技术的发展和大数据时代的...

    ST_Geometry及使用大全.pdf

    在创建ST_Geometry要素类时,文档介绍了多种方法,包括通过SDE工具创建和直接使用SQL语句创建。同时,也提供了如何连接权限设置、使用sdelayer命令以及SQL直接操作FeatureClass的指导。该章节还涵盖了数据的插入、...

    feature转化为Json对象

    Feature 对象是 ESRI 的 ArcGIS Geometry 库中的一个类,用于描述空间要素的几何信息和属性信息。它包含了两个主要的部分:Geometry 对象和属性信息。Geometry 对象用于描述要素的几何形状,包括点、线、polygon 等...

    C#写的ArcSDE连接添加Feature的类

    feature.Geometry = new MapPoint(new MapPointGeometry(new MapPoint(0, 0))); // 设置属性值... ``` 最后,将新创建的Feature添加到FeatureTable并提交事务: ```csharp featureTable.AddFeature(feature); ...

    geojson-geometry-shp格式相互转化总结

    【描述】:在Java开发中,经常需要处理不同地理数据格式的转换,特别是GeoJSON和Geometry SHP格式之间的互换。本篇文章将对这两种格式的数据转换过程进行详尽的阐述,并结合PDF文档中的总结,为开发者提供实用的参考...

    Feature设置文本风格

    `Feature`具有几何对象(Geometry)、属性信息(Attributes)和风格(Style)三个主要部分。在设置文本风格时,我们关注的是`Style`部分,尤其是其中的文本样式属性。 1. **创建Feature对象** 在JavaScript中,...

    Multiple View Geometry in Computer Vision

    - **多视图几何(Multi-view Geometry)**:本书介绍了从两幅或多幅图像中恢复三维信息的技术,这些技术在机器人导航、三维建模和增强现实中都有广泛的应用。 #### 2. 两视图几何(Two-View Geometry) - **基础矩阵...

    ArcGis for IOS 有关Geometry的代码

    通过这份名为"GeometrySample"的代码示例,开发者可以学习到如何在ArcGIS for iOS环境中创建、操作和显示Geometry对象,以及如何将这些对象与地图的其他组件(如图层和查询)相结合,实现丰富的GIS功能。

    geometry.zip

    echart地图全国344区县的基础数据,百度已停止下载。...如:{"type": "FeatureCollection", "features": [{"type":"Feature","properties":{"name":"洪湖市"},"geometry":{"type":"MultiPolygon","coordinates

    计算机视觉中的多视图几何(Multiple_View_Geometry_in_Computer_Vision)

    这本书“Multiple_View_Geometry_in_Computer_Vision”是该领域的经典著作,提供了深入的理论知识和实际应用,旨在帮助读者理解和实现与多视图几何相关的算法。 多视图几何的基础是摄影几何学,它研究相机成像过程...

    EE21 Feature Collections.docx

    每个 Feature 都有一个几何对象(Geometry)和一系列属性(Properties)。 - **用途**:用于存储和管理空间数据,例如河流、道路、建筑等,并可以对其进行各种空间分析和查询操作。 #### 三、上传 Feature ...

    PyPI 官网下载 | eo-learn-geometry-0.3.1.tar.gz

    安装完成后,开发者就可以在自己的Python代码中导入eo_learn.geometry模块,利用其中的函数和类来处理几何相关的遥感数据问题。 使用eo-learn-geometry库的开发者通常需要具备一定的遥感和GIS知识,以及Python编程...

    空间数据的转换与处理

    坐标系统可以分为地理坐标系统和投影坐标系统两大类。地理坐标系统基于地球表面的经纬度表示,而投影坐标系统则是将三维地球表面上的经纬度通过数学转换为二维平面上的坐标系统。 - 当原始数据与某已知数据的投影...

    eCognition8.9面向对象分类详细步骤2.pdf

    - 形状特征选择:在“FeatureView&gt;ObjectFeatures&gt;Geometry&gt;Extent”中双击“Length/Width”,在“FeatureView&gt;ObjectFeatures&gt;Geometry&gt;Shape”中双击“Shapeindex”,将形状指数加入到“ImageObjectInformation”...

    AE创建各种类型的featureclass代码

    - 设置几何定义(Geometry Definition),这一步骤非常重要,因为它决定了 FeatureClass 中要素的几何类型(例如点、线或面)以及空间参考系统。 **代码示例**: ```vb Dim pFields As IFields = New FieldsClass() ...

    GeoJson规范.pdf

    Feature对象包含一个Geometry对象和额外的属性,而Feature Collection对象则表示一个Feature对象的列表。 Geometry对象 Geometry对象是GeoJSON对象的基本组成部分。Geometry对象可以是以下几种几何类型: * Point...

    实验5-在要素类和表中使用ArcPy数据访问模块1

    我们需要定义要素类,创建InsertCursor对象,然后创建一个新的Feature对象,填充属性值,并调用InsertCursor的insertRow()方法来插入数据。 5. 使用UpdateCursor更新行: UpdateCursor用于更新现有记录的属性。...

    ArcGIS接口详细说明.doc

    本文档详细介绍了ArcGIS接口的详细说明,主要介绍了Geometry库的处理和存储在特征类(feature classes)或图形要素(graphicalelements)中的geometry或shape。Geometry库是ArcGIS Engine的核心组件之一,用于处理和...

    基于三维关节移动趋势和几何属性的人体动作识别

    Moving Trend and Geometry (3DMTG) property is proposed for human action recognition. Specifically, a histogram of 3D moving directions between consecutive frames for each joint is constructed to ...

    android arcgis featureLayer查询

    Geometry extent = mapView.getCurrentViewpoint(ViewpointType.BOUNDING_GEOMETRY).getTargetGeometry(); GeometryQueryInfo geometryQueryInfo = new GeometryQueryInfo(extent); GeometryQueryTask ...

Global site tag (gtag.js) - Google Analytics