geotools 代码实例

前段时间的一个项目 本来用ae完成了种种的 查询,空间分析等等功能的代码,但是不幸的是 这是一个web项目,无奈 ae各种错误,显然ae放在server端是不好使的 无奈 一咬牙一跺脚 全部换 换成geotools  看文档 看api 从零 开始算是把 原来AE实现的东西 统统改了过来 用起来 反而觉得既稳定 效率还不错哈!
以下是部分功能总结:

1、连接数据库 这里使用的postgis 链接代码如下:

private static void conn(String dbtype, String host, String port,
            String database, String userName, String password) {
        Map<String, Object> params = new HashMap<String, Object>();
        // params.put(PostgisNGDataStoreFactory.DBTYPE.key, "postgis");    // 两种代码方式
        // params.put(PostgisNGDataStoreFactory.HOST.key, "localhost");
        // params.put(PostgisNGDataStoreFactory.PORT.key, new Integer(5432));
        // params.put(PostgisNGDataStoreFactory.DATABASE.key, "postgis");
        // params.put(PostgisNGDataStoreFactory.SCHEMA.key, "public");
        // params.put(PostgisNGDataStoreFactory.USER.key, "postgres");
        // params.put(PostgisNGDataStoreFactory.PASSWD.key, "root");
        params.put(PostgisNGDataStoreFactory.DBTYPE.key, dbtype);
        params.put(PostgisNGDataStoreFactory.HOST.key, host);
        params.put(PostgisNGDataStoreFactory.PORT.key, new Integer(port));
        params.put(PostgisNGDataStoreFactory.DATABASE.key, database);
        params.put(PostgisNGDataStoreFactory.SCHEMA.key, "public");
        params.put(PostgisNGDataStoreFactory.USER.key, userName);
        params.put(PostgisNGDataStoreFactory.PASSWD.key, password);
        try {
            pgDatastore = DataStoreFinder.getDataStore(params);
            if (pgDatastore != null) {
                System.out.println("系统连接到位于:" + host + "的空间数据库" + database
                        + "成功!");
            } else {
                System.out.println("系统连接到位于:" + host + "的空间数据库" + database
                        + "失败!请检查相关参数");
            }
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("系统连接到位于:" + host + "的空间数据库" + database
                    + "失败!请检查相关参数");
        }
 
    }

调用方法为:conn("postgis", "localhost", 5432, "postgis", "postgres", "root");
2、图层的操作

2.1 查询

public static ArrayList<SimpleFeature> queryMethod(String filterStr,
            String layerName) {
        //pgDatastore为上文连接数据库获取相当于AE中的workspace
        //SimpleFeatureSource相当于AE中的featureClass
        SimpleFeatureSource featureSource =pgDatastore.getFeatureSource(layerName); 
        ArrayList<SimpleFeature> featureList = new ArrayList<SimpleFeature>();
        if(featureSource==null)
            return featureList;
        try {
            Filter filter;
            filter = CQL.toFilter(filterStr); // filterStr形式 如  name='武汉大学' or code like 'tt123%'
            SimpleFeatureCollection result = featureSource.getFeatures(filter);
 
            FeatureIterator<SimpleFeature> itertor = result.features();
            while (itertor.hasNext()) {
                SimpleFeature feature = itertor.next();
                featureList.add(feature);
            }
            itertor.close();
            return featureList;
        } catch (CQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

2.2 要素操作  对上面4.1中的 SimpleFeature操作

//获取feature的geometry
Geometry geo=(Geometry) feature.getDefaultGeometry();
//获取geometry中的坐标 这里用string的方式保存
int geoUnm = geo.getNumGeometries();  // 一个geometry可能含有n个geometry
for (int i = 0; i < geoUnm; i++) {
    Geometry singleGeo = geo.getGeometryN(i); //获取其中每一个geometry
    int pointCount = singleGeo.getNumPoints();
    Coordinate[] coords = singleGeo.getCoordinates();
    for (int j = 0; j < pointCount; j++) {
        if (j == pointCount - 1)
            sBuilder.append(coords[j].x + "," + coords[j].y);
        else {
            sBuilder.append(coords[j].x + "," + coords[j].y
                                    + ";");
        }
    }
    if (i != geoUnm - 1) {
        sBuilder.append("|");
    }
} 
//获取feature中的属性
feature.getAttribute(arg0);

2.3 拓扑查询

public static Filter getGeoFilter(FilterFactory2 ff,                //构建拓扑查询的filter
            String geometryAttributeName, Geometry refGeo,
            SpatialReltionType.TopoRelTypeEnum relType) {   //这个SpatialReltionType是我自己定义的。。。
 
        switch (relType) {
        case intersect:
            return ff.intersects(ff.property(geometryAttributeName), ff
                    .literal(refGeo));
        case contains:
            return ff.contains(ff.property(geometryAttributeName), ff
                    .literal(refGeo));
        case within:
            return ff.within(ff.property(geometryAttributeName), ff
                    .literal(refGeo));
        case cross:
            return ff.crosses(ff.property(geometryAttributeName), ff
                    .literal(refGeo));
        case overlaps:
            return ff.overlaps(ff.property(geometryAttributeName), ff
                    .literal(refGeo));
        case touches:
            return ff.touches(ff.property(geometryAttributeName), ff
                    .literal(refGeo));
        case equals:
            return ff.equals(ff.property(geometryAttributeName), ff
                    .literal(refGeo));
        case disjoint:
            return ff.disjoint(ff.property(geometryAttributeName), ff
                    .literal(refGeo));
        default:
            return null;
        }
    }
// 普通的拓扑查询
public static ArrayList<Geometry> topoQueryMethod(Geometry refGeo,
            String layerName, SpatialReltionType.TopoRelTypeEnum relType) {
        ArrayList<SimpleFeature> featurelist=new ArrayList<SimpleFeature>();
        FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(null);
        SimpleFeatureSource featureSource=pgDatastore.getFeatureSource(layerName); 
    
        SimpleFeatureType schema = featureSource.getSchema();
        String geometryAttributeName = schema.getGeometryDescriptor().getLocalName();
        Filter filter1= getGeoFilter(ff,geometryAttributeName, refGeo, relType);    //上面的方法
        SimpleFeatureCollection result=null;
        try {
            result = featureSource.getFeatures(filter1);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        if(result==null)
            return null;
        FeatureIterator<SimpleFeature> itertor = result.features();
        while (itertor.hasNext()) {
            SimpleFeature feature = itertor.next();
            featurelist.add(feature);
        }
        //这个方法是将feature转为geometry 自己定义的
        return SpatialUtil.ConverToGeoList(featurelist);  
    }
//联合属性的拓扑查询
public static ArrayList<Geometry> topoQueryMethod(Geometry refGeo,
            String queryName, String layerName,
            SpatialReltionType.TopoRelTypeEnum relType) {
        FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(null);
        ArrayList<SimpleFeature> featurelist=new ArrayList<SimpleFeature>();
        SimpleFeatureSource featureSource=pgDatastore.getFeatureSource(layerName); 
    
        SimpleFeatureType schema = featureSource.getSchema();
        String geometryAttributeName = schema.getGeometryDescriptor().getLocalName();
        Filter filter1= SpatialUtil.getGeoFilter(ff,geometryAttributeName, refGeo, relType);    
        Filter filter2=null;
        try {
            filter2=CQL.toFilter("StandName = '"+queryName+"'");
        } catch (CQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        List<Filter> match = new ArrayList<Filter>();
        match.add(filter1);
        match.add(filter2);
        Filter filter = ff.and(match);
 
        SimpleFeatureCollection result=null;
        try {
            result = featureSource.getFeatures(filter);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        if(result==null)
            return null;
        FeatureIterator<SimpleFeature> itertor = result.features();
        while (itertor.hasNext()) {
            SimpleFeature feature = itertor.next();
            featurelist.add(feature);
        }
        return SpatialUtil.ConverToGeoList(featurelist);
        
    }

3,编辑图层 

3.1 添加要素
 

  //添加一个feature到图层中 在添加前要确定构造featureType
    public static SimpleFeatureType createFeatureType(String typeName,Class type) {
        SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder();
        builder.setName(typeName);
        builder.setCRS(DefaultGeographicCRS.WGS84); // <- Coordinate reference
                                                    // system
        builder.add("the_geom", type);  //这个为地理属性字段 postgis中为 the——geom
 
        builder.add("StandName", String.class); // 这是其他属性字段 自己定义的....                            
        // build the type
        final SimpleFeatureType TYPE = builder.buildFeatureType();
 
        return TYPE;
    }
    
    //添加到图层的图层名,添加的要素空间属性和要素的某属性名
    public static boolean addFeature(String layerName,Geometry geo,String featureName){ 
        String type=geo.getGeometryType();
        Class TypeClass=null;
        if(type.toLowerCase().equals("point")){
            TypeClass=Point.class;
        }else if(type.toLowerCase().equals("polygon")){
            TypeClass=Polygon.class;
        }else if(type.toLowerCase().equals("polyline")){
            TypeClass=Polyline.class;
        }else if(type.toLowerCase().equals("multipolygon")){
            TypeClass=MultiPolygon.class;
        }
        SimpleFeatureType featureType=createFeatureType(layerName,TypeClass);
         SimpleFeatureCollection collection = FeatureCollections.newCollection();
 
        SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(featureType);
         /* Longitude (= x coord) first ! */
        GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
     
        featureBuilder.add(geo);
        featureBuilder.add(featureName);
       
        SimpleFeature feature = featureBuilder.buildFeature(null);
        collection.add(feature);
 
        FeatureSource featureSource=pgDatastore.getFeatureSource(layerName); 
        if (featureSource instanceof SimpleFeatureStore) {
            SimpleFeatureStore featureStore = (SimpleFeatureStore) featureSource;
            Transaction transaction = new DefaultTransaction("create");
            featureStore.setTransaction(transaction);
            try {
                featureStore.addFeatures(collection);
                transaction.commit();
                return true;
 
            } catch (Exception problem) {
                problem.printStackTrace();
                try {
                    transaction.rollback();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
 
            } finally {
                try {
                    transaction.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
         
        } else {
            System.out.println(layerName + " does not support read/write access");      
        }
        return false;
    }

    3.2 修改要素

   // 修改feacode为XX的要素的名字为featureName 地理方位为geo  (feacode StandName为你的属性字段自定义)
     public static boolean modifyFeature(String layerName,Geometry geo,String featureName,String FeaCode){
          FeatureSource featureSource=pgDatastore.getFeatureSource(layerName); 
            if (featureSource instanceof SimpleFeatureStore) {
                SimpleFeatureStore featureStore = (SimpleFeatureStore) featureSource;
                Transaction transaction = new DefaultTransaction("create");
                featureStore.setTransaction(transaction);
                try {
                    String filterStr="FeaCode= '"+FeaCode+"'";
                    String[] names=new String[2];
                    names[0]="StandName";
                    names[1]="the_geom";
                    Object[] values=new Object[2];
                    values[0]=featureName;
                    values[1]=geo;
                    featureStore.modifyFeatures(names, values, CQL.toFilter(filterStr));
                
                   
                    transaction.commit();
                    return true;
                } catch (Exception problem) {
                    problem.printStackTrace();
                    try {
                        transaction.rollback();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
 
                } finally {
                    try {
                        transaction.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
             
            } else {
                System.out.println(layerName + " does not support read/write access");      
            }
            return false;
    }

4 、Geometry 与 JTS

geotools 构建 geometry方法:这里转载一个别人写的比较好的 

4.1构建点

public Point createPoint(){  
        Coordinate coord = new Coordinate(109.013388, 32.715519);  
        Point point = geometryFactory.createPoint( coord );  
        return point;  
    } 
public Point createPointByWKT() throws ParseException{  
        WKTReader reader = new WKTReader( geometryFactory );  
        Point point = (Point) reader.read("POINT (109.013388 32.715519)");  
        return point;  
    } 
public MultiPoint createMulPointByWKT()throws ParseException{  
        WKTReader reader = new WKTReader( geometryFactory );  
        MultiPoint mpoint = (MultiPoint) reader.read("MULTIPOINT(109.013388 32.715519,119.32488 31.435678)");  
        return mpoint;  
    } 

4.2 构建线

public LineString createLine(){  
        Coordinate[] coords  = new Coordinate[] {new Coordinate(2, 2), new Coordinate(2, 2)};  
        LineString line = geometryFactory.createLineString(coords);  
        return line;  
    }  
 public LineString createLineByWKT() throws ParseException{  
        WKTReader reader = new WKTReader( geometryFactory );  
        LineString line = (LineString) reader.read("LINESTRING(0 0, 2 0)");  
        return line;  
    }  
public MultiLineString createMLine(){  
        Coordinate[] coords1  = new Coordinate[] {new Coordinate(2, 2), new Coordinate(2, 2)};  
        LineString line1 = geometryFactory.createLineString(coords1);  
        Coordinate[] coords2  = new Coordinate[] {new Coordinate(2, 2), new Coordinate(2, 2)};  
        LineString line2 = geometryFactory.createLineString(coords2);  
        LineString[] lineStrings = new LineString[2];  
        lineStrings[0]= line1;  
        lineStrings[1] = line2;  
        MultiLineString ms = geometryFactory.createMultiLineString(lineStrings);  
        return ms;  
    }  
public MultiLineString createMLineByWKT()throws ParseException{  
        WKTReader reader = new WKTReader( geometryFactory );  
        MultiLineString line = (MultiLineString) reader.read("MULTILINESTRING((0 0, 2 0),(1 1,2 2))");  
        return line;  
    } 

4.3 构建多边形

public Polygon createPolygonByWKT() throws ParseException{  
        WKTReader reader = new WKTReader( geometryFactory );  
        Polygon polygon = (Polygon) reader.read("POLYGON((20 10, 30 0, 40 10, 30 20, 20 10))");  
        return polygon;  
    }  
public MultiPolygon createMulPolygonByWKT() throws ParseException{  
        WKTReader reader = new WKTReader( geometryFactory );  
        MultiPolygon mpolygon = (MultiPolygon) reader.read("MULTIPOLYGON(((40 10, 30 0, 40 10, 30 20, 40 10),(30 10, 30 0, 40 10, 30 20, 30 10)))");  
        return mpolygon;  
    }  

4.4 构建geo集合

public GeometryCollection createGeoCollect() throws ParseException{  
        LineString line = createLine();  
        Polygon poly =  createPolygonByWKT();  
        Geometry g1 = geometryFactory.createGeometry(line);  
        Geometry g2 = geometryFactory.createGeometry(poly);  
        Geometry[] garray = new Geometry[]{g1,g2};  
        GeometryCollection gc = geometryFactory.createGeometryCollection(garray);  
        return gc;  
    } 

4.5 构建圆

public Polygon createCircle(double x, double y, final double RADIUS){  
        final int SIDES = 32;//圆上面的点个数  
        Coordinate coords[] = new Coordinate[SIDES+1];  
        for( int i = 0; i < SIDES; i++){  
            double angle = ((double) i / (double) SIDES) * Math.PI * 2.0;  
            double dx = Math.cos( angle ) * RADIUS;  
            double dy = Math.sin( angle ) * RADIUS;  
            coords[i] = new Coordinate( (double) x + dx, (double) y + dy );  
        }  
        coords[SIDES] = coords[0];  
        LinearRing ring = geometryFactory.createLinearRing( coords );  
        Polygon polygon = geometryFactory.createPolygon( ring, null );  
        return polygon;  
    }  

PostGIS删除表:

 SELECT DropGeometryTable ('my_schema','my_spatial_table');

如: SELECT DropGeometryTable ('public','river');

 

org.geotools org.geotools.arcsde org.geotools.arcsde.data org.geotools.arcsde.data.versioning org.geotools.arcsde.data.view org.geotools.arcsde.filter org.geotools.arcsde.gce org.geotools.arcsde.gce.band org.geotools.arcsde.gce.imageio org.geotools.arcs de.gce.producer org.geotools.arcsde.pool org.geotools.axis org.geotools.brewer.color org.geotools.coverage org.geotools.coverage.grid org.geotools.coverage.grid.io org.geotools.coverage.grid.io.imageio org.geotools.coverage.io org.geotools.coverage.processing org.geotools.coverage.processing.operation org.geotools.data org.geotools.data.collection org.geotools.data.crs org.geotools.data.db2 org.geotools.data.db2.filter org.geotools.data.dir org.geotools.data.gml org.geotools.data.gpx org.geotools.data.gpx.temporal org.geotools.data.h2 org.geotools.data.jdbc org.geotools.data.jdbc.attributeio org.geotools.data.jdbc.datasource org.geotools.data.jdbc.fidmapper org.geotools.data.jdbc.referencing org.geotools.data.memory org.geotools.data.mif org.geotools.data.mysql org.geotools.data.oracle org.geotools.data.oracle.attributeio org.geotools.data.oracle.referencing org.geotools.data.oracle.sdo org.geotools.data.ows org.geotools.data.postgis org.geotools.data.postgis.attributeio org.geotools.data.postgis.collection org.geotools.data.postgis.fidmapper org.geotools.data.postgis.referencing org.geotools.data.property org.geotools.data.shapefile org.geotools.data.shapefile.dbf org.geotools.data.shapefile.indexed org.geotools.data.shapefile.indexed.attribute org.geotools.data.shapefile.prj org.geotools.data.shapefile.shp org.geotools.data.shapefile.shp.xml org.geotools.data.store org.geotools.data.tiger org.geotools.data.view org.geotools.data.vpf org.geotools.data.vpf.exc org.geotools.data.vpf.file org.geotools.data.vpf.ifc org.geotools.data.vpf.io org.geotools.data.vpf.readers org.geotools.data.vpf.util org.geotools.data.wfs org.geotools.data.wms org.geotools.data.wms.request org.geotools.data.wms.response org.geotools.data.wms.xml org.geotools.demo org.geotools.demo.data org.geotools.demo.example org.geotools.demo.features org.geotools.demo.geometry org.geotools.demo.introduction org.geotools.demo.jts org.geotools.demo.libraryJTS org.geotools.demo.main org.geotools.demo.mappane org.geotools.demo.metadata.example org.geotools.demo.postgis org.geotools.demo.swing org.geotools.demo.swing.process org.geotools.demo.widgets org.geotools.demo.xml org.geotools.display.canvas org.geotools.display.canvas.map org.geotools.display.event org.geotools.display.geom org.geotools.display.style org.geotools.factory org.geotools.feature org.geotools.feature.collection org.geotools.feature.simple org.geotools.feature.type org.geotools.feature.visitor org.geotools.filter org.geotools.filter.capability org.geotools.filter.expression org.geotools.filter.function org.geotools.filter.function.math org.geotools.filter.identity org.geotools.filter.parser org.geotools.filter.spatial org.geotools.filter.text.cql2 org.geotools.filter.text.txt org.geotools.filter.v1_0 org.geotools.filter.v1_0.capabilities org.geotools.filter.v1_1 org.geotools.filter.v1_1.capabilities org.geotools.filter.visitor org.geotools.gce.arcgrid org.geotools.gce.geotiff org.geotools.gce.geotiff.crs_adapters org.geotools.gce.geotiff.IIOMetadataAdpaters org.geotools.gce.geotiff.IIOMetadataAdpaters.utils org.geotools.gce.geotiff.IIOMetadataAdpaters.utils.codes org.geotools.gce.gtopo30 org.geotools.gce.image org.geotools.gce.imagemosaic org.geotools.gce.imagepyramid org.geotools.geometry org.geotools.geometry.array org.geotools.geometry.coordinatesequence org.geotools.geometry.iso org.geotools.geometry.iso.aggregate org.geotools.geometry.iso.complex org.geotools.geometry.iso.coordinate org.geotools.geometry.iso.index org.geotools.geometry.iso.index.quadtree org.geotools.geometry.iso.io org.geotools.geometry.iso.io.wkt org.geotools.geometry.iso.operation org.geotools.geometry.iso.operation.overlay org.geotools.geometry.iso.operation.relate org.geotools.geometry.iso.primitive org.geotools.geometry.iso.root org.geotools.geometry.iso.topograph2D org.geotools.geometry.iso.topograph2D.index org.geotools.geometry.iso.topograph2D.util org.geotools.geometry.iso.util org.geotools.geometry.iso.util.algorithm2D org.geotools.geometry.iso.util.algorithmND org.geotools.geometry.iso.util.elem2D org.geotools.geometry.iso.util.interpolation org.geotools.geometry.iso.util.topology org.geotools.geometry.jts org.geotools.geometry.jts.coordinatesequence org.geotools.geometry.jts.spatialschema org.geotools.geometry.jts.spatialschema.geometry org.geotools.geometry.jts.spatialschema.geometry.aggregate org.geotools.geometry.jts.spatialschema.geometry.complex org.geotools.geometry.jts.spatialschema.geometry.geometry org.geotools.geometry.jts.spatialschema.geometry.primitive org.geotools.geometry.text org.geotools.gml org.geotools.gml.producer org.geotools.gml2 org.geotools.gml2.bindings org.geotools.gml3 org.geotools.gml3.bindings org.geotools.gml3.bindings.smil org.geotools.gml3.smil org.geotools.gpx org.geotools.gpx.bean org.geotools.gpx.binding org.geotools.graph.build org.geotools.graph.build.basic org.geotools.graph.build.feature org.geotools.graph.build.line org.geotools.graph.build.opt org.geotools.graph.build.polygon org.geotools.graph.io org.geotools.graph.io.standard org.geotools.graph.path org.geotools.graph.structure org.geotools.graph.structure.basic org.geotools.graph.structure.line org.geotools.graph.structure.opt org.geotools.graph.traverse org.geotools.graph.traverse.basic org.geotools.graph.traverse.standard org.geotools.graph.util org.geotools.graph.util.delaunay org.geotools.graph.util.geom org.geotools.graph.util.graph org.geotools.gui.headless org.geotools.gui.swing org.geotools.gui.swing.contexttree org.geotools.gui.swing.contexttree.column org.geotools.gui.swing.contexttree.node org.geotools.gui.swing.contexttree.popup org.geotools.gui.swing.contexttree.renderer org.geotools.gui.swing.crschooser org.geotools.gui.swing.datachooser org.geotools.gui.swing.datachooser.model org.geotools.gui.swing.demo org.geotools.gui.swing.event org.geotools.gui.swing.filter org.geotools.gui.swing.icon org.geotools.gui.swing.image org.geotools.gui.swing.map.map2d org.geotools.gui.swing.map.map2d.control org.geotools.gui.swing.map.map2d.decoration org.geotools.gui.swing.map.map2d.event org.geotools.gui.swing.map.map2d.handler org.geotools.gui.swing.map.map2d.listener org.geotools.gui.swing.map.map2d.strategy org.geotools.gui.swing.misc org.geotools.gui.swing.misc.filter org.geotools.gui.swing.misc.Render org.geotools.gui.swing.process org.geotools.gui.swing.propertyedit org.geotools.gui.swing.propertyedit.filterproperty org.geotools.gui.swing.propertyedit.model org.geotools.gui.swing.propertyedit.styleproperty org.geotools.gui.swing.referencing org.geotools.gui.swing.style org.geotools.gui.swing.style.sld org.geotools.gui.swing.table org.geotools.gui.swing.tree org.geotools.image org.geotools.image.io org.geotools.image.io.metadata org.geotools.image.io.mosaic org.geotools.image.io.netcdf org.geotools.image.io.stream org.geotools.image.io.text org.geotools.image.jai org.geotools.image.palette org.geotools.index org.geotools.index.quadtree org.geotools.index.quadtree.fs org.geotools.index.rtree org.geotools.index.rtree.cachefs org.geotools.index.rtree.database org.geotools.index.rtree.database.mysql org.geotools.index.rtree.fs org.geotools.index.rtree.memory org.geotools.io org.geotools.jdbc org.geotools.kml org.geotools.kml.bindings org.geotools.legend org.geotools.map org.geotools.map.event org.geotools.math org.geotools.measure org.geotools.metadata org.geotools.metadata.iso org.geotools.metadata.iso.citation org.geotools.metadata.iso.constraint org.geotools.metadata.iso.content org.geotools.metadata.iso.distribution org.geotools.metadata.iso.extent org.geotools.metadata.iso.identification org.geotools.metadata.iso.lineage org.geotools.metadata.iso.maintenance org.geotools.metadata.iso.quality org.geotools.metadata.iso.spatial org.geotools.metadata.sql org.geotools.nature org.geotools.openoffice org.geotools.ows org.geotools.ows.bindings org.geotools.ows.v1_1 org.geotools.parameter org.geotools.process org.geotools.process.impl org.geotools.process.literal org.geotools.referencing org.geotools.referencing.crs org.geotools.referencing.cs org.geotools.referencing.datum org.geotools.referencing.example org.geotools.referencing.factory org.geotools.referencing.factory.epsg org.geotools.referencing.factory.wms org.geotools.referencing.operation org.geotools.referencing.operation.builder org.geotools.referencing.operation.matrix org.geotools.referencing.operation.projection org.geotools.referencing.operation.transform org.geotools.referencing.piecewise org.geotools.referencing.wkt org.geotools.renderer org.geotools.renderer.i18n org.geotools.renderer.lite org.geotools.renderer.lite.gridcoverage2d org.geotools.renderer.shape org.geotools.renderer.shape.shapehandler.jts org.geotools.renderer.shape.shapehandler.simple org.geotools.renderer.style org.geotools.repository org.geotools.repository.adaptable org.geotools.repository.defaults org.geotools.repository.postgis org.geotools.repository.property org.geotools.repository.shapefile org.geotools.repository.styling org.geotools.repository.wfs org.geotools.repository.wms org.geotools.sld org.geotools.sld.bindings org.geotools.styling org.geotools.styling.visitor org.geotools.svg org.geotools.test org.geotools.text org.geotools.text.filter org.geotools.util org.geotools.util.logging org.geotools.utils org.geotools.utils.coveragetiler org.geotools.utils.imagemosaic org.geotools.utils.imageoverviews org.geotools.utils.imagepyramid org.geotools.utils.progress org.geotools.validation org.geotools.validation.attributes org.geotools.validation.dto org.geotools.validation.network org.geotools.validation.relate org.geotools.validation.spatial org.geotools.validation.xml org.geotools.wfs org.geotools.wfs.bindings org.geotools.wfs.protocol org.geotools.wfs.v_1_0_0.data org.geotools.wfs.v_1_1_0.data org.geotools.xlink org.geotools.xml org.geotools.xml.filter org.geotools.xml.gml org.geotools.xml.handlers org.geotools.xml.handlers.xsi org.geotools.xml.impl org.geotools.xml.impl.jxpath org.geotools.xml.schema org.geotools.xml.schema.impl org.geotools.xml.styling org.geotools.xml.test org.geotools.xml.transform org.geotools.xml.wfs org.geotools.xml.xLink org.geotools.xml.xsi org.geotools.xs org.geotools.xs.bindings org.geotools.xs.facets
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值