📄 shapefiledatastorefactory.java
字号:
isCreateSpatialIndex = Boolean.TRUE;
}
if (dbfCharset == null) {
assert (true);
// this should not happen as Charset.forName("ISO-8859-1") was used
// as the param default?
dbfCharset = Charset.forName("ISO-8859-1");
}
if (isMemoryMapped == null) {
assert (true);
// this should not happen as false was the default
isMemoryMapped = Boolean.FALSE;
}
ShpFiles shpFiles = new ShpFiles(url);
boolean isLocal = shpFiles.isLocal();
if (!isLocal || shpFiles.exists(ShpFileType.SHP)) {
LOGGER.warning("File already exists: "
+ shpFiles.get(ShpFileType.SHP));
}
boolean useMemoryMappedBuffer = isLocal
&& isMemoryMapped.booleanValue();
boolean createIndex = isCreateSpatialIndex.booleanValue() && isLocal;
try {
if (createIndex) {
return new IndexedShapefileDataStore(url, namespace,
useMemoryMappedBuffer, true, IndexType.QIX, dbfCharset);
} else {
return new ShapefileDataStore(url, namespace,
useMemoryMappedBuffer, dbfCharset);
}
} catch (MalformedURLException mue) {
throw new DataSourceException(
"Url for shapefile malformed: " + url, mue);
}
}
/**
* Will create the correct implementation of ShapefileDataStore for the
* provided parameters.
*
* @param params
* Map of parameters
* @throws IOException
* If the specified shapefle could not be accessed
* @throws UnsupportedOperationException
*/
DataStore createDataStoreInstance(Map params) throws IOException {
URL url = (URL) URLP.lookUp(params);
Boolean isMemoryMapped = (Boolean) MEMORY_MAPPED.lookUp(params);
URI namespace = (URI) NAMESPACEP.lookUp(params);
Charset dbfCharset = (Charset) DBFCHARSET.lookUp(params);
Boolean isCreateSpatialIndex = (Boolean) CREATE_SPATIAL_INDEX
.lookUp(params);
if (isCreateSpatialIndex == null) {
// should not be needed as default is TRUE
isCreateSpatialIndex = Boolean.TRUE;
}
if (dbfCharset == null) {
// this should not happen as Charset.forName("ISO-8859-1") was used
// as the param default?
dbfCharset = Charset.forName("ISO-8859-1");
}
if (isMemoryMapped == null) {
isMemoryMapped = Boolean.FALSE;
}
ShpFiles shpFiles = new ShpFiles(url);
boolean isLocal = shpFiles.isLocal();
if (isLocal && !shpFiles.exists(ShpFileType.SHP)) {
throw new FileNotFoundException("Shapefile not found:"
+ shpFiles.get(ShpFileType.SHP));
}
boolean useMemoryMappedBuffer = isLocal
&& shpFiles.exists(ShpFileType.SHP)
&& isMemoryMapped.booleanValue();
boolean createIndex = isCreateSpatialIndex.booleanValue() && isLocal;
IndexType treeIndex = IndexType.NONE;
if (isLocal) {
if (createIndex) {
treeIndex = IndexType.QIX; // default
} else {
// lets check and see if any index file is avaialble
if (shpFiles.exists(ShpFileType.QIX)) {
treeIndex = IndexType.QIX;
}
// else if (shpFiles.exists(ShpFileType.GRX)) {
// treeIndex = IndexType.GRX;
// }
}
}
try {
if (createIndex) {
return new IndexedShapefileDataStore(url, namespace,
useMemoryMappedBuffer, createIndex, IndexType.QIX,
dbfCharset);
} else if (treeIndex != IndexType.NONE) {
return new IndexedShapefileDataStore(url, namespace,
useMemoryMappedBuffer, false, treeIndex, dbfCharset);
} else {
return new ShapefileDataStore(url, namespace,
useMemoryMappedBuffer, dbfCharset);
}
} catch (MalformedURLException mue) {
throw new DataSourceException(
"Url for shapefile malformed: " + url, mue);
}
}
public String getDisplayName() {
return "Shapefile";
}
/**
* Describes the type of data the datastore returned by this factory works
* with.
*
* @return String a human readable description of the type of restore
* supported by this datastore.
*/
public String getDescription() {
return "ESRI(tm) Shapefiles (*.shp)";
}
// public DataSourceMetadataEnity createMetadata( Map params )
// throws IOException {
//
// URL url = (URL) URLP.lookUp(params);
// Boolean mm = (Boolean) MEMORY_MAPPED.lookUp(params);
//
// String server;
// String name;
// if( url.getProtocol().equals("file")){
// server = "localhost";
// name = url.getPath();
// }
// else {
// server = url.getHost()+":"+url.getPort();
// name = url.getFile();
// }
// return new DataSourceMetadataEnity( server, name, "Shapefile access for
// "+url );
// }
/**
* Test to see if this datastore is available, if it has all the appropriate
* libraries to construct a datastore.
*
* This datastore just checks for the ShapefileDataStore,
* IndexedShapefileDataStore and Geometry implementations.
*
* @return <tt>true</tt> if and only if this factory is available to
* create DataStores.
*/
public boolean isAvailable() {
try {
ShapefileDataStore.class.getName();
IndexedShapefileDataStore.class.getName();
Geometry.class.getName();
} catch (Exception e) {
return false;
}
return true;
}
/**
* Describe parameters.
*
*
* @see org.geotools.data.DataStoreFactorySpi#getParametersInfo()
*/
public Param[] getParametersInfo() {
return new Param[] { URLP, NAMESPACEP, CREATE_SPATIAL_INDEX,
DBFCHARSET, MEMORY_MAPPED };
}
/**
* @see org.geotools.data.dir.FileDataStoreFactorySpi#getFileExtensions()
*/
public String[] getFileExtensions() {
return new String[] { ".shp", };
}
/**
* @see org.geotools.data.dir.FileDataStoreFactorySpi#canProcess(java.net.URL)
*/
public boolean canProcess(URL f) {
return f.getFile().toUpperCase().endsWith("SHP");
}
/**
* We may need to create a new datastore if the provided file does not
* exist.
*
* @see org.geotools.data.dir.FileDataStoreFactorySpi#createDataStore(java.net.URL)
*/
public DataStore createDataStore(URL url) throws IOException {
Map params = new HashMap();
params.put(URLP.key, url);
boolean isLocal = url.getProtocol().equalsIgnoreCase("file");
if (isLocal && !(new File(url.getFile()).exists())) {
return createNewDataStore(params);
} else {
return createDataStore(params);
}
}
/**
* @see org.geotools.data.dir.FileDataStoreFactorySpi#createDataStore(java.net.URL)
*/
public DataStore createDataStore(URL url, boolean memorymapped)
throws IOException {
Map params = new HashMap();
params.put(URLP.key, url);
params.put(MEMORY_MAPPED.key, new Boolean(memorymapped));
return createDataStore(params);
}
/**
* @see org.geotools.data.dir.FileDataStoreFactorySpi#getTypeName(java.net.URL)
*/
public String getTypeName(URL url) throws IOException {
DataStore ds = createDataStore(url);
String[] names = ds.getTypeNames(); // should be exactly one
return ((names == null || names.length == 0) ? null : names[0]);
}
/**
* Returns the implementation hints. The default implementation returns an
* empty map.
* <p>
* When we have FeatureFactory, GeometryFactory and so on hooked up this map
* will return Hints we paid attention too when we were constructed.
*
* @return An empty map.
*/
public Map getImplementationHints() {
return Collections.EMPTY_MAP;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -