Erzeugen von Geo json Datensätzen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
MyyPyy
User
Beiträge: 2
Registriert: Freitag 22. Mai 2020, 13:17

Hallo zusammen,
ich bin ein Python Neuling und tu mich gerade noch ein bisschen schwer (aber den Profs. ist das ja egal :wink: ). Daher wende ich mich an euch.
die Aufgabenstellung lautet:
Erstellen Sie ein Modul zum Erzeugen von GeoJSON Datensätzen. Das Modul soll dabei die Funktionalitäten des Moduls Geometry nutzen. Entwickeln Sie in diesem Modul eine neue Klasse zum Erstellen der GeoJSON Objekte:
• FeatureCollection
• Feature
• Geometry

Als Geometrien sollen LineString und Polygon unterstützt werden.
Erstellen Sie sich dazu eine Klasse für den GeoJSON Export. Die Klasse solle einen leeren Konstruktor enthalten. Über entsprechende Set-Methoden können Sie Inhalte an die Klasse übergeben und die Erzeugung der GeoJSON Datei sollte über eine Methode Write erfolgen.
Bisherigeriger Stand der Dinge:
import json

print json.dumps ({'type':"FeatureCollection"})

dictFeatureCollection = { "type": "FeatureCollection"}
dictFeature = { "type": "Feature", "properties" : {} }

listFeatures = []
dictFeatureCollection ["features"] = listFeatures

listFeatures.append(dictFeature)

listCoordinates = [[8.0, 49.2], [8.1, 49.2], [8.1, 49.3],[8.1, 49.3],[8.0, 49.2]]

dictLineString = { "type": "LineString", "coordinates" : listCoordinates }

dictFeature ["geometry"] = dictLineString

print json.dumps(dictFeatureCollection)


#Erstellen von Geo-json-Dateien:
jsonFile = open("json_test_1.json", "w")
json.dump(dictFeatureCollection, jsonFile)
jsonFile.close

with open("json_test_2.json", "w") as jsonFile:
json.dump(dictFeatureCollection, jsonFile)
Dieser Code soll im Prinzip um Geometry erweitert werden, wie sollte man vorgehen?

Bin um Hilfe dankbar! :)
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@MyyPyy: Bei der `print()`-Funktion fehlen Klammern. Oder das ist noch Python 2, das dürfte aber nicht mehr sein.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).

Grunddatentypen haben in Namen nichts zu suchen. Im Laufe der Entwicklung ändert man den Typ gerne mal und dann hat man entweder falsche, irreführende Namen im Programm oder man muss die überall ändern.

Beim schreiben der ersten JSON-Datei wird die Datei nicht geschlossen. Es reicht nicht einfach nur die `close()`-Methode zu referenzieren, man muss sie dann auch aufrufen. Aber wenn möglich sollte man sowieso ``with`` verwenden.

Laut Aufgabe soll das Modul `Geometry` verwendet werden. Kennen wir hier nicht, aber man sieht das es im gezeigten Quelltext offensichtlich nicht verwendet wird.

Eine Klasse für den Export mit einem leeren Konstruktor klingt einfach nur sehr, sehr falsch. Genau so wie `Set`-Methoden um irgendwelche Werte zu setzen. Deine Professoren wollen wohl eigentlich Java verwenden und werden gezwungen das in Python zu machen. Mein Beileid…

Insgesamt ist da für meinen Geschmack zu viel Code in dem gezeigten Quelltext. Die ganze Struktur kann man auch als Literal hin schreiben, was IMHO deutlich übersichtlicher und leichter nachzuvollziehen ist.

Code: Alles auswählen

#!/usr/bin/env python3
import json


def main():
    feature_collection = {
        "type": "FeatureCollection",
        "features": [
            {
                "type": "Feature",
                "properties": {},
                "geometry": {
                    "type": "LineString",
                    "coordinates": [
                        [8.0, 49.2],
                        [8.1, 49.2],
                        [8.1, 49.3],
                        [8.1, 49.3],
                        [8.0, 49.2],
                    ],
                },
            }
        ],
    }
    print(json.dumps(feature_collection))
    with open("test.json", "w", encoding="utf-8") as json_file:
        json.dump(feature_collection, json_file)


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
MyyPyy
User
Beiträge: 2
Registriert: Freitag 22. Mai 2020, 13:17

__blackjack__ hat geschrieben: Freitag 22. Mai 2020, 14:22 @MyyPyy: Bei der `print()`-Funktion fehlen Klammern. Oder das ist noch Python 2, das dürfte aber nicht mehr sein.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).

Grunddatentypen haben in Namen nichts zu suchen. Im Laufe der Entwicklung ändert man den Typ gerne mal und dann hat man entweder falsche, irreführende Namen im Programm oder man muss die überall ändern.

Beim schreiben der ersten JSON-Datei wird die Datei nicht geschlossen. Es reicht nicht einfach nur die `close()`-Methode zu referenzieren, man muss sie dann auch aufrufen. Aber wenn möglich sollte man sowieso ``with`` verwenden.

Laut Aufgabe soll das Modul `Geometry` verwendet werden. Kennen wir hier nicht, aber man sieht das es im gezeigten Quelltext offensichtlich nicht verwendet wird.

Eine Klasse für den Export mit einem leeren Konstruktor klingt einfach nur sehr, sehr falsch. Genau so wie `Set`-Methoden um irgendwelche Werte zu setzen. Deine Professoren wollen wohl eigentlich Java verwenden und werden gezwungen das in Python zu machen. Mein Beileid…

Insgesamt ist da für meinen Geschmack zu viel Code in dem gezeigten Quelltext. Die ganze Struktur kann man auch als Literal hin schreiben, was IMHO deutlich übersichtlicher und leichter nachzuvollziehen ist.

Code: Alles auswählen

#!/usr/bin/env python3
import json


def main():
    feature_collection = {
        "type": "FeatureCollection",
        "features": [
            {
                "type": "Feature",
                "properties": {},
                "geometry": {
                    "type": "LineString",
                    "coordinates": [
                        [8.0, 49.2],
                        [8.1, 49.2],
                        [8.1, 49.3],
                        [8.1, 49.3],
                        [8.0, 49.2],
                    ],
                },
            }
        ],
    }
    print(json.dumps(feature_collection))
    with open("test.json", "w", encoding="utf-8") as json_file:
        json.dump(feature_collection, json_file)


if __name__ == "__main__":
    main()
Verstehe ich es richtig, dass Ihr Code nur eine kurze Version von meinem ist? Oder verstehe ich da etwas falsch?
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Du brauchst nicht den ganzen Beitrag zu zitieren, der steht ja direkt darüber.
Und ja, der Code macht das selbe, nur eben alle Anmerkungen umgesetzt.
Antworten