Cách chia một dòng thành một tập hợp các điểm tương đương


11

Được sử dụng để dựa vào XTools cho việc này, nhưng trong môi trường hiện tại của tôi, tôi không có quyền truy cập vào nó.

Tôi đang cố gắng làm điều này trong ArcMap10.

Mục tiêu là chia một biểu diễn dòng của luồng thành một tập hợp các điểm có khoảng cách đều nhau để cuối cùng xác định giá trị z tại các điểm đó để tôi có thể xác định độ dốc.


Quy trình làm việc dự định của tôi là như vậy.

  1. chia luồng thành các điểm
  2. cắt các điểm với DEM bằng GME
  3. Bằng cách xác định khoảng cách giữa các điểm, tôi sẽ có thể xác định được độ dốc.
  4. Có vẻ như sẽ hợp lý khi tích hợp dữ liệu điểm trở lại các dòng tinh giản ban đầu. Không chắc chắn về bước này.

Tôi đánh giá cao bất kỳ phê bình nào về phương pháp của tôi, nhưng ưu tiên của tôi tại thời điểm này là chuyển đổi các luồng đó thành điểm.

Cảm ơn bạn!


1
Bạn có muốn khoảng cách tương ứng để đo (m) hoặc đơn giản dựa trên khoảng cách x / y phẳng không?
Kirk Kuykendall

Đối với một biện pháp Kirk.
Jacques Tardie

Câu trả lời:


6

Tôi chưa sử dụng ArcGIS 10, nhưng trong 9.3.1, bạn có thể bắt đầu phiên chỉnh sửa trên lớp dòng của mình, đánh dấu tính năng bạn muốn chia sau đó trên Thanh công cụ biên tập thả xuống, chọn tùy chọn Phân chia. Tại đây bạn có thể chỉ định khoảng cách để chia tính năng đã chọn theo. Sau đó, bạn có thể sử dụng công cụ Xuất nút trong ET GeoWizard (công cụ miễn phí) để có được một lớp điểm cho mỗi phân đoạn dòng được chia.

Bạn có thể sử dụng phép nối không gian để đưa thông tin dữ liệu điểm trở lại lớp đường. Nhấp chuột phải vào lớp dòng của bạn trong ArcMap TOC và chọn Tham gia và liên quan> Tham gia. Trong lần thả xuống đầu tiên, chọn tùy chọn "Tham gia dữ liệu từ lớp khác dựa trên vị trí không gian".


Cảm ơn tác phẩm nghệ thuật, tôi sẽ thử cái này sau hôm nay. Âm thanh rất hợp lý với tôi! Cảm ơn bạn :)
Jacques Tardie

4

Tôi không biết về một công cụ trên UI thực hiện việc này, nhưng nó có thể được thực hiện theo chương trình, thông qua giao diện IMSeg sắc3 .

protected override void OnClick()
{
    try
    {
        var fSel = ArcMap.Document.FocusMap.get_Layer(1) as IFeatureSelection;
        if (fSel.SelectionSet.Count == 0)
        {
            MessageBox.Show("choose a line feature first");
            return;
        }
        var gc = ArcMap.Document.FocusMap as IGraphicsContainer;
        IFeature feat = ((IFeatureLayer)fSel).FeatureClass.GetFeature(fSel.SelectionSet.IDs.Next());
        var pnts = GetPoints((IPolyline)feat.ShapeCopy, 2.0);
        foreach (IPoint pnt in pnts)
        {
            var elem = new MarkerElementClass() as IElement;
            elem.Geometry = pnt;
            ((IMarkerElement)elem).Symbol = new SimpleMarkerSymbolClass();
            gc.AddElement(elem, 0);
        }
        ((IActiveView)ArcMap.Document.FocusMap).PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

/// <summary>
/// Get points at evenly spaced measures along a polyline
/// </summary>
/// <param name="polyline"></param>
/// <param name="count"></param>
/// <returns></returns>
private List<IPoint> GetPoints(IPolyline polyline, double mspacing)
{
    var outList = new List<IPoint>();

    var mseg = polyline as IMSegmentation3;
    if (mseg.MMonotonic == esriMMonotonicEnum.esriMNotMonotonic)
        throw new Exception("polyline not monotonic");
    for (double m = mseg.MMin; m <= mseg.MMax; m += mspacing)
    {
        var geomcoll = mseg.GetPointsAtM(m, 0.0);
        if (geomcoll != null && geomcoll.GeometryCount > 0)
        {
            var pnt = geomcoll.get_Geometry(0) as IPoint;
            outList.Add(pnt);
        }
    }
    return outList;
}

0

Bạn có thể tạo bộ đệm ở một đầu của luồng và sau đó xác định điểm mà bộ đệm của bạn giao nhau với luồng. Sau đó, bạn có thể tiếp tục lặp lại bước này. Nó sẽ không cung cấp cho bạn khoảng cách chính xác của luồng (vì nó là đường thẳng chứ không phải độ dài luồng), nhưng nếu sau đó bạn có thể chia dòng thành các phần dựa trên các điểm này và sử dụng độ dài của các đường đó ước tính độ dốc.

Điều này có thể được viết kịch bản trong trăn nếu đó là một cách tiếp cận xứng đáng!

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.