Vượt qua giới hạn 10 ký tự của tên trường trong shapefiles?


42

Tôi đang xuất hình học với các thuộc tính văn bản đính kèm từ cơ sở dữ liệu oracle sang định dạng shapefile esri (.shp) với thư viện Java và Geotools.

Các cột thuộc tính trong cơ sở dữ liệu của chúng tôi có tên có hơn 10 ký tự và Geotools buộc phải cắt bớt chúng. Tôi hiểu rằng đó là do đặc tả tệp .shp hoặc .dbf.

Tôi có thể giải quyết vấn đề này bằng cách tạo một số tệp txt đơn giản với "shrtname" = "Tên đầy đủ và dài", nhưng rõ ràng nó sẽ không được hiểu và nhập bởi bất kỳ phần mềm nào khác ngoài chúng tôi.

Có cách chính thức nào để thực hiện ánh xạ từ tên trường ngắn sang tên toàn văn dài không?

Ví dụ: tệp xml bên cạnh tất cả các tệp .shp .dbf .shx khác.

Câu trả lời:


53

Xin lỗi, câu trả lời là không. Bạn phải triển khai trình ánh xạ trường của riêng bạn và chỉ phần mềm sử dụng trình ánh xạ của bạn mới hiểu được. Bạn có thể sử dụng các định dạng khác không có giới hạn này (ví dụ: tệp geodatabase, spatialite, v.v.).


Một số lời khuyên về cách giải quyết từ kinh nghiệm cá nhân.

Khi mọi người chọn shapefiles (và nhấn mạnh vào chúng) làm định dạng chính của chúng, nó thường được chọn cho khả năng tương tác - hãy nghĩ về nó như tuân thủ một thông số kỹ thuật. Nếu bạn chọn cuộn trình ánh xạ trường của riêng mình, về cơ bản bạn đang làm điều ngược lại - vì bạn đang làm những việc bên ngoài thông số kỹ thuật - bạn đã tạo ra "thông số mở rộng" của mình.

Tôi đã làm điều này trong quá khứ? Đúng. Và nó chắc chắn luôn biến thành một nỗi đau hơn là thực sự giải quyết một vấn đề bởi vì mỗi khi bạn cố gắng mở các shapefile thành bất cứ thứ gì khác có thể đọc / ghi các shapefile, bạn sẽ kết thúc với một bảng với cả một trường khó hiểu .

Tại thời điểm đó, tôi sẽ hỏi bạn, tại sao bạn sử dụng shapefiles? Hoặc đưa ra một giải pháp quy trình công việc gắn với thông số shapefile và các giới hạn của nó, hoặc thay đổi định dạng tệp. Mọi thứ khác chỉ là một công thức cho đau đầu.


Thật không may, khách hàng của chúng tôi yêu cầu shapefiles: /
denu

sau đó không có lựa chọn nào khác :(
Ragi Yaser Burhum

1
Các tùy chọn khác là xung quanh công việc, một số trong đó được đề xuất dưới đây.

Tôi đã cập nhật câu trả lời của mình ở trên để giải thích tại sao công việc xung quanh là một ý tưởng tồi khi khách hàng của bạn chỉ muốn shapefiles.
Ragi Yaser Burhum

6
Là một chuyên gia tư vấn, kinh nghiệm của tôi là việc tìm cách giúp đỡ khách hàng hầu như luôn luôn thích nói "không có cách nào có thể thực hiện được". Tìm hiểu lý do tại sao họ cần shapefiles là một khởi đầu tốt và bạn có thể đồng ý về một giải pháp thay thế, nhưng điều đó không phải lúc nào cũng đúng. Ngẫu nhiên, một trong những cách tốt nhất để có ý tưởng cho cách giải quyết là đăng một thông báo trên Web với nội dung "không có lựa chọn nào khác". :-)
whuber

16

Có một cách tiêu chuẩn để giải quyết vấn đề này, mặc dù khách hàng của bạn có thể không hoàn toàn hài lòng với nó: bạn xuất hai tệp, tệp shapefile và tệp dữ liệu ở định dạng mà phần mềm của họ có thể đọc được. Shapefile chỉ có một định danh duy nhất, [Id], cho các thuộc tính. Tệp dữ liệu có một số thuộc tính: [Id] để khớp với hình dạng, [Trường] để cung cấp tên trường, [Loại] để chỉ ra loại của nó và một thuộc tính của từng loại dữ liệu có thể để lưu trữ giá trị. Mỗi trường trong tệp gốc được lưu trữ dưới dạng bản ghi trong tệp dữ liệu này.

Ví dụ: một bảng nguồn trông như thế này:

[Shape] [Id] [Name]     [Population2010]
shape1  A1   California         37253956
shape2  A2   Texas              25145561
shape3  A3   Wyoming              563626

sẽ có một tệp dữ liệu tương ứng

[Id] [Field]        [Type]  [Text]     [Integer]
A1   Name           Text    California    <Null>
A1   Population2010 Integer <Null>      37253956
A2   Name           Text    Texas         <Null>
A2   Population2010 Integer <Null>      25145561
A3   Name           Text    Wyoming       <Null>
A3   Population2010 Integer <Null>        563262

Rõ ràng là làm thế nào để sử dụng những dữ liệu này trong bất kỳ RDBMS nào và làm thế nào để chuyển đổi qua lại giữa hai định dạng.


7

Nếu khách hàng của bạn đang sử dụng ArcGIS, bạn có thể cung cấp một tập lệnh để gán các bí danh trường hàng loạt . Điều này sẽ cung cấp cho họ sự xuất hiện của tên trường dài khi họ đang sử dụng dữ liệu.

Kịch bản tương tự cũng có thể hoạt động để cung cấp bí danh trong các gói GIS khác.


4
Tất nhiên tôi rất vui mừng khi thấy một trong những câu trả lời của tôi được đánh giá cao, nhưng câu trả lời đó áp dụng cho cơ sở dữ liệu địa lý và không áp dụng cho shapefiles. Họ không thể giữ bí danh, mặc dù trong Arcgis, người ta có thể lưu tệp lớp ghi nhớ bí danh.
matt wilkie

Lưu ý, và cảm ơn đã làm rõ. Cũng lưu ý rằng các bí danh cũng có thể được lưu bằng MXD. Tôi đề nghị rằng các kịch bản nên được cung cấp cho khách hàng vì chúng sẽ phải được chạy lại bất cứ khi nào các shapefile được thêm vào bản đồ mới.

2

Cách dễ nhất để thực hiện là CHỈ lưu trữ hình học của bạn dưới dạng shapefile, để có khả năng chỉnh sửa hình học tuyệt vời tồn tại trong nhiều ứng dụng GIS, YET lưu trữ tất cả dữ liệu trường của bạn (hoặc phần lớn trong số chúng) trong sqlite dưới dạng bảng. Tham gia với họ khi cần thiết để nghiên cứu dữ liệu lĩnh vực của bạn.

NHƯNG Nếu bạn cần chỉnh sửa các bảng trong khi thực hiện các truy vấn không gian hoặc chọn các tính năng tạo hình trong QGIS, bạn sẽ cần quên [shapefiles được nối với các bảng sqlite] làm tùy chọn và thay vào đó xuất mọi thứ sang Spatialite. Tìm hiểu cách sử dụng Qspatialite và Spatialite_GUI (cả hai đều miễn phí cho nhau với nhiều tính năng còn thiếu-- bạn sẽ cần và sử dụng cả hai nếu bạn làm nhiều việc với SQLITE)

Điều quan trọng cần ghi nhớ là các bảng (được nối với shapefile) sẽ không thể chỉnh sửa cùng lúc với tham gia. Và do đó, việc di chuyển đến Spatialite sẽ là một sự thay thế tuyệt vời cho shapefiles. Nó phù hợp với tính đơn giản và tính di động của shapefiles trong khi cung cấp hầu hết các ưu điểm của cơ sở dữ liệu SQL, mà không có sự phức tạp của PostgreQuery.


-2

Khắc phục tạm thời có thể, lưu dưới dạng tệp TAB, có thể có tên cột dài tối đa 31 ký tự.


1
không chắc chắn điều này thực sự trả lời cho câu hỏi
nmtoken
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.