将ESRI shapefile输入到java
我不熟悉geotools,我的java知识已经过时了。我正在尝试将许多shapefile输入java,以便计算其中所有多边形的面积,并为相应的shapefile添加一个单独的属性。我尝试使用链接中给出的代码 Does anyone know of a library in Java that can parse ESRI Shapefiles?。 但我被抛出异常
Oct 21, 2016 12:39:08 PM org.geotools.factory.FactoryRegistry scanForPlugins
WARNING: Can't load a service for category "DataStoreFactorySpi". Cause is "ServiceConfigurationError: org.geotools.data.DataStoreFactorySpi: Provider org.geotools.data.shapefile.ShapefileDataStoreFactory could not be instantiated".
java.util.ServiceConfigurationError: org.geotools.data.DataStoreFactorySpi: Provider org.geotools.data.shapefile.ShapefileDataStoreFactory could not be instantiated
at java.util.ServiceLoader.fail(ServiceLoader.java:232)
at java.util.ServiceLoader.access$100(ServiceLoader.java:185)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:384)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
at org.geotools.factory.FactoryRegistry.register(FactoryRegistry.java:826)
at org.geotools.factory.FactoryRegistry.scanForPlugins(FactoryRegistry.java:772)
at org.geotools.factory.FactoryRegistry.scanForPluginsIfNeeded(FactoryRegistry.java:805)
at org.geotools.factory.FactoryRegistry.getServiceProviders(FactoryRegistry.java:196)
at org.geotools.data.DataAccessFinder.getAvailableDataStores(DataAccessFinder.java:207)
at org.geotools.data.DataStoreFinder.getAvailableDataStores(DataStoreFinder.java:116)
at org.geotools.data.DataStoreFinder.getDataStore(DataStoreFinder.java:87)
at shapefile.ReadFile.main(ReadFile.java:24)
Caused by: java.lang.NoClassDefFoundError: org/geotools/data/directory/FileStoreFactory
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
at java.lang.Class.getConstructor0(Class.java:3075)
at java.lang.Class.newInstance(Class.java:412)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:380)
... 10 more
Caused by: java.lang.ClassNotFoundException: org.geotools.data.directory.FileStoreFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 15 more
Oct 21, 2016 12:39:08 PM org.geotools.factory.FactoryRegistry scanForPlugins
WARNING: Can't load a service for category "DataStoreFactorySpi". Cause is "ServiceConfigurationError: org.geotools.data.DataStoreFactorySpi: Provider org.geotools.data.shapefile.ShapefileDirectoryFactory could not be instantiated".
java.util.ServiceConfigurationError: org.geotools.data.DataStoreFactorySpi: Provider org.geotools.data.shapefile.ShapefileDirectoryFactory could not be instantiated
at java.util.ServiceLoader.fail(ServiceLoader.java:232)
at java.util.ServiceLoader.access$100(ServiceLoader.java:185)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:384)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
at org.geotools.factory.FactoryRegistry.register(FactoryRegistry.java:826)
at org.geotools.factory.FactoryRegistry.scanForPlugins(FactoryRegistry.java:772)
at org.geotools.factory.FactoryRegistry.scanForPluginsIfNeeded(FactoryRegistry.java:805)
at org.geotools.factory.FactoryRegistry.getServiceProviders(FactoryRegistry.java:196)
at org.geotools.data.DataAccessFinder.getAvailableDataStores(DataAccessFinder.java:207)
at org.geotools.data.DataStoreFinder.getAvailableDataStores(DataStoreFinder.java:116)
at org.geotools.data.DataStoreFinder.getDataStore(DataStoreFinder.java:87)
at shapefile.ReadFile.main(ReadFile.java:24)
Caused by: java.lang.NoClassDefFoundError: org/geotools/data/directory/FileStoreFactory
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
at java.lang.Class.getConstructor0(Class.java:3075)
at java.lang.Class.newInstance(Class.java:412)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:380)
... 10 more
Caused by: java.lang.ClassNotFoundException: org.geotools.data.directory.FileStoreFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 15 more
java.lang.NullPointerException
错误很可能发生在线路上
DataStore dataStore = DataStoreFinder.getDataStore(connect);
我如何解决它?我应该更改任何java参数吗?文件应该是全名吗
# 1 楼答案
要加载ShapeFile,可以使用以下代码:
确保路径正确
# 2 楼答案
请(至少)通过GeoTools'quickstart tutorial了解使用ShapeFile数据存储需要哪些JAR
TBH我不会尝试在不使用构建管理器的情况下构建一个简单的GeoTools项目,生命太短暂,不必担心依赖性
如果你必须独自前行,那么你需要包括以下所有罐子:
# 3 楼答案
我通过将while循环中的代码更改为以下代码来解决这个问题