Tìm điểm giữa của dòng bằng ArcPy?


11

Làm thế nào có thể tính điểm giữa của một đa tuyến bằng cách sử dụng khung xử lý địa lý , ví dụ như trong tập lệnh Python?

Các polyline.centroid tài sản trả về các trọng tâm đúng nếu nó nằm trong hoặc trên tính năng; mặt khác, điểm nhãn được trả lại . Trọng tâm hiếm khi nằm trên các đường không thẳng, điều này là vô ích cho mục đích của tôi.

Công cụ Feature Vertices to Points có tùy chọn điểm giữa nhưng điều này yêu cầu ArcInfo, hiện tại tôi không có.

Một lựa chọn có thể là thêm các biện pháp cho các đường dẫn và tạo ra một sự kiện tuyến đường 50% dọc theo tuyến.

Một cách giải quyết khác là sử dụng tùy chọn Tính toán hình học trong ArcMap, nhưng lý tưởng nhất là tôi cần tự động hóa quy trình này trong một tập lệnh.

Bất kỳ đề xuất tốt hơn / nhanh hơn?

Hiện tại, tôi bị giới hạn ở ArcGIS 10.0 (không có quyền truy cập vào giấy phép cấp ArcInfo).


4
Xem câu hỏi này . Cuối cùng, tôi đã sử dụng các hàm tham chiếu tuyến tính trong Shapely để xác định điểm giữa.
Mike T

1
Tôi nghĩ rằng @MikeToews có ý tưởng đúng và chỉ sử dụng các hàm tham chiếu tuyến tính trong ArcGIS chứ không phải đưa nó vào Shapely. Dường như đây là chức năng bạn muốn: Tạo lớp sự kiện tuyến - Tham chiếu tuyến tính . Bạn có thể có thể làm cho bảng sự kiện trên bay. Đây là cho 10.1, nhưng sẽ giống nhau trong 10.0.
Nhận không gian

1
Blog này dường như chứa một thuật toán có thể được chuyển đổi thành Python / ArcPy: rbrundritt.wordpress.com/2008/10/14/iêu
PolyGeo

Có ai đó đã làm nó trong javascript? Tôi đã làm nó thành công chỉ trong Arcpy. Trân trọng Ezequias
Ezequias

Nếu bạn có một câu hỏi mới, vui lòng hỏi nó bằng cách nhấp vào nút Hỏi câu hỏi . Bao gồm một liên kết đến câu hỏi này nếu nó giúp cung cấp bối cảnh. - Từ đánh giá
BERA

Câu trả lời:


22

Lớp Polyline có một phương thức mới gọi là "locationAlongLine" trong ArcGIS 10.1. Điều này sẽ trả về một đối tượng PointGeometry với chính xác một điểm ở khoảng cách xác định từ điểm bắt đầu của dòng hoặc một phần khoảng cách giữa điểm bắt đầu và điểm kết thúc . Để tìm điểm giữa, bạn chỉ cần làm positionAlongLine(0.5,True). Để tìm điểm giữa cho các dòng và thêm tọa độ của chúng vào bảng thuộc tính, bạn có thể thực hiện Máy tính trường theo câu lệnh sau:

  • !Shape!.positionAlongLine(0.5,True).firstPoint.X
  • !Shape!.positionAlongLine(0.5,True).firstPoint.Y

Lưu ý rằng bạn cần sử dụng trình phân tích cú pháp Python trong máy tính trường để làm việc này.

Nếu bạn muốn truy cập đối tượng điểm này trong Python, bạn chỉ cần làm như sau:

Input_shp = "C:\Temp\Line.shp"
Cursor = arcpy.SearchCursor(Input_shp)
for Feature in Cursor:
    Midpoint = Feature.shape.positionAlongLine(0.50,True).firstPoint
    print Midpoint.X
    print Midpoint.Y

cảm ơn, điều này có vẻ tuyệt vời Đáng lẽ tôi nên đề cập rằng hiện tại tôi chỉ giới hạn ở 10.0, vì vậy, tùy chọn Tuyến đường ở trên có thể phải đủ cho đến bây giờ
Stephen Lead

Lỗi: Hàng chứa giá trị xấu. Sử dụng arcGIS10, với Python được kiểm tra trong Model Builder, tôi đã sử dụng cùng một câu lệnh :! Shape! .PitionitionAlongLine (0.5, True) .firstPoint.X
juasmilla

1

Với giấy phép ET Geo Wizards, bạn có thể thử chức năng "Polyline to Point" với tùy chọn "Điểm giữa" và "Xóa điểm trùng lặp" (tùy chọn): http://www.ian-ko.com/ET_GeoWizards/UserGuide/convertPl2Pnt. htm

Bạn có thể triển khai ET Geo Wizards như thế này:

toolbox_ETgeowizards = arcpy.GetParameterAsText(0) # Location ET Toolbox (Type: Toolbox)
arcpy.ImportToolbox(toolbox_ETgeowizards)

...

arcpy.ET_GPPolylineToPoints(pInFeatureClass, sOutFileName, sExportOption, bRemoveDuplicates)

Để biết các biến đầu vào của hàm ET, vui lòng xem: http://www.ian-ko.com/ET_GeoWizards/UserGuide/Scripting/scripting_PolylineToPoint.htmlm

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.