| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: nächst gelegenen Block zuweisen (2201 mal gelesen)
|
Bigggi Mitglied Bauzeichnerin
Beiträge: 178 Registriert: 14.02.2006 AutoCad Map2015
|
erstellt am: 27. Aug. 2015 14:40 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, leider bin ich gar nicht fit im Map, aber vielleicht kann mir hier ja jemand helfen. Ich habe Schweißnähte, die auf einer Trasse liegen. Nun muss ich in einer Excel-Tabelle jedem dieser Nähte den Bohrpunkt (Block „Bohrung“) zuweisen, der der Naht am nächsten liegt. Ich hoffe, ihr versteht mit der angehängten Datei was ich meine. Vielen Dank schon mal für eure Hilfe! Viele Grüße, Bigggi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RL13 Ehrenmitglied V.I.P. h.c. Dipl.-Ing. Bauwesen
Beiträge: 2373 Registriert: 23.10.2008
|
erstellt am: 27. Aug. 2015 15:17 <-- editieren / zitieren --> Unities abgeben: Nur für Bigggi
Hallo Biggi, da haste Di ja ne schöne Aufgabe an Land gezogen Lösen kann man solche Aufgaben grundsätzlich mit Pufferzonen, jetzt kommt das "aber". Die Abstände von Bohrung zur Nahtstelle variieren in Deinem Beispiel zu stark und eine Mapfunktion "finde den nächsten Bohrpunkt", wenn 2 in der Pufferzone liegen ist mir nicht bekannt. Bleibt also nur händisches Eintragen oder etwas komplizierter direkt in der Geodatenbank (bspw. Oracle oder PostgreSQL) solche Berechnungen mithilfe eines View erstellen lassen. rein geometrisch könnte man das lösen indem man Kreise (Flächen) mit einheitlich großem Durchmesser um alle Punkte erzeugt, anschließend miteinander verschneidet und die größten Verschneidungsflächen (bedeutet kleinster Abstand) einander zuordnet. ------------------ mfg Roman Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bigggi Mitglied Bauzeichnerin
Beiträge: 178 Registriert: 14.02.2006 AutoCad Map2015
|
erstellt am: 27. Aug. 2015 15:23 <-- editieren / zitieren --> Unities abgeben:
Hallo Roman, ja, einfache Fragen kann ja jeder stellen. Ich hab mir schon gedacht, dass es kompliziert ist. Das klingt für mich als absoluter Map-Einsteiger viel zu schwierig. Trotzdem vielen Dank! Viele Grüße, Bigggi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9732 Registriert: 01.12.2003 AutoCAD 2021, Civil 3D, MAP 3D, MDT, RD, Infraworks Inventor 2021, Win10Pro
|
erstellt am: 27. Aug. 2015 15:51 <-- editieren / zitieren --> Unities abgeben: Nur für Bigggi
Ich würde das auch (aus den von Roman genannten Gründen) ohne GIS Unterstützung machen sondern a) Objektfang Einfügung aktivieren und eine Polylinie über die 22 Bonrpunkte zeichnen b) anschließend (annähernd) lotrechte Hilfslinien von die Mitte zwischen 2 Bohrpunkten in Richtung der Leitung zeichnen. c) 22 Layer anlegen (Namens BS6, RKS16, KB1012 ...) d) mit Lasso oder Fenster Auswahl alle Punkte von Layer Schweißnaht, die optisch jetzt gut einem Bohrpunkt zugeordnet werden können, wählen und auf den gleichnamigen Layer verlegen (über Eigenschaftenpalette) e) Liste mit Schwweißnahtkoordinate und Bohrungsnummer über DATEWNEXTRAKT ausgeben. Aufwand max. 1h. ------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bigggi Mitglied Bauzeichnerin
Beiträge: 178 Registriert: 14.02.2006 AutoCad Map2015
|
erstellt am: 27. Aug. 2015 15:57 <-- editieren / zitieren --> Unities abgeben:
Hallo Udo, wenn es nur um die 22 Bohrpunkte gehen würde, hätte ich es vermutlich hier gar nicht reingesetzt, sondern direkt händisch gemacht. Aber ich rede von über 800 Bohrpunkten und fast 8000 Schweißnähten. Die Datei war nur ein kleiner Ausschnitt, sorry das hatte ich vorher nicht erwähnt. Da macht es glaub ich auch keinen Sinn ca. 800 Layer anzulegen. Trotzdem vielen Dank! Viele Grüße, Bigggi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RL13 Ehrenmitglied V.I.P. h.c. Dipl.-Ing. Bauwesen
Beiträge: 2373 Registriert: 23.10.2008
|
erstellt am: 27. Aug. 2015 16:36 <-- editieren / zitieren --> Unities abgeben: Nur für Bigggi
Hallo Biggi, wenn eine ca. Lösung für dich auch reicht dann versuch das mal: 1) _MAPEXPORT -> Bohrpunkte.sdf -> Filterauswahl Layer "00_IBNi_Bohrungen" -> Reiter Objektklasse Geometrie auf nur Punkte ändern und Attribute auswählen "Objektdaten" 2) das Gleiche für die Schweißnähte 3) die sdf-Dateien verbinden mit _MAPCONNECT 4) Puffer um die Bohrpunkte erstellen mit _mapfdobuffercreate Pufferzonenabstand 250m wählen -> damit ist der größte Abstand zwischen Schweißnaht und Bohrprofil max 250m und allen Schweißnähten kann zumindest ein Bohrprofil zugeordnet werden (sieht man in der Zeichnung. 5) _MapGisOverLay Quelle: "Schweißnähte"-Punkte, Überlagerung: Puffer aus 4) Typ Identität -> Ergebnis sind neue Schweißnahtpunkte welche in den Tabelleneigenschaft einen Bezug zum Bohrprofil enthalten. "aber" leider etwas willkürlich weil keine Unterscheidung erfolgt, wie ich im ersten Beitrag schon geschrieben habe. Vielleicht reicht Dir aber die Genauigkeit schon Die Verknüpfung zur Excel-Tabelle funzt dann noch so: http://ww3.cad.de/foren/ubb/Forum285/HTML/000866.shtml#000004 ------------------ mfg Roman [Diese Nachricht wurde von RL13 am 27. Aug. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9732 Registriert: 01.12.2003 AutoCAD 2021, Civil 3D, MAP 3D, MDT, RD, Infraworks Inventor 2021, Win10Pro
|
erstellt am: 27. Aug. 2015 18:44 <-- editieren / zitieren --> Unities abgeben: Nur für Bigggi
Ich glaub, für den Fall würde sich auch die Programmierung eines Makros lohnen, strukturell etwa so Code: Foreach Schweißnahtpunkt foreach Bohrpunkt ermittle Distanz zum aktuellen Schweißpunkt packe die Distanz mit Bohrpunktnummer in eine Liste ende foreach Liste nach Distanz sortieren Block auf Schweißunkt mit Attributinhalt der nächstgelegen Bohrpunktnummer platzieren ende foreach Schweißnahtpunkt
Dauer auch max. 1h ------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ingenieur Studio HOLLAUS Mitglied CAD / CAFM / GIS Beratung-Programmierung-Schulung
Beiträge: 1049 Registriert: 06.11.2008 Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks) RKV .... CAFM+mehr HMap ... Vermessung und Verkehr OoC .... Raumplanung CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)
|
erstellt am: 27. Aug. 2015 21:16 <-- editieren / zitieren --> Unities abgeben: Nur für Bigggi
Neben der Programmierung würde mir auch einfallen, beide Symbolarten in Datenbanken zu extrahieren, jeweils mit XY Werten der Positionen. Dann über SQL eine Abfrage machen, welche als Ergebnis eine Tabelle mit den jeweils geringsten Distanzen retourniert. ------------------
www.cars4fun.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bigggi Mitglied Bauzeichnerin
Beiträge: 178 Registriert: 14.02.2006 AutoCad Map2015
|
erstellt am: 28. Aug. 2015 07:40 <-- editieren / zitieren --> Unities abgeben:
Hallo, vielen Dank für all eure Antworten. Ich gebe mich gleich mal an die ca.-Lösung, die bestimmt ausreicht. Da ich - wie gesagt - total unfit in map bin, kann es sein, dass es etwas dauert und ich vielleicht auch noch Nachfragen habe. Ich melde mich wieder... Sonst müsste ich bei der Geschäftsführung mal nachfragen, ob eine Programmierung in Frage käm. Viele Grüße, Bigggi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bigggi Mitglied Bauzeichnerin
Beiträge: 178 Registriert: 14.02.2006 AutoCad Map2015
|
erstellt am: 28. Aug. 2015 10:25 <-- editieren / zitieren --> Unities abgeben:
Hallo Roman, dein Lösungsweg war ja super beschrieben! Nach dem ca. 4. Versuch hab ich es auch endlich hinbekommen. Irgendeinen Fehler hab ich zwischendurch immer gemacht, da die neuen Schweißnahtpunkte keinen Bezug zum Bohrprofil erhalten haben! Aber nun habe ich es hinbekommen. Ich glaub ich werde nun diese Datei ein bisschen händisch nachbearbeiten und dann geh ich weiter mit der Verknüpfung in Excel. Wenn ich soweit bin und (hoffentlich) alles geklappt hat, meld ich mich wieder. Ich bin jedenfalls begeistert, dass das so schon geklappt hat! Vielen Dank! Viele Grüße, Bigggi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mistfink Mitglied GISler
Beiträge: 217 Registriert: 08.06.2006 Map 3D / 2013 AIMS 2013 Win 7, 64bit
|
erstellt am: 28. Aug. 2015 14:49 <-- editieren / zitieren --> Unities abgeben: Nur für Bigggi
Hallo, mir scheint der beste Ansatz ist der von Ing Büro Hollaus mit der SQL Abfrage. Ich hab das mal probiert - leider hat es doch etwas länger gedauert als ich Anfangs dachte - hauptsächlich weil ich es mit kostenfrei verfügbaren Werkzeugen die ohne Installation auskommen durchführen wollte. Dafür habe ich SQLIte mit der Spatialite Erweiterung angewendet. Da ich mich damit kaum auskenne hab ich auch viele Fehler gemacht so dass es eben letztlich länger als nötig gedauert hat. Abfolge war grob so: - Blöcke und Schweissnähte als Punktfeature in eine SQLite exportieren - mit Spatialite GUI SQL ausführen - Ergebnis als CSV speichern - zusätzlich: CSV in SHP geladen um Ergebnis zu visuellen Kontrolle Ergebnis SHP und Layer sind beigefügt - ich hoffe, ich hab jetzt nicht die Aufgabe falsch verstanden und das Ergebnis ist auch noch korrekt. Schönes Wochenende, Robert ------------------ raumpatrouille3d.blogspot.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RL13 Ehrenmitglied V.I.P. h.c. Dipl.-Ing. Bauwesen
Beiträge: 2373 Registriert: 23.10.2008
|
erstellt am: 28. Aug. 2015 15:04 <-- editieren / zitieren --> Unities abgeben: Nur für Bigggi
Hallo Robert, darf man noch erfahren, wie du den SQL-Code zur Abfrage (View) in Spatiallite umgesetzt hast? Ich hab mal kurz bei PostGis nachgeschaut hier gibt's so ne Funktion "ST_ShortestLine" müsste ja bei Spatiallite ähnlich sein?1?
------------------ mfg Roman Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mistfink Mitglied GISler
Beiträge: 217 Registriert: 08.06.2006 Map 3D / 2013 AIMS 2013 Win 7, 64bit
|
erstellt am: 28. Aug. 2015 15:25 <-- editieren / zitieren --> Unities abgeben: Nur für Bigggi
Hallo Roman, tja, das ist gewissermassen der wunde Punkt - hier ist das SQL Statement: SELECT s1.featid as sn_id, b1.nr as bohrnummer, min(ST_Distance(s1.geom, b1.geom)) as dist, s1.geom as geom FROM b1, s1 group by s1.featid ORDER BY s1.featid ; b1 - bohrnummern s1 - schweissnähte Wunder Punkt deshalb, weil ich eigentlich nicht genau weiss wie bzw. warum diese Abfrage funktioniert. Robert ------------------ raumpatrouille3d.blogspot.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bigggi Mitglied Bauzeichnerin
Beiträge: 178 Registriert: 14.02.2006 AutoCad Map2015
|
erstellt am: 28. Aug. 2015 15:38 <-- editieren / zitieren --> Unities abgeben:
|
Bigggi Mitglied Bauzeichnerin
Beiträge: 178 Registriert: 14.02.2006 AutoCad Map2015
|
erstellt am: 28. Aug. 2015 15:58 <-- editieren / zitieren --> Unities abgeben:
Hallo Robert, ich versteh das Ergebnis ehrlich gesagt nicht so ganz. Wie bekomme ich denn den Bezug von meiner Schweißnaht zu dem Bohrpunkt? Wenn ich die erste Naht (FeatId 5) anklicke, ist dort die nächste Bohrung die BS6. In deiner Liste ist die Bohrung BS6 aber in der Nähe der Schweißnähte 353-362. Wegen der SQL-Abfrage werde ich am Montag einen Kollegen fragen, der könnte sich damit besser auskennen, dann versuche ich es mal selber mit ihm. Denn wie gesagt, ich habe euch nur einen Ausschnitt meiner Datei eingestellt, außerdem nicht die richtigen Koordinaten, obwohl das für die Bestimmung des nächst gelegenen Bohrpunktes ja zweitrangig ist, da ja die Beziehung der Punkte untereinander die gleiche bleibt. Vielen Dank für die super Unterstützung! Ich wünsche euch ein schönes Wochenende! Viele Grüße, Bigggi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RL13 Ehrenmitglied V.I.P. h.c. Dipl.-Ing. Bauwesen
Beiträge: 2373 Registriert: 23.10.2008
|
erstellt am: 31. Aug. 2015 08:43 <-- editieren / zitieren --> Unities abgeben: Nur für Bigggi
Hallo Biggi, wenn ich aus Roberts Ergebnisliste FeatID 5 = sn_id 5 anklicke, ist dort die Bohrnummer 1012 aufgeführt. Also alles korrekt. Robert hat das Ganze als View mit SQL-Abfrage (SQL = Programmiersprache für Datenbanken) direkt in einer Datenbank ausgeführt. Damit erfolgt die Analyse welche Schweißnaht zu welcher Bohrung gehört nicht mehr in MAP sondern in der Datenbank, wo es die entsprechenden Funktionen zur Auswertung gibt (ST_Distance). @Robert - Ich weiß auch nicht warum die Abfrage so funktioniert Bis dato ist mir SQL auch noch etwas suspekt. Ich kenne mich leidlich mit VBA und C++ aus, aber SQL ist für mich nicht gerade intuitiv und leicht verständlich.
------------------ mfg Roman Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bigggi Mitglied Bauzeichnerin
Beiträge: 178 Registriert: 14.02.2006 AutoCad Map2015
|
erstellt am: 31. Aug. 2015 10:57 <-- editieren / zitieren --> Unities abgeben:
Hallo, mein Kollege versucht das Problem nun mit GIS zu lösen. Klar, die Liste von Robert ist korrekt. Nur mein Problem an dieser Tabelle ist, dass ich ja gar keine Auflistung bekomme wie Nahtnr. A275/3 liegt am nächsten an Bohrpunkt Nr. 1012, sondern wieder eine neue Nummer (ID) habe, die gar nicht in Verbindung mit meiner Schweißnahtnummer zu bringen ist. Oder steh ich da jetzt total auf dem Schlauch??? Mir ist das auch sowieso zu kompliziert. Für sowas muss ich dann leider auf Kollegen zurück greifen... trotzdem vielen Dank für eure ganze Hilfe! Gruß, Bigggi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mistfink Mitglied GISler
Beiträge: 217 Registriert: 08.06.2006 Map 3D / 2013 AIMS 2013 Win 7, 64bit
|
erstellt am: 31. Aug. 2015 13:31 <-- editieren / zitieren --> Unities abgeben: Nur für Bigggi
Hallo Bigggi, die Objektdaten zu den Nähten hatte ich tatsächlich übersehen. Also hab ich den gesamten Prozess nochmal durchgeführt - diesmal ist die Nahtnummer mit dabei. Aufwand insgesamt: 5min. Viele Grüsse, Robert ------------------ raumpatrouille3d.blogspot.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mistfink Mitglied GISler
Beiträge: 217 Registriert: 08.06.2006 Map 3D / 2013 AIMS 2013 Win 7, 64bit
|
erstellt am: 31. Aug. 2015 15:20 <-- editieren / zitieren --> Unities abgeben: Nur für Bigggi
Hallo, da ich den SQLite Syntax nicht so recht nachvollziehen konnte habe ich es testweise auch in Oracle Spatial ausgeführt. Dort lautet die Abfrage: SELECT bo.nr, sn.nahtnr FROM bo, sn WHERE sdo_nn(bo.geom, sn.geom, 'sdo_num_res=1') = 'TRUE' ORDER BY sn.nahtnr; Das Ergebnis ist - zumindest im Beispieldatensatz - gleich. Hier verstehe ich aber zumindest den SQL Aufruf grundsätzlich - auch wenn mir die Bedeutung des "sdo_num_res" im Augenblick nicht ganz verständlich ist. Ich interpretiere das so, dass das nächste Objekt gefunden wird. Viele Grüsse, Robert ------------------ raumpatrouille3d.blogspot.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RL13 Ehrenmitglied V.I.P. h.c. Dipl.-Ing. Bauwesen
Beiträge: 2373 Registriert: 23.10.2008
|
erstellt am: 01. Sep. 2015 08:34 <-- editieren / zitieren --> Unities abgeben: Nur für Bigggi
Hier meine funktionierenden SQL Anweisungen für PostGIS in einer PostgreSQL-Datenbank 1) CREATE TABLE "Ergebnis_Zuordnung" AS 2) SELECT 2.1) schweissnaehte.featid1 as sn_id, 2.2) bohrpunkte.nr as bohrnummer, 2.3) ST_Distance(schweissnaehte.geom, bohrpunkte.geom) as dist, 2.4) schweissnaehte.geom as geom 3) FROM schweissnaehte, bohrpunkte 4) WHERE ST_Distance(schweissnaehte.geom, bohrpunkte.geom)=(SELECT MIN(ST_Distance(schweissnaehte.geom, bohrpunkte.geom)) FROM Bohrpunkte) 5) ORDER BY sn_id; Die Befehlskette bedeutet übersetzt soviel wie: 1) Erzeuge eine Tabelle mit Namen "Ergebnis_Zuordnung" 2) Bilde dazu eine zusammengesetzte Tabelle 2.1) und erzeuge eine Spalte mit dem Namen "sn_id" aus der Spalte "featid1", der Tabelle "Schweissnaehte" 2.2) und erzeuge eine Spalte mit dem Namen "bohrnummer" aus der Spalte "nr", der Tabelle "bohrpunkte" 2.3) und erzeuge eine Spalte mit dem Namen "dist" als Ergebnis der Funktion Abstand zwischen Schweissnaehten und Bohrpunkten 2.4) und erzeuge eine Spalte mit dem Namen "geom", welche die Geometrie aus der Tabelle "Schweissnaehte" enthält 3) aus den Tabellen "schweissnaehte" und "bohrpunkte" 4) bei dem der Abstand zwischen Bohrpunkt und Schweißnaht minimal ist 5) und sortiere das ganze nach "sn_id" gerade 4) war etwas tricky drauf zu kommen hab hie das Ganze als neue Tabelle umgesetzt, Views finde ich jedoch sinnvoller dann lautet die Zeile 1) CREATE VIEW "Ergebnis_Zuordnung" AS ------------------ mfg Roman [Diese Nachricht wurde von RL13 am 01. Sep. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bigggi Mitglied Bauzeichnerin
Beiträge: 178 Registriert: 14.02.2006 AutoCad Map2015
|
erstellt am: 02. Sep. 2015 07:39 <-- editieren / zitieren --> Unities abgeben:
|