ArcGIS Desktop kullanarak satır (satıra en yakın köşe) oluşturuluyor mu?


11

ArcInfo 10 SP3 kullanıyorum.

Yardımcı program verilerimizi yeniden düzenlemek için çalışıyorum. İki yıl önce Özel Hizmet su hattını toplamaya başladık. Eski Rekor Çizimlerinden çıkarmak için hala birçoğumuz var.

WaterMain hattına bina ayak izlerimize katılacak bir çizgi oluşturmanın bir yolu olup olmadığını merak ediyordum.

Su ana hattına en yakın bina tepe noktasını başlangıç ​​noktası olarak kullanmak istiyorum.

resim açıklamasını buraya girin

Yanıtlar:


10

Bir .NET aracı geliştirmeyi gerektirmeyen bir çözüm arıyorsanız, tam olarak neyin peşinde olduğunuzu başarmak için aşağıdaki python komut dosyasını kullanabilirsiniz. Ben tam olarak aynı ihtiyacı vardı ve çözüm olarak aşağıdaki komut dosyası yazdı. 4 parametreli bir ArcCatalog aracı olarak yapılandırın veya parametreleri yorumlayın ve sabit kodlu değişkenleri açın ve doğrudan çalıştırın.

# CreateLineFromNearestVertexToFeature.py
# Author: Jeff Berry
# Description: Creates a line between the nearest vertext on source features
# to the nearest feature in target feature class.
# ---------------------------------------------------------------------------

# Import arcpy module
import arcpy
from arcpy import env

# Local variables:
# 1. SourceFC - Feature Class 
# 2. TargetFC - Feature Class
# 3. Output_gdb - Geodatabase
# 4. Output_fc - String

SourceFC = arcpy.GetParameterAsText(0)
TargetFC = arcpy.GetParameterAsText(1)
Output_gdb = arcpy.GetParameterAsText(2)
Output_fc = arcpy.GetParameterAsText(3)

## Alternatively setup hardcoded variables    
##SourceFC = "Buildings"
##TargetFC = "WaterMains"
##Output_gdb = "D:\\New File Geodatabase.gdb"
##Output_fc = "lines_output"

SourceFeaturePoints = "SrcFtrPoints"
arcpy.env.workspace = Output_gdb

# Process: Feature Vertices To Points
arcpy.FeatureVerticesToPoints_management(SourceFC, SourceFeaturePoints, "ALL")

# Process: Near
arcpy.Near_analysis(SourceFeaturePoints, TargetFC, "1000 Feet", "LOCATION", "NO_ANGLE")

# Process: Create Feature Class...
#arcpy.CreateFeatureclass_management(Output_gdb, Output_fc, "POLYLINE", "", "DISABLED", "DISABLED", "", "", "0", "0", "0")
rows = arcpy.SearchCursor(SourceFeaturePoints)

lstIDs = []

for row in rows:
    lstIDs.append(row.ORIG_FID)

uniqueOBJIDS = set(lstIDs)
newLineList = []
shapeName = arcpy.Describe(SourceFeaturePoints).shapeFieldName

for objID in uniqueOBJIDS:
    rows = arcpy.SearchCursor(SourceFeaturePoints, "\"NEAR_DIST\" = (SELECT MIN( \"NEAR_DIST\") FROM SrcFtrPoints WHERE \"ORIG_FID\"  = " + str(objID) + ")")
    for row in rows:
        arrayLine = arcpy.Array()
        ftr = row.getValue(shapeName)
        pointStart = ftr.firstPoint
        pointEnd = arcpy.Point(row.NEAR_X, row.NEAR_Y)
        arrayLine.add(pointStart)
        arrayLine.add(pointEnd)
        plyLine = arcpy.Polyline(arrayLine)
        newLineList.append(plyLine)


arcpy.CopyFeatures_management(newLineList, Output_fc)
arcpy.Delete_management(SourceFeaturePoints, "FeatureClass")

del rows
del row
del SourceFeaturePoints
del Output_fc
del Output_gdb
arcpy.ClearEnvironment("workspace")

2

IIndexQuery2 üzerinde "En YakınÖzellik" yöntemine bakın.

Her binaya en yakın su ana özelliğini elde etmek için bunu kullanabilirsiniz. Sanırım bu şekilde hangisine bu özelliğe en yakın mesafeyi bulmak için her binadaki köşeleri döndürmeniz gerekiyor, daha sonra binadan ve su alanından köşeleri kullanarak uç noktalar olarak yeni bir çoklu çizgi oluşturmalısınız. Bunu yaptığım tek zaman iki nokta özellik kullanmaktı, keşke başımın üstünden daha fazlasını sunabilirdim ..: D

IFeatureCursor pDepthCursor = pDepthSoundings.Search(null, false);
IFeatureIndex2 pFtrInd = new FeatureIndexClass();
pFtrInd.FeatureClass = pDepthSoundings.FeatureClass;
pFtrInd.FeatureCursor = pDepthCursor;
pFtrInd.Index(null, pCombinedEnvelope);
IIndexQuery2 pIndQry = pFtrInd as IIndexQuery2;

int FtdID = 0;
double dDist2Ftr = 0;
pIndQry.NearestFeature(ppoint, out FtdID, out dDist2Ftr);

IFeature pCloseFeature = pDepthSoundings.FeatureClass.GetFeature(FtdID);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.