Hoeveelheid data in puntenbestand reduceren[VB.net]

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • skate master
  • Registratie: September 2004
  • Laatst online: 13-10 08:46

skate master

Autodesk Educator Expert

Topicstarter
Mensen, ik zit met een uitdaging waarbij ik graag zou horen of ik in de juiste richting denk of dat jullie het anders zouden doen.

case
Bij ons op het werk krijgen wij met enige regelmaat een 3D puntenbestand aangeleverd.
Vanuit dit puntenbestand is het voor mij met AutoCAD Civil 3D een koud kunstje om hier een Suface van te maken om zo volume bepalingen en andere taken op uit te voeren.
Mijn collega's werken echter met AutoCAD LT en bezitten dus niet de benodigde functies om een 3D surface / puntenbestand in te lezen.
Om mijn collega's ook te kunnen laten werken met de aangeleverde hoogte gegevens zet ik zo'n puntenbestand dan om naar hoogtelijnen en een tekstueele weergave van de hoogtes.
Echter onstaat dan al snel een bestand dat niet prettig is om te werken door de hoeveelheid aan data. Dit is dan op te lossen door handmatig overbodige informatie te verwijderen, echter bij grote bestanden is dit erg tijdrovend.

gewenste oplossing / gedachten gang
Hieronder een deel van een data set.
Iedere regel in de dataset is opgebouwd uit een Nummer, X-coordinaat, Y-coordinaat, en Z-waarde.
Zoals in de dataset te zien zitten punt 29-40 op dezelfde Z-waarde, hier zouden dus rustig enkele punten weg mogen vallen.

Zelf zat ik te denken om doormiddel van een VB.net plugin zo'n dataset te importeren en dan op basis van het gelijk zijn van de Z-waarde het aantal records te reduceren.
Dit zou kunnen door simpel weg het bestand te doorlopen en te kijken waar een blok met dezelfde hoogtes voorkomt om vervolgens hier bijvoorbeeld iedere 5e record te handhaven.
Wanneer de punten dicht bij elkaar staan dan kan dit prima zonder essentieele data te verliezen.
Echter zodra de afstand groter wordt tussen de onderlinge punten binnen het blok met dezelfde hoogte bestaat er de mogelijkheid dat je essentieele data verliest en zul je wellicht de punten moeten handhaven.

Ik ben mij terdege bewust dat zodra ik mijn dataset ga verkleinen door informatie te wissen ik het risico loop op het missen van essentieele data. Dit is een bewust risico dat ik nu even neem.

Wat is nu de meest slimme manier om deze dataset welke als *.txt wordt aangeleverd in te lezen en daar waar mogelijk te reduceren?
Ik zou het bestand regel voor regel kunnen inlezen om vervolgens de punten welke ik wil behouden direct in AutoCAD te plaatsen.
Maar ik zou ook het hele bestand in een Datatable kunnen stoppen om vervolgens de reduceer acties uit te voeren.

duwtje in de rug
Op welke wijze zouden jullie deze dataset importeren / de gewenste reduceer actie uitvoeren middels VB.net?
Zit ik qua logica voor het uitdunnen in de juiste richting te denken of hebben jullie een beter idee?

dataset
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
nr,x,y,z
1,265697.373330,489181.443783,24.380000
2,265697.373330,489186.443783,24.380000
3,265702.373330,489181.443783,24.299899
4,265702.373330,489186.443783,24.380000
5,265707.373330,489181.443783,24.480000
6,265707.373330,489186.443783,24.323899
7,265712.373330,489181.443783,24.607754
8,265712.373330,489186.443783,24.480000
9,265717.373330,489181.443783,24.788702
10,265717.373330,489186.443783,24.480000
11,265722.373330,489181.443783,24.409514
12,265722.373330,489186.443783,24.780000
13,265727.373330,489181.443783,24.480000
14,265727.373330,489186.443783,24.180000
15,265732.373330,489181.443783,24.339751
16,265732.373330,489186.443783,24.289720
17,265737.373330,489181.443783,24.348343
18,265737.373330,489186.443783,24.480000
19,265742.373330,489181.443783,24.280000
20,265742.373330,489186.443783,24.180000
21,265747.373330,489181.443783,24.215444
22,265747.373330,489186.443783,24.480000
23,265752.373330,489181.443783,24.280000
24,265752.373330,489186.443783,24.480000
25,265757.373330,489181.443783,24.111587
26,265757.373330,489186.443783,23.930664
27,265762.373330,489181.443783,23.880000
28,265762.373330,489186.443783,23.927104
29,265767.373330,489181.443783,23.880000
30,265767.373330,489186.443783,23.880000
31,265772.373330,489181.443783,23.880000
32,265772.373330,489186.443783,23.880000
33,265777.373330,489181.443783,23.880000
34,265777.373330,489186.443783,23.880000
35,265782.373330,489181.443783,23.880000
36,265782.373330,489186.443783,23.880000
37,265787.373330,489181.443783,23.880000
38,265787.373330,489186.443783,23.880000
39,265792.373330,489181.443783,23.880000
40,265792.373330,489186.443783,23.880000
41,265797.373330,489181.443783,23.963097
42,265797.373330,489186.443783,23.953103
43,265802.373330,489181.443783,23.977940
44,265802.373330,489186.443783,23.880000
45,265686.416080,489098.852373,24.581864
46,265686.416080,489103.852373,24.639528
47,265686.416080,489108.852373,24.580000
48,265686.416080,489113.852373,24.580000
49,265686.416080,489118.852373,24.615788
50,265686.416080,489123.852373,24.960042

Acties:
  • 0 Henk 'm!

  • tweakerharrie
  • Registratie: Juli 2009
  • Laatst online: 16-09 09:42
"Mijn collega's werken echter met AutoCAD LT en bezitten dus niet de benodigde functies om een 3D surface / puntenbestand in te lezen."

Zit hier niet een makkelijke oplossing? Namelijk iedereen dezelfde versie?

Acties:
  • 0 Henk 'm!

  • skate master
  • Registratie: September 2004
  • Laatst online: 13-10 08:46

skate master

Autodesk Educator Expert

Topicstarter
tweakerharrie schreef op woensdag 05 augustus 2015 @ 13:49:
"Mijn collega's werken echter met AutoCAD LT en bezitten dus niet de benodigde functies om een 3D surface / puntenbestand in te lezen."

Zit hier niet een makkelijke oplossing? Namelijk iedereen dezelfde versie?
Wel de makkelijkste maar niet de goedkoopste weg.
ca. €200,-- voor LT t.o.v. ca. €1100 voor Civil 3D
Vooralsnog vind de directie de investering te groot om 12 LT licenties om te zetten.

Acties:
  • 0 Henk 'm!

  • Invisible_man
  • Registratie: Juni 2006
  • Laatst online: 18:58
Hoe zat het bij Autocad, moet je voor elke gebruiker een licentie kopen, of kon je ook een pool met licenties voor elke simultane gebruiker (netwerklicentie)?

Als je collega's nu LT gebruiken zullen ze wellicht ook niet fulltime een licentie beschikbaar hoeven te hebben per persoon en zou je met een pool van bijvoorbeeld 8 stuks uit de voeten kunnen. En zelf iets maken kost uiteindelijk ook tijd. Niet alleen in eerste instantie, maar ook om het in de toekomst te blijven onderhouden.

Acties:
  • 0 Henk 'm!

  • skate master
  • Registratie: September 2004
  • Laatst online: 13-10 08:46

skate master

Autodesk Educator Expert

Topicstarter
Het omzetten van licenties zou ook mijn voorkeur hebben, echter is er besloten om dat niet te doen en zitten we voorlopig met de situatie zoals deze nu is.
Dit betekent dus dat ik naar een oplossing zoek via VB.net.

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Je zou een criterium kunnen instellen voor de hoek die drie opeenvolgende punten maken. Gegevens drie opeenvolgende punten A, B, C, kun je de hoek bepalen tussen AB en BC. Indien die kleiner is dan (bijvoorbeeld) 5 graden, dan kun je B verwijderen zonder al te veel gevolgen.

Dit kun je een aantal keer herhalen over je lijst, danwel een slimmere variant verzinnen die verder kijkt dan drie punten.

Acties:
  • 0 Henk 'm!

  • bomberboy
  • Registratie: Mei 2007
  • Laatst online: 21:11

bomberboy

BOEM!

Voldoen de mogelijkheden om de surfaces te simplifyen?
http://knowledge.autodesk...138-6B24FFAA4B9C-htm.html

Je zou kunnen proberen om dat in autocad zelf te automatiseren:
http://www.cad-notes.com/...d-automate-your-plotting/

En als ze echt gierig zijn:
1 extra licentie, computer met remote desktop waarop iedereen kan inloggen en/of waar je die files naartoe sleept en dan het geautomatiseerde script uitvoert.

Totale kost is dan relatief beperkt

Indien je toch zelf aan de slag wil, via delauny triangulation kan je er relatief eenvoudig voor zorgen dat er geen hoogte-data verloren gaat (ieder punt waarvan alle buren dezelfde hoogte hebben mag weg, alle punten die op één lijn liggen mogen weg enz of als je verlies in nauwkeurigheid er bij neemt kan je daar nog verder in gaan)
volgende vraag op stackoverflow gaat over hetzelfde: http://stackoverflow.com/...or-simplifying-3d-surface

PS: voor de fun ben ik toch ook wel benieuwd naar het verschil in kost tussen het zelf doen en iedereen een extra licentie kopen :)

[ Voor 5% gewijzigd door bomberboy op 05-08-2015 16:02 ]


Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 12-10 00:11
Oplossing uit een heel andere hoek, namelijk de statistiek. Misschien een beetje vreemd, maar volgens mij zou het moeten werken....

In principe heb je een lijst datapunten gemeten op 3 variabelen X, Y en Z. Je wilt de de datapunten die dicht bij elkaar liggen samennemen toch?

Ik heb even een two-step in SPSS gedaan en de punten toegewezen aan 35 clusters (kun je zelf instellen). Zie hier het resultaat:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
26  265,757.37  489,186.44  23.93   1
28  265,762.37  489,186.44  23.93   1
27  265,762.37  489,181.44  23.88   2
29  265,767.37  489,181.44  23.88   2
30  265,767.37  489,186.44  23.88   3
32  265,772.37  489,186.44  23.88   3
31  265,772.37  489,181.44  23.88   4
33  265,777.37  489,181.44  23.88   4
34  265,777.37  489,186.44  23.88   5
36  265,782.37  489,186.44  23.88   5
35  265,782.37  489,181.44  23.88   6
37  265,787.37  489,181.44  23.88   6
38  265,787.37  489,186.44  23.88   6
39  265,792.37  489,181.44  23.88   6
40  265,792.37  489,186.44  23.88   6
41  265,797.37  489,181.44  23.96   7
43  265,802.37  489,181.44  23.98   7
42  265,797.37  489,186.44  23.95   8
44  265,802.37  489,186.44  23.88   9
25  265,757.37  489,181.44  24.11   10
9   265,717.37  489,181.44  24.79   11
12  265,722.37  489,186.44  24.78   12
18  265,737.37  489,186.44  24.48   13
8   265,712.37  489,186.44  24.48   14
10  265,717.37  489,186.44  24.48   14
13  265,727.37  489,181.44  24.48   15
11  265,722.37  489,181.44  24.41   16
5   265,707.37  489,181.44  24.48   17
7   265,712.37  489,181.44  24.61   18
45  265,686.42  489,098.85  24.58   19
46  265,686.42  489,103.85  24.64   20
47  265,686.42  489,108.85  24.58   21
48  265,686.42  489,113.85  24.58   21
49  265,686.42  489,118.85  24.62   22
50  265,686.42  489,123.85  24.96   23
1   265,697.37  489,181.44  24.38   24
2   265,697.37  489,186.44  24.38   25
4   265,702.37  489,186.44  24.38   25
3   265,702.37  489,181.44  24.30   26
6   265,707.37  489,186.44  24.32   27
22  265,747.37  489,186.44  24.48   28
24  265,752.37  489,186.44  24.48   28
15  265,732.37  489,181.44  24.34   29
17  265,737.37  489,181.44  24.35   29
16  265,732.37  489,186.44  24.29   30
19  265,742.37  489,181.44  24.28   31
23  265,752.37  489,181.44  24.28   32
20  265,742.37  489,186.44  24.18   33
21  265,747.37  489,181.44  24.22   34
14  265,727.37  489,186.44  24.18   35


Je kunt vervolgens per cluster een gemiddelde / middelpunt berekenen. Alternatief zou kunnen zijn om k-means cluster te runnen en de middelpunten van de clusters te gebruiken.

SPSS is betaalde software, maar er zijn ook prima gratis alternatieven zoals R.

Acties:
  • 0 Henk 'm!

  • Orthodroom
  • Registratie: December 2014
  • Niet online
Wellicht interessant als je eens naar QGIS (opensource) kijkt. Daar kun je gewoon alle punten inladen.
Csv inladen, omzetten naar shape, dat omzetten naar raster en dan kun je in het pakket al volumes uitrekenen.
Je kunt er met Python ook plug-ins voor schrijven, dus een en ander valt te automatiseren.

Acties:
  • 0 Henk 'm!

  • Loy
  • Registratie: Februari 2004
  • Laatst online: 18-09 13:46

Loy

Een andere optie is om je 3D ruimte te discretiseren, dus opdelen in blokjes van allemaal dezelfde grootte.
Alle punten in een blokje kunnen reduceren tot 1 punt in het midden van het blokje.
Door de grootte van een blokje te variëren (evt. per dimensie) kun je de nauwkeurigheid/dataverlies instellen.

Wellicht kun je kijken naar PCL, daar zitten tal van dit soort operaties in.

Chaos is more logic than you understand


Acties:
  • 0 Henk 'm!

  • skate master
  • Registratie: September 2004
  • Laatst online: 13-10 08:46

skate master

Autodesk Educator Expert

Topicstarter
Bedankt voor de reacties.
Ik ga de oplossingen stuk voor stuk eens rustig bekijken en waar mogelijk uitwerken.

Wel blijkt maar weer dat ik me blind gestaard heb op mijn uitdaging en dus niet verder gekeken / gedacht heb binnen de software.
Daar waar ik binnen AutoCAD naar een mogelijkheid zocht om mijn puntenbestand te vereenvoudigen gaf bomberboy mij een goede tip om het surface te simplifyen.
Stom dat ik daar noooit aan gedacht heb.
Pagina: 1