Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: Πρόγραμμα python

Πρόγραμμα python 7 Χρόνια 6 Μήνες πριν #4432

  • ils
  • Το Άβαταρ του/της ils
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 7
Καλημέρα.
Έχω φτιάξει ένα module (μετασχηματισμοί συντεταγμένων) και θέλω να φτιάξω ένα πρόγραμμα το οποίο θα διαβάζει ένα σετ σημειακών δεδομένων shapefile και θα εφαρμόζει τους μετασχηματισμούς του παραπάνω πακέτου. Τα αποτελέσματα της εφαρμογής των μετασχηματισμών θα πρέπει να εξάγονται σε μορφή shapefile.

Εαν κάποιος μπορεί να βοηθήσει είναι ευπρόσδεκτος.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Πρόγραμμα python 7 Χρόνια 6 Μήνες πριν #4433

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Αν θες δώσε περισσότερα στοιχεία ή πες που μπορούμε να δούμε το προγραμμά σου και την περιγραφή τι θές να κάνεις
Τελευταία διόρθωση: 7 Χρόνια 6 Μήνες πριν από Theo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": ils

Πρόγραμμα python 7 Χρόνια 6 Μήνες πριν #4434

  • ils
  • Το Άβαταρ του/της ils
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 7
Καλημέρα σε όλους και σας ευχαριστώ για το ενδιαφέρον σας.
Είμαι μεταπτυχιακός φοιτητής και στα πλαίσια αξιολόγησης μαθήματος Προγραμματισμού και Γεωχωρικών Εφαρμογών, θα πρέπει να συντάξω εργασία σε κώδικα python. Μέχρι εδώ όλα καλά. Το βασικό πρόβλημα είναι ότι προπτυχιακά (πριν περίπου 25 χρόνια που φοιτούσα) δεν διδαχτήκαμε προγραμματισμό παρά μόνο λίγο basic όπου και τα πήγα μια χαρά. Μετά από τόσα χρόνια όμως, τα πράγματα στις γλώσσες προγραμματισμού έχουν αλλάξει σημαντικά. Μη έχοντας υποδομή για τον προγραμματισμό σε python καθώς και την συνεργασία αρχείων και προγραμμάτων μεταξύ τους, έφτασα την παραπάνω εργασία μέχρι την μέση.
Το ζητούμενο της εργασίας είναι, να φτιάξουμε έναν κώδικα σε python ο οποίος θα διαβάζει ένα σετ σημειακών δεδομένων (π.χ. το Χ και το Υ ενός σημείου ή ζεύγους σημείων) σε QGIS, (δηλαδή σε μορφότυπο shapefile) στην συνέχεια θα εφαρμόζει στα σημεία που του δόθηκαν κάποιους μετασχηματισμούς μέσου πακέτου (module) που έχει μέσα τις συναρτήσεις των μετασχηματισμών (το module το έχω ήδη φτιάξει), και θα εξάγει τα αποτελέσματα (δηλαδή τα νέα σημεία με τις νέες συντεταγμένες των σημείων που δέχτηκαν τους μετασχηματισμούς) σε ένα νέο αρχείο (ίσως και το ίδιο) αλλά σε μορφή shapefile έτσι ώστε να διαβάζεται από το QGIS, δηλαδή να εμφανίζει τα σημεία με τις νέες συντεταγμένες. Σαν βασική οδηγία
μας δόθηκε να αξιοποιήσουμε την βιβλιοθήκη pyshp, η οποία πιθανόν να σχετίζεται με αρχεία τύπου shp.
Το module της εργασίας με τις συναρτήσεις το έχω φτιάξει, δηλαδή δέχεται ζεύγη σημείων με γνωστές συν/νες Χ και Υ , και εξάγει (στο ίδιο αρχείο) τις νέες συν/νες τους.
Εαν κάποιος έχει τις γνώσεις και την διάθεση να βοηθήσει στην επίλυση του παραπάνω θέματος είναι ευπρόσδεκτος.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Πρόγραμμα python 7 Χρόνια 6 Μήνες πριν #4435

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Αυτό που έκανα ήταν να ρίξω μια ματιά στη βιβλιοθήκη pyshp
pypi.python.org/pypi/pyshp/1.2.11#examples
την οποία μπορείς να εγκαταστήσεις με pip installer

Μετά κατέβασα ένα αρχείο shp από το internet www.mapcruzin.com/free-greece-arcgis-maps-shapefiles.htm
αυτό που λέει Greece buildings
Αυτό που θα πρέπει να κάνεις είναι να κάνεις import τη βιβλιοθήκη και να ανοίγεις το αρχείο σου με την κλάση Editor
>>> import shapefile
>>> e = shapefile.Editor('buildings.shp')
>>> e.fields
[('DeletionFlag', 'C', 1, 0), ['osm_id', 'N', 11, 0], ['name', 'C', 48, 0], ['type', 'C', 16, 0]]
>>> shapes=e.shapes()
>>> shapes[3].points
[(23.7365189, 37.9748836), (23.7374004, 37.9747466), (23.7375791, 37.9755834), (23.7366916, 37.9757115), (23.7365189, 37.9748836)]
>>> len(shapes)
1314
>>> shapes[3].bbox
[23.7365189, 37.9747466, 23.7375791, 37.9757115]
>>> shapes[3].parts
[0]
>>> shapes[3].shapeType
5
Μετά πρέπει να δεις από τον τεράστιο όγκο πληροφοριών που έχει μέσα τι θέλεις να αλάξεις
Έστω υποθέτω εγώ τα points των shapes ή το bbox δέν ξέρω
Θα περάσεις όλες τις εγγραφές από το module τροποποίησης που λές έχεις έτοιμο (τι module είναι αυτό python;) για να τις αλλάξεις
με ένα for loop ίσως
for shape in shapes[:5]:
	shape.points
 
 
[(25.1725661, 35.3367719), (25.172609, 35.3374791), (25.1732442, 35.3374441), (25.1732527, 35.3373531), (25.1751324, 35.337192), (25.1751324, 35.337059), (25.1755959, 35.336982), (25.1755702, 35.3365619), (25.1725661, 35.3367719)]
[(25.1364657, 35.3445645), (25.1371009, 35.3448026), (25.137221, 35.3446555), (25.1373669, 35.3444665), (25.1372296, 35.3443965), (25.1370494, 35.3443965), (25.1366374, 35.3442285), (25.1364657, 35.3445645)]
[(23.9444759, 37.9333225), (23.9449394, 37.9330314), (23.9504326, 37.9387584), (23.9499348, 37.9390563), (23.9484242, 37.9374723), (23.9479521, 37.937743), (23.9456175, 37.9352316), (23.9460466, 37.9349608), (23.9444759, 37.9333225)]
[(23.7365189, 37.9748836), (23.7374004, 37.9747466), (23.7375791, 37.9755834), (23.7366916, 37.9757115), (23.7365189, 37.9748836)]
[(23.7320729, 37.9896021), (23.7318729, 37.988704), (23.7328141, 37.9885686), (23.7327834, 37.9884395), (23.7332171, 37.9883533), (23.7334816, 37.9894053), (23.7330417, 37.989476), (23.7330202, 37.989433), (23.7320729, 37.9896021)]
Εσύ πρέπει να γράψεις shape.points=transformed_points
και στο loop να περάσεις όλα τα στοιχεία όχι τα 5 όπως κάνω εγώ
στο τέλος
>>> e.save('kati')
Εγώ το δοκίμασα με python 3.5.2
Τελευταία διόρθωση: 7 Χρόνια 6 Μήνες πριν από Theo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": ils

Πρόγραμμα python 7 Χρόνια 6 Μήνες πριν #4437

  • babaliaris1
  • Το Άβαταρ του/της babaliaris1
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 445
  • Ληφθείσες Ευχαριστίες 75
Πολύ απλά, θα φτιάξεις ένα πρόγραμμα το οποίο ανοίγει ένα shapefile χρησιμοποιώντας το module που σου προτείνει ο theo.

Στην συνέχεια θα πάρεις όλες τις πληροφορίες που θες από αυτό το αρχείο, θα τις επεξεργαστείς χρησιμοποιώντας το module που έχεις φτιάξει εσύ και μετά θα αποθηκεύεις τις αλλαγές ξανά σε ένα νέο shapefile χρησιμοποιώντας ξανά το module που σε προτείνει ο theo.

Διαφορετικά, ο δύσκολος δρόμος είναι εάν ξέρεις πάρα πολύ καλά πως δομείτε ένα αρχείο shapefile, να φτιάξεις δικό σου module το οποίο διαβάζει ένα shapefile και παίρνει όλα τα δεδομένα που σε ενδιαφέρουν (και επίσης δημιουργεί και νέα shapefiles). Αυτό όμως για να το κάνεις πρέπει να ξέρεις ακριβώς πως δημιουργείται ένα shapefile.

Πιστεύω εάν χρησιμοποιήσεις το module που σε προτείνει ο theo, θα είναι αρκετά εύκολο να λύσεις το πρόβλημα σου μιας και θα τα έχεις όλα έτοιμα.
Τελευταία διόρθωση: 7 Χρόνια 6 Μήνες πριν από babaliaris1.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": ils

Πρόγραμμα python 7 Χρόνια 6 Μήνες πριν #4445

  • ils
  • Το Άβαταρ του/της ils
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 7
Το αρχείο buildings.shp δεν το βρίσκω στον φάκελο Greece buildings.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Πρόγραμμα python 7 Χρόνια 6 Μήνες πριν #4449

  • ils
  • Το Άβαταρ του/της ils
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 7
Και αφού το βρώ, που θα πρέπει να είναι αποθηκευμένο για να το βρεί το πρόγραμμα που γράφω.
Ευχαριστώ.ils έγραψε:
Το αρχείο buildings.shp δεν το βρίσκω στον φάκελο Greece buildings.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Πρόγραμμα python 7 Χρόνια 6 Μήνες πριν #4451

  • ils
  • Το Άβαταρ του/της ils
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 7
Υποψιάζομαι οτι πρέπει να δηλωθεί η πλήρη διαδρομή του ερχείου.ils έγραψε:
Και αφού το βρώ, που θα πρέπει να είναι αποθηκευμένο για να το βρεί το πρόγραμμα που γράφω.
Ευχαριστώ.ils έγραψε:
Το αρχείο buildings.shp δεν το βρίσκω στον φάκελο Greece buildings.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Πρόγραμμα python 7 Χρόνια 6 Μήνες πριν #4452

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Το οτι δεν το βρίσκεις δεν ξέρω τι γίνεται, είναι στο zip file μαζί με ένα A-README.txt και 4 buldings .dbf, .prj, .shp, .shx
Σε κάθε περίπτωση δεν το χρειάζεσαι, δούλεψε με μια κόπια του δικού σου shp ή κατάβασε ένα άλλο.
Για το path όπως το είπες
Ένα tip : seperator για τους φακέλους βάλε κανονική κάθετο σε ότι σύστημα και να δουλεύεις (win, linux)
δηλαδή c:/test/file.shp και όχι c:\\test\\file.shp
Τελευταία διόρθωση: 7 Χρόνια 6 Μήνες πριν από Theo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": ils

Πρόγραμμα python 7 Χρόνια 6 Μήνες πριν #4478

  • ils
  • Το Άβαταρ του/της ils
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 7
Καλημέρα σε όλους.
Τον κώδικα τον έφτασα μέχρι εδώ, αλλά κάπου κολλάει.


import my_module
import shapefile
#input and output streams
input_sf = shapefile.Reader('points')
output_w = shapefile.Writer(shapeType=1)
#function to print the points of a shapefile
def print_points(sf):
shapes = sf.shapes()
for shape in shapes:
print(shape.points)
#function that transform the points
def transform(sf, w):
shapes = sf.shapes()
for shape in shapes:
for point in shape.points:
x, y = point
x1, y1 = toolbox.strofi(x, y, 5)
w.point(x1, y1)
print ('original')
print_points(input_sf)
#transformations
transform(input_sf, output_w)
#save the generated shapefile
output_w.save('result')
#test the output
#output file as stream
output_sf=shapefile.Reader('result')
#print the results
print('\ntransformed')
print_points(output_sf)
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Πρόγραμμα python 7 Χρόνια 6 Μήνες πριν #4479

  • ils
  • Το Άβαταρ του/της ils
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 7
δεν κολλάει, αλλά τρέχει...... εσαεί
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Πρόγραμμα python 7 Χρόνια 6 Μήνες πριν #4480

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
ils
Βάλε τον κώδικά σου σε code για να διαβάζεται. Πάτα το κουμπί <> και μετά εισαγωγή και κάνε μέσα εκεί paste τον κώδικά σου.

Η γνώμη μου είναι να μην χρησιμοποιήσεις Reader, Writer αλλά Editor.
Δηλαδή κάπως έτσι
import my_module
import shapefile
e = shapefile.Editor('points.shp')
shapes=e.shapes()
for shape in shapes:
  for point in shape.points:
     point[0], point[1]  = my_module.toolbox.strofi(point[0], point[1], 5)
e.save('neo_points')
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": ils

Πρόγραμμα python 7 Χρόνια 6 Μήνες πριν #4481

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Ο Παραπάνω κώδικας που σου έδωσα θα σου βγάλει λογικά λάθος γιατί το point είναι tuple και δεν αλλάζει, οπότε το loop κάντο έτσι
for shape in shapes:
  for i in range(len(shape.points)):
    shape.points[i]=my_module.toolbox.strofi(shape.points[i][0],shape.points[i][1],5) 
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": ils
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.497 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου