Làm cách nào tôi có thể chuyển đổi tệp excel với các cột x, y thành shapefile?


26

Làm cách nào tôi có thể chuyển đổi tệp excel với các cột x, y thành shapefile điểm?

Có một số yêu cầu tùy chọn ngoài việc tạo một shapefile chính xác:

  1. Các loại cột (theo chỉ định định dạng của Excel) nên được giữ lại (đặc biệt là các loại ngày)
  2. Tên cột nên được lấy từ tiêu đề
  3. Tôi sẽ thích để làm điều này từ dòng lệnh
  4. Nếu tôi có thể bao gồm các tham chiếu không gian không đồng nhất cho các điểm trong cột thứ ba, tôi sẽ rất vui :)

Câu trả lời:


24

Tôi khuyên bạn nên sử dụng OGR / GDAL , một phần của thư viện GDAL . OGR hỗ trợ định dạng ảo cho phép đặc tả thông qua tệp XML. Nếu bạn chuyển đổi bảng tính Excel của mình thành CSV, bạn có thể tạo VRT để truy cập dữ liệu.

Giả sử bạn có một cái gì đó như thế này example.csv:

Lat,Long,Year,Name
34.0,-120.0,2010-05-01,Off Santa Rosa Island

Bạn có thể tạo VRT example.vrtnhư sau:

<OGRVRTDataSource>
    <OGRVRTLayer name="example">
        <SrcDataSource>example.csv</SrcDataSource>
        <GeometryType>wkbPoint</GeometryType>
        <LayerSRS>WGS84</LayerSRS>
        <GeometryField encoding="PointFromColumns" x="Long" y="Lat"/>
    </OGRVRTLayer>
</OGRVRTDataSource>

Bắt đầu trong GDAL 1.7, bạn có thể chỉ định thêm các kiểu dữ liệu của các trường thuộc tính bằng cách sử dụng <Field>phần tử bên trong <OGRVRTLayer>, như vậy:

    <Field name="date" src="Year" type="Date" />

Hãy nhớ rằng shapefiles lưu trữ các thuộc tính ở định dạng DBASE IV có độ linh hoạt thấp hơn trong các loại dữ liệu so với Excel. Khi bạn đã chỉ định tệp VRT của mình, bạn có thể sử dụng chuỗi công cụ OGR thông thường để chuyển đổi dữ liệu thành Shapefile:

ogr2ogr -f "ESRI Shapefile" example.shp example.vrt

Thật không may, # 4 là không thể - đặc tả shapefile cho phép một phép chiếu duy nhất (có thể xem ở đây example.prjsau bước cuối cùng).


Mặt trái duy nhất của điều này là tôi phải tìm ra kiểu dữ liệu của các cột theo chương trình để viết <Field>thẻ. Tôi đoán tôi sẽ tự mình tìm ra cái đó :)
đánh dấu

Đúng. Nếu bạn muốn một giải pháp tự động và có quyền truy cập vào ArcGIS, bạn có thể thực hiện việc này bằng công cụ Thêm XY Tọa độ tinyurl.com/38jm55k , thay vào đó sẽ thực hiện bước đó cho bạn.
scw

Một cân nhắc quan trọng là đưa tệp Excel của bạn thành định dạng phù hợp với shapefile ESRI trước - có những hạn chế về tên cột, độ dài của tên và nếu bạn đang sử dụng công cụ Thêm XY theo cách ESRI tự động hóa loại trường có thể gây ra các vấn đề. webhelp.esri.com/arcgisdesktop/9.2/ Cách
spg

3
Dịch vụ trực tuyến để giúp xây dựng tệp vrt được định dạng chính xác: vrtbuilder.appspot.com
matt wilkie

9

Bạn có thể sử dụng plugin Văn bản được phân tách đi kèm với QGIS (http://qgis.org ) để tải tệp văn bản và sau đó lưu tệp dưới dạng shapefile.


Tôi thường bị quấy rầy bởi lỗi trình phân tích cú pháp khi sử dụng công cụ này. Có lời khuyên nào không?
đánh dấu

1
Bạn có ví dụ cụ thể?
gsherman

@fmark - Tôi cũng gặp các lỗi này và thường là do MS Excel xử lý csv
dassouki

6

Mặc dù không phải từ dòng lệnh, bạn có thể làm điều này trong Ứng dụng ArcGIS. Kể từ 9.3.1, chỉ cần thêm XLS trực tiếp vào ArcMap. Tạo Lớp sự kiện XY từ XLS (nghĩa là chọn Cột X, Y và đặt tham chiếu không gian của bạn) Sau đó xuất Lớp sự kiện XY này sang .shp mới Điều này có thể dễ dàng được tự động hóa với tập lệnh python / VBA đơn giản hoặc mô hình trong trình tạo mô hình . Rất vui được giúp đỡ về quy trình làm việc cơ bản này nếu bạn cần thêm thông tin.


1
Nếu bạn sử dụng Python, bạn có thể chạy một công cụ xử lý địa lý từ dòng lệnh.
jswise

6

Tôi đã tìm nhưng không thể tìm thấy trang trợ giúp về Hiển thị dữ liệu XY trong trợ giúp trên web nhưng quá trình này rất đơn giản.

  1. Sử dụng Thêm dữ liệu (hoặc kéo và thả từ cửa sổ Danh mục) để duyệt tìm bảng tính của bạn (trong bảng tính) và thêm nó vào bản đồ của bạn
  2. Nhấp chuột phải để chọn và sử dụng Hiển thị dữ liệu XY để thêm lớp sự kiện
  3. Nhấp chuột phải vào lớp sự kiện vừa tạo và sử dụng Dữ liệu | Xuất dữ liệu để tạo tệp shapefile

Bạn chỉ cần cấp giấy phép ArcView (Basic) của ArcGIS (for) Desktop để làm điều này.


Tôi có cần làm gì với các cột trên cùng không phải là một phần của dữ liệu không?
Zoran

Hai cột nào không phải là một phần của dữ liệu của bạn? Quy trình tôi mô tả nên sử dụng bất kỳ cột dài / lat nào bạn chọn để tạo hình học điểm và sau đó, tôi nghĩ, lưu trữ phần còn lại làm thuộc tính của chúng. Điều tốt nhất là thử nó và nếu kết quả không như mong đợi, thì hãy mô tả quan sát của bạn so với dự kiến.
PolyGeo

Hãy nghĩ rằng tôi đã đọc sai từ trên xuống cho hai - và giả sử bạn có nghĩa là hàng trên cùng (của các tiêu đề). Họ chỉ nên trở thành tên trường sau Thêm dữ liệu.
PolyGeo

Không chắc đây có phải là trường hợp không, nhưng khoảng trắng trong tên tiêu đề trong tệp Excel đã từng là vấn đề đau đầu thực sự đối với Thêm XY.
Chad Cooper

1
Tải các tệp Excel trực tiếp vào ArcGIS hoạt động rất tốt - ngoại trừ khi không! Những điều cần theo dõi: ngày xáo trộn, số bị cắt ngắn. Bước xử lý sự cố đầu tiên là luôn xuất sang CSV với tất cả các cột được xác định là văn bản và tải thay vào đó để thấy sự kiên trì của sự cố. Mà hãy tránh sang một bên. Hiển thị dưới dạng X / Y hoạt động rất tốt.
matt wilkie

4

Luôn luôn có những lựa chọn mạo hiểm. Bạn có thể tự viết tập tin hình dạng. ESRI xuất bản thông số kỹ thuật cho shapefiles, bạn có thể đọc ở đây:

http://www.esri.com/l Library / whitepapers / pdfs / shapefile.pdf

Bạn cũng cần phải ghi một tệp DBF. Bạn có thể đọc về định dạng ở đây:

http://www.clicketyclick.dk/database/xbase/format/dbf.html#DBF_STRVEL

Điều này chắc chắn là quá mức cần thiết, nhưng nó sẽ cung cấp cho bạn lợi thế của việc kiểm soát toàn bộ quá trình.


Tôi thực sự có xu hướng theo cách đó - Tôi sẽ sử dụng OGR thay vì viết trực tiếp shapefile!
đánh dấu

2
Excel có thể có thể viết DBF trực tiếp, mặc dù tôi đã có các mức độ thành công khác nhau khi sử dụng các DBF đó làm thành phần DBF của một shapefile.
đường

Excel không ghi các tệp dbf.
dùng49584

3

Cá nhân tôi thích sử dụng FME từ Phần mềm an toàn (http://www.safe.com), điều này không chỉ cho phép tôi vẽ các điểm từ các giá trị XY, mà còn cho phép tôi linh hoạt chuyển đổi tọa độ từ hình chiếu này sang hình chiếu khác trước khi vẽ, chỉ định loại dấu phân cách, dòng bắt đầu (trong trường hợp tệp văn bản có thông tin tiêu đề), đính kèm các thuộc tính trong trường hợp tệp văn bản có thông tin X, Y, Thuộc tính cho dữ liệu điểm. Trong trường hợp bạn muốn trực quan hóa dữ liệu này trong Google Earth, bạn có thể viết chúng sang định dạng KML đồng thời chỉ định kiểu điểm KML. ~ SRG


2

Nếu bạn muốn thực hiện một số xử lý khác trên dữ liệu x, y, bạn có thể tải dữ liệu vào postgres, sử dụng geomfromtext với phép nối để tạo kiểu dữ liệu hình học và sau đó sử dụng pssql2shp để xuất thành hình. Cách tiếp cận này cũng sẽ cho phép bạn giữ lại dữ liệu hệ thống tham chiếu không gian không đồng nhất trong một cột khác, sau đó bạn có thể sử dụng để chuyển đổi tất cả các điểm của mình thành một hệ thống tham chiếu chung trong db trước khi xuất thành hình. Tôi nhận ra rằng điều này bao gồm nhiều bước hơn ogr / gdal nhưng nó sẽ giúp bạn linh hoạt hơn rất nhiều.


Tôi đã sử dụng phương pháp này trong quá khứ, và nó là một phương pháp tốt. Tôi nghĩ rằng sự vấp ngã nhất quán của tôi ở đây là phát hiện các loại dữ liệu excel một cách đáng tin cậy ....
đánh dấu

1
Tôi cho rằng bạn có thể viết một cái gì đó trong excel vba để sắp xếp lại các cột của bạn trước để ngày đó, x, y luôn là 3 cột đầu tiên. Nếu không có một số loại quy ước đặt tên cột, tôi nghĩ rằng sẽ rất khó để tự động hóa hoàn toàn những gì bạn có trong đầu.
John Powell

1

Điều gì về việc tải các tệp CSV của bạn vào spatiallite và sau đó sử dụng OGR hoặc QGIS để xuất sang shapefile.

http://www.gaia-gis.it/spatialite-2.2/index.html

Bạn thậm chí có thể xuất từ ​​spatialite thành shapefile trực tiếp.

http://www.gaia-gis.it/spatialite-2.2/spatialite-2.2_tutorial.html#t3.1


Spatialite có thể nhập tệp Excel trực tiếp nếu chúng có định dạng .xls cũ (Excel 97-2003). Các tọa độ X và Y phải được chuyển đổi hình học inte với SQL sau khi nhập lần đầu.
dùng49584

Nếu bạn không phiền khi sử dụng Java, bạn có thể sử dụng dự án POI để tách các tệp excel và sau đó sử dụng GeoTools để viết shapefile mới
TheSteve0

0

Để chuyển đổi cơ bản hơn, bạn có thể sử dụng biến áp 2Dpointreplacer trong FME 2013. Bạn cần chỉ ra các cột có giá trị X và Y và sau đó FME sẽ chuyển đổi các giá trị này thành một tệp hình dạng có điểm.
Tên và loại cột có thể được đặt theo yêu cầu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.