Scala Can';在生成shapefile时,不要创建double类型的列

Scala Can';在生成shapefile时,不要创建double类型的列,scala,geotools,Scala,Geotools,上述代码在以下情况下失败: java.io.IOException:无法写入列值:double 我使用的是scala 2.10.4版和geotools 11.2版,我使用的是: // My type val typeBuilder = new SimpleFeatureTypeBuilder() typeBuilder.setName("line-query-seg") typeBuilder.add("value", classOf[Double]) typeBuilder.setDefaul

上述代码在以下情况下失败:

java.io.IOException:无法写入列值:double

我使用的是scala 2.10.4版和geotools 11.2版,我使用的是:

// My type
val typeBuilder = new SimpleFeatureTypeBuilder()
typeBuilder.setName("line-query-seg")
typeBuilder.add("value", classOf[Double])
typeBuilder.setDefaultGeometry("the_geom")
typeBuilder.add("the_geom", classOf[LineString])
val sft = typeBuilder.buildFeatureType()

// Trying to create a shapefile of this type
val dataStoreFactory = new ShapefileDataStoreFactory()
val shp = new File("/tmp/collection.shp")
val params = scala.collection.Map[String, Serializable]("url" -> shp.toURI.toURL,
  "create spatial index" -> true
)
val shpDS = dataStoreFactory.createNewDataStore(params.asJava).asInstanceOf[ShapefileDataStore]
shpDS.createSchema(sft)
而不是

typeBuilder.add("value", classOf[java.lang.Double])

您需要的类是java.lang.Double

我怀疑您也会遇到问题,除非您的几何列被称为_geom,并且是第一列。@iant谢谢,我后来也注意到了这一点。修正了我的代码只是为了澄清:
java.lang.Double
也是一个类,实际上
classOf[Double]
返回与java
Double
原语对应的class对象(您可以通过执行
classOf[Double]==java.lang.Double.TYPE
来检查这一点)“@AlexeyRomanov更新了我的答案,因为我对原始与阶级问题的看法是错误的
typeBuilder.add("value", classOf[Double])

classOf[java.lang.Double] // returns class java.lang.Double
classOf[Double] // returns double
java.lang.Double.TYPE // returns double