2010-01-11 39 views
43

Tôi muốn viết chương trình trực quan hóa dữ liệu đường trong số 2009 Tiger/Line Shapefiles. Tôi muốn vẽ dữ liệu đường để hiển thị tất cả các con đường cho quận của tôi.Có ai biết thư viện trong Java có thể phân tích cú pháp ESRI Shapefile không?

Các ESRI Shapefile hoặc đơn giản là một shapefile là một không gian địa lý định dạng dữ liệu vector phổ biến cho các phần mềm hệ thống thông tin địa lý . Nó là được phát triển và điều chỉnh bởi ESRI dưới dạng (chủ yếu), đặc điểm kỹ thuật mở cho dữ liệu khả năng tương tác giữa ESRI và các sản phẩm phần mềm khác . 1 "shapefile" thường đề cập đến bộ sưu tập gồm các tệp có ".shp", ".shx", ".dbf" và các tiện ích mở rộng khác trên một tiền tố chung tên (ví dụ: "hồ. *"). Các shapefile thực tế liên quan cụ thể đến các tệp có đuôi ".shp", tuy nhiên tệp này một mình không đầy đủ để phân phối, vì các tệp hỗ trợ khác .

Có ai biết thư viện hiện tại để phân tích cú pháp và đọc dữ liệu dòng cho Shapefiles không?

+0

https://github.com/delight-im/Java-Shapefile-Parser – caw

Trả lời

8

OpenmapJava API cung cấp quyền truy cập đọc và ghi vào tệp ESRI.

+1

Lưu ý rằng mặc dù OpenMap của BBN là nguồn mở, nó sử dụng giấy phép BBN đặc biệt lạ. Nó khá dễ chấp nhận, nhưng thực tế là nó không phải là một giấy phép tiêu chuẩn có thể gây ra các vấn đề khi cố gắng kết hợp nó với các phần mềm khác (hoặc khi cố gắng để nó được chấp nhận bởi các đại bàng hợp pháp của bạn). –

+0

Bạn có thể cung cấp ví dụ về cách sử dụng API đã nói để đọc tệp ESRI không? API của OpenMap mờ đục và hoàn toàn bối rối với tôi. –

57

GeoTools sẽ làm điều đó. Có một tấn lọ và bạn không cần hầu hết trong số họ. Tuy nhiên, đọc shapefile chỉ là một vài dòng.

File file = new File("mayshapefile.shp"); 

try { 
    Map<String, String> connect = new HashMap(); 
    connect.put("url", file.toURI().toString()); 

    DataStore dataStore = DataStoreFinder.getDataStore(connect); 
    String[] typeNames = dataStore.getTypeNames(); 
    String typeName = typeNames[0]; 

    System.out.println("Reading content " + typeName); 

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


    try { 
    while (iterator.hasNext()) { 
     Feature feature = iterator.next(); 
     GeometryAttribute sourceGeometry = feature.getDefaultGeometryProperty(); 
    } 
    } finally { 
    iterator.close(); 
    } 

} catch (Throwable e) {} 
+3

nếu bạn sử dụng Maven để biên dịch chương trình, nó xử lý tất cả các lọ cho bạn. –

+1

Geotools có hướng dẫn tuyệt vời về cách bắt đầu phát triển. Đó là một ứng dụng Swing để hiển thị một bản đồ http://docs.geotools.org/latest/userguide/tutorial/quickstart/netbeans.html –

+0

Ví dụ câu trả lời này là tuyệt vời, đã lưu tôi phải đi sâu vào tài liệu API –

3

Bạn có thể thử sử dụng thư viện Java ESRI Shape File Reader. Nó nhỏ, dễ cài đặt và có API rất đơn giản. Hạn chế duy nhất là nó không đọc các tệp bắt buộc và tùy chọn khác (.shx, .dbf, v.v.) thường được chuyển bằng tệp hình dạng.

+0

Bạn có biết bất kỳ thư viện nhỏ dễ sử dụng nào khác để đọc trường hợp này.shx và .dbf? –

0

Bạn có thể trực tiếp sử dụng các công cụ GIS GUI để không cần phải thay đổi mã nguồn của GeoTools.

Tôi sử dụng QGIS thực hiện tất cả các thao tác (thậm chí nhiều hơn) so với GeoTools.

Quantum GIS - Hệ thống thông tin địa lý nguồn mở để chỉnh sửa, hợp nhất và đơn giản hóa bản đồ shapefile. Xem thêm: tạo bản đồ với nhiều lớp bằng cách sử dụng Quantum GIS.

Các vấn đề liên quan