java - 形状文件或 geojson 到数据库
问题描述
我正在尝试读取大形状文件并尝试使用 geotools 查找 lat 和 long 是否在坐标中
有没有办法将形状文件存储到数据库中?或者将存储为geojson并更快地退休以检查纬度和经度是否在坐标中?Node js 或 java 哪个更容易实现。
解决方案
最简单的方法是使用数据存储打开Shapefile(或 GeoJSON)文件,然后将要素从该存储复制到PostGIS(或其他数据库)数据存储。只需确保在您的 maven pom.xml 中包含相关模块即可。
public static void main(String[] args) throws MalformedURLException, IOException {
File inFile = new File("/home/ian/Data/states/states.shp");
Map<String, Object> outParams = new HashMap<>();
outParams.put(PostgisNGDataStoreFactory.DBTYPE.key, PostgisNGDataStoreFactory.DBTYPE.sample);
outParams.put(PostgisNGDataStoreFactory.USER.key, "ian");
outParams.put(PostgisNGDataStoreFactory.PASSWD.key, "ianian");
outParams.put(PostgisNGDataStoreFactory.HOST.key, "localhost");
outParams.put(PostgisNGDataStoreFactory.PORT.key, 5432);
outParams.put(PostgisNGDataStoreFactory.DATABASE.key, "ian");
outParams.put(PostgisNGDataStoreFactory.SCHEMA.key, "public");
// Read
DataStore inputDataStore = DataStoreFinder.getDataStore(
Collections.singletonMap("url", URLs.fileToUrl(inFile)));
String inputTypeName = inputDataStore.getTypeNames()[0];
SimpleFeatureType inputType = inputDataStore.getSchema(inputTypeName);
FeatureSource<SimpleFeatureType, SimpleFeature>
source = inputDataStore.getFeatureSource(inputTypeName);
FeatureCollection<SimpleFeatureType, SimpleFeature>
inputFeatureCollection = source.getFeatures();
DataStore newDataStore = DataStoreFinder.getDataStore(outParams);
String typeName = inputTypeName;
newDataStore.createSchema(inputType);
SimpleFeatureStore featureStore = (SimpleFeatureStore) newDataStore.getFeatureSource(typeName);
/*
* //Optional Filter block //filter String geometryPropertyName =
* inputType.getGeometryDescriptor().getLocalName();
* CoordinateReferenceSystem targetCRS =
* inputType.getGeometryDescriptor().getCoordinateReferenceSystem();
*
* double x1 = 11.5; double y1 = 49.8; double x2 = 12.0; double y2 = 50.1;
*
* ReferencedEnvelope bbox = new ReferencedEnvelope(x1, y1, x2, y2,
* targetCRS); FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2();
* Filter filter = ff.bbox(ff.property(geometryPropertyName), bbox);
*/
// write results
featureStore.addFeatures(source.getFeatures(/*filter*/));
//tidy up
inputDataStore.dispose();
newDataStore.dispose();
newDataStore.createSchema(inputType);
String typeName1 = newDataStore.getTypeNames()[0];
SimpleFeatureStore featureStore1 = (SimpleFeatureStore) newDataStore.getFeatureSource(typeName1);
featureStore1.addFeatures(inputFeatureCollection);
inputDataStore.dispose();
newDataStore.dispose();
}
推荐阅读
- python-3.x - Windows 中的 Tthis 代码
- python - How to flatten a Pandas dataframe json field that sometimes contains a list and sometimes a value
- visual-studio - 项目 * 需要部署才能启动
- excel - 将数据从一个工作表复制到另一个工作簿,但出现一些超出范围的错误
- nasm - 获取 VBE 信息
- python-3.x - 操作 sympy 表达式树
- sql - 遇到异常oracle PLSQL时程序的执行流程
- python - 如何将 numpy uint8 转换为 Python 中的默认 int 类型?
- vba - 使用变量过滤列表框的问题
- javascript - 如何在下一次迭代之前在 JavaScript 循环中添加延迟?