Microsoft Server 2008 空间存储 入门

空间数据类型有两种类型的空间数据。geometry 数据类型支持平面或欧几里得(平面球)数据。geometry 数据类型符合适用于 SQL 规范的开放地理空间联盟 (OGC) 简单特征 1.1.0 版。

另外,SQL Server 支持 geography 数据类型,该数据类型可存储诸如 GPS 纬度和经度坐标之类的椭圆体(圆球)数据。

geometry 和 geography 数据类型支持十一种空间数据对象或实例类型。但是,这些实例类型中只有七种“可实例化”;可以在数据库中创建并使用这些实例(或可对其进行实例化)。这些实例的某些属性由其父级数据类型派生而来,使其在 GeometryCollection 中区分为 Points、 LineStrings、Polygons 或多个 geometry 或 geography 实例。

下图描述了 geometry 和 geography 数据类型所基于的 geometry 层次结构。geometry 和 geography 的可实例化类型以蓝色表示。


如图所示,geometry 和 geography 数据类型的七种可实例化类型为 Point、MultiPoint、LineString、MultiLineString、Polygon、MultiPolygon 和 GeometryCollection。只要特定实例的格式正确,即使未显式定义该实例,geometry 和 geography 类型也可识别该实例。例如,如果您使用 STPointFromText() 方法显式定义了一个 Point 实例,只要方法输入的格式正确,geometry 和 geography 便将该实例识别为 Point。如果您使用 STGeomFromText() 方法定义了相同的实例,则 geometry 和 geography 数据类型都将该实例识别为 Point。

有关这些实例的详细信息,请参阅以下主题:


MultiPoint
LineString
MultiLineString
多边形
MultiPolygon
GeometryCollection
两种数据类型之间的差别

两种空间数据类型的行为经常非常相似,但在数据存储方式和操作方式上存在某些重要的差别。

空间数据类型中的度量
在平面(或平面球)系统中,均以相同的度量单位为坐标测量距离和面积。如果使用 geometry 数据类型,(2, 2) 和 (5, 6) 之间的距离为 5 个单位,与所用的单位无关。

在椭圆体(或圆球)系统中,坐标以经度和纬度的度数给定。但是,即使测量可能依据的是 geography 实例的空间引用标识符 (SRID),长度和面积的测量单位也通常为米或平方米。geography 数据类型最常见的度量单位为米。

空间数据的方向
在平面系统中,多边形的环方向并非重要因素。例如,((0, 0), (10, 0), (0, 20), (0, 0)) 描述的多边形与 ((0, 0), (0, 20), (10, 0), (0, 0)) 描述的多边形相同。SQL 规范的 OGC 简单特征未规定环顺序,并且 SQL Server 不会强制环的顺序。

在椭圆体系统中,多边形无意义,或者模糊不清,没有方向。例如,赤道周围的环是否描述了北半球或南半球?如果我们使用 geography 数据类型存储空间实例,必须指定环的方向并准确地描述实例的位置。

SQL Server 2008 在使用 geography 数据类型时具有以下限制:

每个 geography 实例必须能够容纳在单个半球的内部。任何大于半球的对象都无法存储。
使用开放地理空间联盟 (OGC) 熟知文本 (Well-Known Text, WKT) 或熟知二进制 (Well-Known Binary, WKB) 表示形式并且会产生大于一个半球的对象的任何 geography 实例都会引发一个 ArgumentException 异常。
如果方法的结果不能容纳在单个半球内部,则需要输入两个 geography 实例的 geography 数据类型方法(如 STIntersection()、STUnion()、STDifference() 和 STSymDifference())将返回 Null。如果输出超过单个半球,STBuffer() 也将返回 Null。
在地理数据类型中外环和内环并不重要
SQL 规范的 OGC 简单特征讨论了外环和内环,但此差别对 SQL Server geography 数据类型来说几乎毫无意义:多边形的任何环都可以作为外环。

Geometry:  一:几何图形实例上的OGC方法  
  1:STArea()   返回geometry的实例的总面积  返回类型:float   SqlDouble  
  2:STAsBinary()   返回几何图形实例的开放地理空间联盟 (OGC) 熟知二进制 (WKB) 表示形式。此值不包含该实例传递的任何 Z 或 M 值。  返回类型:varbinary   SqlBytes   
3: STAsText()   返回 geometry 实例的开放地理空间联盟 (OGC) 熟知文本 (WKT) 表示形式。此文本将不包含该实例传递的任何 Z(标高)或 M(度量)值。  返回类型:nvarchar SqlChars   
4: STBoundary()  返回 geometry 实例的边界。  返回类型:geometry  SqlGeometry   
5: STBuffer ( distance )     返回一个几何对象,该对象表示所有与 geometry 实例的距离小于或等于指定值的点的并集。  参数:类型为 float(在 .NET Framework 中为 double)的值,用于指定与围绕其计算缓冲区的几何图形实例的距离。  返回类型:geometry   SqlGeometry   
6:STCentroid()  返回由一个或多个多边形组成的 geometry 实例的几何中心。  返回类型:geometry   SqlGeometry   
7:STContains(other_geometry)  如果 geometry 实例完全包含另一个 geometry 实例,则返回 1。否则,返回 0。 参数:将与在其上调用 STContains() 的实例进行比较的另一个 geometry 实例。  返回类型:bit  SqlBoolean   
8:STConvexHull()  返回表示 geometry 实例的凸包的对象。  返回类型:geometry   SqlGeometry   
9:STCrosses(other_geometry)   如果 geometry 实例与另一个 geometry 实例相交,则返回 1。否则,返回 0。 参数:将与在其上调用 STCrosses() 的实例进行比较的另一个 geometry 实例。 返回类型:bit SqlBoolean
10:STDifference(other_geometry)   返回一个对象,该对象表示来自一个 geometry 实例的点,这些点在另一个 geometry 实例中不存在。 参数:将与在其上调用 STDifference() 的实例进行比较的另一个 geometry 实例。  返回类型:geometry  SqlGeometry   
11:STDimension()  返回 geometry 实例的最大维度。 返回类型:int SqlInt32  
12:STDisjoint(other_geometry)   如果一个 geometry 实例与另一个 geometry 实例在空间上不相联,则返回 1。否则,返回 0。 参数:将与在其上调用 STDisjoint() 的实例进行比较的另一个 geometry 实例。  返回类型:geometry  SqlGeometry  
13:STDistance(other_geometry)   返回一个 geometry 实例中的点与另一个 geometry 实例中的点之间的最短距离。 参数:将与在其上调用 STDistance() 的实例进行比较的另一个 geometry 实例。 返回类型:float  SqlDouble   
14:STEndPoint()  返回 geometry 实例的终点。  返回类型:geometry  SqlGeometry   
15:STEnvelope()  返回实例的最小轴对齐边界矩形。  返回类型:geometry  SqlGeometry   
16:STEquals ( other_geometry )   如果一个 geometry 实例表示的点集与另一个 geometry 实例的相同,则返回 1。否则,返回 0。  参数:将与在其上调用 STEquals () 的实例进行比较的另一个 geometry 实例。 返回类型:bit SqlBoolean  
17:STExteriorRing()  返回多边形 geometry 实例的外环。  返回类型:geometry  SqlGeometry   
18:STGeometryN(expression)   返回 geometry collection 中的指定几何图形。  参数:一个 int 表达式,其值介于 1 和 geometry collection 中的 geometry 实例 数之间。  返回类型:geometry   SqlGeometry   
19:STGeometryType ()   返回由 geometry 实例表示的开放地理空间联盟 (OGC) 类型名称。包括 Point、LineString、Polygon、GeometryCollection、MultiPoint、MultiLineString 和 MultiPolygon。  返回类型:nvarchar SqlString  
20:STInteriorRingN(expression)   返回 Polygon geometry 实例的指定内环。  参数:一个 int 表达式,其值介于 1 和 geometry 实例中的内环数之间。 返回类型:geometry  SqlGeometry   
21:STIntersection(other_geometry)  返回一个对象,该对象表示一个 geometry 实例与另一个 geometry 实例的交点。 参数:要与调用 STIntersection() 所在的实例进行比较的另一个 geometry 实例,进行比较的目的是确定这两个实例是否相交。 返回类型:geometry  SqlGeometry   
22:STIntersects(other_geometry)  如果 geometry 实例与另一个 geometry 实例相交,则返回 1。否则,返回 0。 参数:另一个 geometry 实例,将与调用 STIntersects() 所在的实例进行比较。  返回类型:bit  SqlBoolean   
23:STIsClosed()   如果给定的 geometry 实例的起点和终点相同,则返回 1。对于 geometry collection 类型,如果所包含的每个 geometry 实例都是闭合的,则返回 1。如果该实例不是闭合的,则返回 0。  返回类型:bit  SqlBoolean   
24:STIsEmpty()  如果 geometry 实例为空,则返回 1。如果 geometry 实例不为空,则返回 0。  返回类型:bit  SqlBoolean   
25:STIsRing()  如果 geometry 实例符合下列要求,则返回 1:   该实例为 LineString 实例。  该实例为闭合类型。  该实例为简单类型。   如果 LineString 实例不符合这些要求,则返回 0。  为了使 geometry 实例成为闭合且简单类型,当调用该实例时 STIsClosed() 和 STIsSimple()都必须返回 1。若要确定 geometry 的实例类型,请使用 STGeometryType()。 返回类型:bit SqlBoolean   
26:STIsSimple()   如果 geometry 实例是开放地理空间联盟 (OGC) 所定义的简单实例,则返回 1。如果 geometry 实例不是简单实例,则返回 0。  返回类型:bit SqlBoolean  
27:STIsValid()   根据 geometry 实例的开放地理空间联盟 (OGC) 类型,如果可确定该实例的格式正确,则返回 true。如果 geometry 实例格式不正确,则返回 false。  返回类型:bit SqlBoolean   
28:STLength()  返回 geometry 实例中的元素的总长度。 返回类z型:float    SqlDouble   
29:STNumGeometries()  返回构成 geometry 实例的几何图形的数目。  返回类型:int  SqlInt32   
30:STNumInteriorRing()  返回 Polygon geometry 实例的内环数。  返回类型:int  SqlInt32   
31:STNumPoints()  返回 geometry 实例的每个图形中的点数的总和。  返回类型:int SqlInt32   
32:STOverlaps(other_geometry)  如果 geometry 实例与另一个 geometry 实例重叠,则返回 1。否则,返回 0。 参数:将与在其上调用 STOverlaps() 的实例进行比较的另一个 geometry 实例。  返回类型:bit SqlBoolean   
33:STPointN(expression)   返回 geometry 实例中的指定点。  参数:一个 int 表达式,其值介于 1 和 geometry 实例中的点数之间。 返回类型:geometry  SqlGeometry   
34:STPointOnSurface()  返回一个位于 geometry 实例内部的任意点。  返回类型:geometry  SqlGeometry
几何信息和拓扑关系是地理信息系统中描述地理要素的空间位置和空间关系的不可缺少的基本信息。其中几何信息主要涉及几何目标的坐标位置、方向、角度、距离和面积等信息,它通常用解析几何的方法来分析。而空间关系信息主要涉及几何关系的“相连”、“相邻”、“包含”等信息,它通常用拓扑关系或拓扑结构的方法来分析。拓扑关系是明确定的
相等(Equals):
几何形状拓扑上相等。
脱节(Disjoint):
几何形状没有共有的点。
相交(Intersects):
几何形状至少有一个共有点(区别于脱节)
接触(Touches):
几何形状有至少一个公共的边界点,但是没有内部点。
交叉(Crosses):
几何形状共享一些但不是所有的内部点。
内含(Within):
几何形状A的线都在几何形状B内部。
包含(Contains):
几何形状B的线都在几何形状A内部(区别于内含)
重叠(Overlaps):
几何形状共享一部分但不是所有的公共点,而且相交处有他们自己相同的区域。

下面的例子介绍了 equals、disjoint、intersects 的用法

package com.mapbar.geo.jts;  
  
import org.geotools.geometry.jts.JTSFactoryFinder;  
  
import com.vividsolutions.jts.geom.Coordinate;  
import com.vividsolutions.jts.geom.Geometry;  
import com.vividsolutions.jts.geom.GeometryFactory;  
import com.vividsolutions.jts.geom.LineString;  
import com.vividsolutions.jts.geom.Point;  
import com.vividsolutions.jts.io.ParseException;  
import com.vividsolutions.jts.io.WKTReader;  
  
/**   

* Class GeometryRelated.java  

* Description 二元比较集合。二元比较以两个几何对象作为参数,返回一个Boolean类型的值,
* 来指明这两个几何对象是否具有指定的空间关系。支持的空间关系包括:
* equals、disjoint、intersects, touches, crosses, within, contains, overlaps

* Company mapbar  

* author Chenll E-mail: Chenll@mapbar.com

* Version 1.0  

* Date 2012-2-17 下午06:17:01

*/  
public class GeometryRelated {  
      
    private GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory( null );  
      
    public Point createPoint(String lon,String lat){  
        Coordinate coord = new Coordinate(Double.parseDouble(lon), Double.parseDouble(lat));  
        Point point = geometryFactory.createPoint( coord );  
        return point;  
    }  
      
    /**
     *  will return true as the two line strings define exactly the same shape.
     *  两个几何对象是否是重叠的
     * @return
     * @throws ParseException
     */  
    public boolean equalsGeo() throws ParseException{  
        WKTReader reader = new WKTReader( geometryFactory );  
        LineString geometry1 = (LineString) reader.read("LINESTRING(0 0, 2 0, 5 0)");  
        LineString geometry2 = (LineString) reader.read("LINESTRING(5 0, 0 0)");  
        // return geometry1 ==geometry2;  false  
        //check if two geometries are exactly equal; right down to the coordinate level.  
        // return geometry1.equalsExact(geometry2);   false  
        return geometry1.equals(geometry2);//true  
    }  
      
    /**
     * The geometries have no points in common
     * 几何对象没有交点(相邻)
     * @return
     * @throws ParseException
     */  
    public boolean disjointGeo() throws ParseException{  
        WKTReader reader = new WKTReader( geometryFactory );  
        LineString geometry1 = (LineString) reader.read("LINESTRING(0 0, 2 0, 5 0)");  
        LineString geometry2 = (LineString) reader.read("LINESTRING(0 1, 0 2)");  
        return geometry1.disjoint(geometry2);  
    }  
      
    /**
     * The geometries have at least one point in common.
     * 至少一个公共点(相交)
     * @return
     * @throws ParseException
     */  
    public boolean intersectsGeo() throws ParseException{  
        WKTReader reader = new WKTReader( geometryFactory );  
        LineString geometry1 = (LineString) reader.read("LINESTRING(0 0, 2 0, 5 0)");  
        LineString geometry2 = (LineString) reader.read("LINESTRING(0 0, 0 2)");  
        Geometry interPoint = geometry1.intersection(geometry2);//相交点  
        System.out.println(interPoint.toText());//输出 POINT (0 0)  
        return geometry1.intersects(geometry2);  
    }  
    /**
     * @param args
     * @throws ParseException  
     */  
    public static void main(String[] args) throws ParseException {  
        GeometryRelated gr = new GeometryRelated();  
        System.out.println(gr.equalsGeo());  
        System.out.println(gr.disjointGeo());  
        System.out.println(gr.intersectsGeo());  
    }  
  
}  

Geometry 叠加操作

缓冲区分析(Buffer)
包含所有的点在一个指定距离内的多边形和多多边形
凸壳分析(ConvexHull)
包含几何形体的所有点的最小凸壳多边形(外包多边形)
交叉分析(Intersection)
交叉操作就是多边形AB中所有共同点的集合。
联合分析(Union)
AB的联合操作就是AB所有点的集合。
差异分析(Difference)
AB形状的差异分析就是A里有B里没有的所有点的集合。
对称差异分析(SymDifference)
AB形状的对称差异分析就是位于A中或者B中但不同时在AB中的所有点的集合

在GIS中,缓冲(buffering)是一种用于计算包含在一个几何图形(Geometry)特定距离区域内所有点的的操作。在数学术语中,这被称为通过一个与缓冲区相等的圆的半径去计算几何图形的闵可夫斯基(Minkowski)总和。发现正的(positive)和负的(negative)缓冲,有时与操作的腐蚀(erosion)和膨胀(dilation)有关。在CAD/CAM,缓冲曲线被称为偏移曲线(offset curves)。你可以使用JTS,通过Geometry buffer方法或者Bufferop类,去计算一个图形的缓冲区。缓冲操作所输入的Geometry可以是任何类别(包括任意的Geometry集合)。缓冲操作的结果通常是一种区域类型(area type)(多边形或者多多边形)。结果也可能为空[例如,一条线(linestring)的负缓冲。]

rcSDE 地理数据库支持使用 Microsoft 的几何类型和地理类型存储矢量数据。SQL Server 2008 中提供这些类型,因此无需单独安装即可使用。这个与比较繁杂的Oracle的SQL操作引用St_shapelib.dll来说就显得非常方便了。
Microsoft 几何类型(Geometry)与现有 GIS 空间数据类型相似:使用任意平面(如已定义的投影)内的坐标。
Microsoft 地理类型(Geometry)用于旋转椭球体上的数据,该数据与纬度和经度坐标一同存储。
geometry 和 geography 数据类型支持十一种空间数据对象或实例类型。但是,这些实例类型中只有七种“可实例化”;可以在数据库中创建并使用这些实例(或可对其进行实例化)。这些实例的某些属性由其父级数据类型派生而来,使其在 GeometryCollection 中区分为 Points、 LineStrings、Polygons 或多个 geometry 或 geography 实例。

如图所示,geometry 和 geography 数据类型的七种可实例化类型为 Point、MultiPoint、LineString、MultiLineString、Polygon、MultiPolygon 和GeometryCollection。只要特定实例的格式正确,即使未显式定义该实例,geometry 和 geography 类型也可识别该实例。例如,如果您使用STPointFromText() 方法显式定义了一个 Point 实例,只要方法输入的格式正确,geometry 和 geography 便将该实例识别为 Point。如果您使用STGeomFromText() 方法定义了相同的实例,则 geometry 和 geography 数据类型都将该实例识别为 Point。
怎么使用
默认情况下,SQL Server 中的 ArcSDE 地理数据库使用 ArcSDE 压缩二进制类型,因此如果您要使用 Microsoft 几何或地理类型进行存储,必须
(1) 将 SDE_dbtune 表中 DEFAULTS 配置关键字下的 GEOMETRY_STORAGE 参数更改为 GEOMETRY 或 GEOGRAPHY
(2) 指定可在创建要素类时指定 GEOMETRY 或 GEOGRAPHY 的 GEOMETRY_STORAGE 参数的配置关键字。
如果多数用户在多数时候都使用几何或地理类型存储数据,则只应更改 DEFAULTS 关键字下的 GEOMETRY_STORAGE 参数。如果只有部分数据将以几何或地理类型进行存储,则应在创建要素类时指定一个单独的关键字。为您提供了两个关键字:GEOMETRY 和 GEOGRAPHY,也可以创建自己的自定义关键字。
用户在创建要素类或者导入要素类的过程中可以选择以上关键字,那么这些数据就已MS的几何或者地理类型进程存储了,那么用户也就可以使用SQL对数据进行操作了。
操作步骤
因为Geometry和Geogrphy基本类似,那么本文就已Geometry存储来演示一下怎么在ArcSDE的SQL Server使用SQL对空间数据进行操作
创建表

[c-sharp] view plaincopyprint?
//如果是Geogrphy存储就替换一下即可  
CREATE TABLE SpatialTable1  
( id int IDENTITY (1,1),  
GeomCol1 geometry,  
GeomCol2 AS GeomCol1.STAsText() );  
GO  

使用ArcSDE命令进行注册

[c-sharp] view plaincopyprint?
C:/Users/gis>sdelayer -o register -l SpatialTable1,GeomCol1 -e a -t GEOMETRY -u sde -p sde -i esri_sdesql  
ArcSDE 10.0 for SQL Server Build 775 Fri Sep 17 11:45:27 2010  
Layer Administration Utility  
-----------------------------------------------------  
Successfully Created Layer.  

插入数据

[c-sharp] view plaincopyprint?
INSERT INTO SpatialTable1 (GeomCol1,objectid)  
VALUES (geometry::STGeomFromText('POLYGON ((0 0, 0 150, 150 150, 150 0, 0 0))', 0),1);  
GO  
INSERT INTO SpatialTable1 (GeomCol1,objectid)  
VALUES (geometry::STGeomFromText('POLYGON ((0 0, 0 75, 75 75, 75 0, 0 0))', 0),1);  
GO  
INSERT INTO SpatialTable1 (GeomCol1,objectid)  
VALUES (geometry::STGeomFromText('POLYGON ((100 100, 300 100, 300 300, 100 300, 100 100))', 0),3);  
GO  


使用空间关系操作

[c-sharp] view plaincopyprint?
DECLARE @geom1 geometry;  
DECLARE @geom2 geometry;  
DECLARE @result geometry;  
SELECT @geom1 = GeomCol1 FROM SpatialTable1 WHERE objectid = 1;  
SELECT @geom2 = GeomCol1 FROM SpatialTable1 WHERE objectid = 3;  
SELECT @result = @geom1.STIntersection(@geom2);  
SELECT @result.STAsText();  


微软为我们提供了丰富的空间关系操作符
[c-sharp] view plaincopyprint?
Ø 确定两个实例是否包含相同的点集STEquals  
Ø 确定两个实例是否不相接STDisjoint  
Ø 确定两个实例是否相交STIntersects  
Ø 确定两个实例是否接触STTouches  
Ø 确定两个实例是否重叠STOverlaps  
Ø 确定两个实例是否交叉STCrosses  
Ø 确定某个实例是否在另一个实例内部STWithin  
Ø 确定某个实例是否包含另一个实例STContains  
Ø 确定某个实例是否与另一个实例重叠STOverlaps  
Ø 确定两个实例是否存在空间关系STRelate  
Ø 确定两个几何图形中的点之间的最短距离STDistance  


大家可能都知道Oracle的一些关系操作符,有些走空间索引,有些不走空间索引,那么我们在使用这些关系操作符时一定要使用走空间索引的,那么对SQLServer来说也是一样的。
在特定条件下,空间索引支持以下面向集合的几何图形方法:STContains()、STDistance()、STEquals()、STIntersects()、STOverlaps()、STTouches() 和 STWithin()。若要使空间索引支持这些方法,必须在查询的 WHERE 或 JOIN ON 子句中使用这些方法,并且必须在采用如下常规形式的谓词中执行这些方法:
[c-sharp] view plaincopyprint?
geometry1.method_name(geometry2) comparison_operatorvalid_number  

若要返回非 NULL 结果,geometry1 和 geometry2 必须具有相同的空间引用标识符 (SRID)。否则,该方法将返回 NULL。

查询几何图形实例的属性和行为
点数

所有非空 geometry 实例都由“点”组成。这些点表示在其上绘制几何图形的面的 X 和 Y 坐标。geometry 提供许多用于查询实例的点的内置方法。
[c-sharp] view plaincopyprint?
Ø 返回构成实例的点数。STNumPoints(geometry 数据类型)  
Ø 返回实例中的特定点STPointN  
Ø 返回位于实例上的某个任意点STPointOnSurface  
Ø 返回实例的起始点STStartPoint  
Ø 返回实例的终点STEndpoint  
Ø 返回点实例的 X 坐标STX(geometry 数据类型)  
Ø 返回点实例的 Y 坐标STY  
Ø 返回多边形实例的几何中心点STCentroid  

维度

非空 geometry 实例可以为零维、一维或二维。零维 geometries(例如 Point 和 MultiPoint)没有长度或面积。一维对象(例如 LineString 和 MultiLineString)具有长度。二维实例(例如 Polygon 和 MultiPolygon)具有面积和长度。空实例将报告为 -1 维,并且GeometryCollection 将根据其内容类型报告一个面积。
[c-sharp] view plaincopyprint?
Ø 返回实例的维度STDimension  
Ø 返回实例的长度STLength  
Ø 返回实例的面积STArea  

闭合

“闭合的”geometry 实例是指起始点和终点相同的图形。Polygon 实例是闭合的。Point 实例不是闭合的。
环是一个简单、闭合的 LineString 实例。
[c-sharp] view plaincopyprint?
Ø 确定实例是否闭合STIsClosed  
Ø 确定实例是否为环STIsRing  
Ø 返回多边形实例的外环STExteriorRing  
Ø 返回多边形的内环数STNumInteriorRing  
Ø 返回多边形的指定内环STInteriorRingN  

空间引用标识符 (SRID)

空间引用标识符 (SRID) 是指定 geometry 实例所在的坐标系的标识符。两个拥有不同 SRID 的实例是不可比的。
[c-sharp] view plaincopyprint?
Ø 设置或返回实例的 SRIDSTSrid  
 

 

转载于:https://my.oschina.net/discussjava/blog/1377636

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值