2017-04-27 10 views
1

GeoToolsを使用してシェイプファイルをjavaにロードし、ポイントがシェイプファイル内のポリゴンの1つに含まれているかどうかを確認しています 問題は、シェイプファイルを読み込んで前進を続ける。ここ は、これまでの私のコードです:GeoToolsを使用してシェープファイルを読み込めません

public static void main(String[] args){ 
    // create sample coordinate 
    double lon = -105.0; 
    double lat = 40.0; 
    GeometryFactory geometryFactory = new GeometryFactory(new PrecisionModel(PrecisionModel.maximumPreciseValue),8307); 
    Geometry point = geometryFactory.createPoint(new Coordinate(lon,lat)); 
    // 

    String path = System.getProperty("user.dir") + "/continent_shp/continent_shp.shp"; 
    File file = new File(path); 

    try { 
     Map<String, Serializable> connectParameters = new HashMap<String, Serializable>(); 

     // load shapefile ---- does not work !!!!!!!! 
     connectParameters.put("url", file.toURI().toURL()); 
     connectParameters.put("create spatial index", true); 
     DataStore dataStore = DataStoreFinder.getDataStore(connectParameters); 
     // 

     FeatureSource featureSource = dataStore.getFeatureSource("POLYGON"); 
     FeatureCollection collection = (FeatureCollection) featureSource.getFeatures(); 
     FeatureIterator iterator = collection.features(); 

     while (iterator.hasNext()) { 
      Feature feature = iterator.next(); 
      Geometry sourceGeometry = feature.getDefaultGeometry(); 
      boolean isContained = sourceGeometry.contains(point); 
      System.out.println(isContained); 
     } 
    } 
    catch (MalformedURLException e) {e.printStackTrace();} 
    catch (IOException e) {e.printStackTrace();} 
} 

問題は、私はシェープファイルをロードしようとした後dataStore変数がnullであるということです。ここで

は私の輸入です:

import java.io.File; 
import java.io.IOException; 
import java.io.Serializable; 
import java.net.MalformedURLException; 
import java.util.HashMap; 
import java.util.Map; 

import org.geotools.data.DataStore; 
import org.geotools.data.DataStoreFinder; 
import org.geotools.data.FeatureSource; 
import org.geotools.feature.Feature; 
import org.geotools.feature.FeatureCollection; 
import org.geotools.feature.FeatureIterator; 

import com.vividsolutions.jts.geom.Coordinate; 
import com.vividsolutions.jts.geom.Geometry; 
import com.vividsolutions.jts.geom.GeometryFactory; 
import com.vividsolutions.jts.geom.PrecisionModel; 

誰もがこの問題にいくつかの光を当てることができますか? ご協力いただければ幸いです。 ありがとうございます。

+0

は、あなたのプロジェクトの依存関係にGT-シェープファイルが含まれたのですか? –

答えて

0

最も可能性の高い問題は、パス上で使用可能なShapefile Datastoreの実装がないことです。店舗が利用可能であるかを確認するには、次の方法を試してみてください。

public Map<String, DataStoreFactorySpi> fetchAvailableDataStores() { 

     Iterator<DataStoreFactorySpi> it = DataStoreFinder.getAllDataStores(); 
     while (it.hasNext()) { 
     DataStoreFactorySpi fac = it.next(); 
     System.out.println(fac.getDisplayName()); 
     } 
    } 

間違って行くことができるもう一つは、URLへの変換ファイルで、ファイル名またはパスにスペースがある場合は特に。代わりにDataUtilities.fileToURL(file)を使用してみてください。

0

これが私の仕事:

// load shapefile ---- does not work !!!!!!!! 
    connectParameters.put("url", file.toURI().toURL()); 
    connectParameters.put("create spatial index", Boolean.TRUE); 
    ShapefileDataStoreFactory dataStoreFactory = new ShapefileDataStoreFactory(); 
    ShapefileDataStore store = (ShapefileDataStore) dataStoreFactory.createNewDataStore(connectParameters); 
    // 
関連する問題