Welche Arten von GIS-Problemen werden durch die funktionale Programmierung behoben?


8

Nachdem ich den @ray vernagus-Beitrag über die Verwendung von ArcObjects mit F # gelesen habe , habe ich mich gefragt, welche Arten von GIS-Problemen von der funktionalen Programmierung besser behandelt werden als von herkömmlichen Programmierformen.

Vielleicht genauer gesagt, wann wäre es besser, F # als C # mit ArcObjects zu verwenden?


Vielleicht hängt das Paradigma man wählt , auf was man will Programm für, einen Ihrer Links enthält Verweise auf alternative Paradigmen und einen Vergleich von dem, was sie für geeignet sind en.wikipedia.org/wiki/Comparison_of_programming_paradigms

@ DanPatterson Danke für das Feedback. Was ich sehen möchte, sind spezifische GIS-Probleme, bei denen F # besser geeignet ist als C #. Wenn ich das sehe, kann ich es vielleicht rechtfertigen, Zeit zu investieren, um es zu lernen. Ich habe den Verdacht, dass Dinge wie Kartenalgebra und Netzwerkflusslöser gute Kandidaten sind, habe aber keine Fallstudien gesehen.
Kirk Kuykendall

1
"Map Algebra" (aus den 1980er Jahren) ist funktionale Programmierung.
whuber

@whuber Soweit ich die funktionale Programmierung verstehe, kann das, was wir normalerweise als Formeln betrachten, als Daten behandelt werden. Tabellenkalkulationen tun dies beispielsweise. Ich sehe keine Möglichkeit, einer Rasterzelle eine Funktion zuzuweisen. Es scheint, als könnte dies verwendet werden, um so etwas wie eine Zonenkarte rationaler zu erstellen. Jede Zoneneinteilungskategorie kann eine andere Eignungsfunktion haben. Mit Einheiten wie Grundsteuereinnahmen. Die Eingaben können umgebende Zonen enthalten. Die Zonierung eines Pakets als Wohngebiet bringt möglicherweise nicht so viele Steuereinnahmen, wenn es sich in der Nähe von Industriegebieten befindet.
Kirk Kuykendall

Ich glaube, Sie denken an etwas anderes, das eher dem "Berechnen von Funktionen" ähnelt. Laut [Wikipedia] ist funktionale Programmierung "ein Programmierparadigma, das Berechnung als Bewertung mathematischer Funktionen behandelt und Zustands- und veränderbare Daten vermeidet". Die Kartenalgebra, die fast ausschließlich aus reinen Funktionen besteht, ist ein einfaches (aber begrenztes) Beispiel dafür. Die Alternative, beispielsweise Zellen in Python zu durchlaufen, ist das Gegenteil der funktionalen Programmierung. In Rund Mathematica gibt es derzeit starke FP-Paradigmen , die viele GIS-bezogene Beispiele liefern.
whuber

Antworten:


4

Der Hauptgrund, warum die funktionale Programmierung in letzter Zeit wieder in Mode gekommen ist, ist die Parallelität. Die Möglichkeit, aus Leistungsgründen parallel zu verarbeiten, wird für die Berechnung insgesamt von enormer Bedeutung, und GIS ist keine Ausnahme. Die funktionale Programmierung hat im Zusammenhang mit der Erstellung paralleler Systeme einige schwerwiegende Vorteile, da sie die Unveränderlichkeit und Rekursion stark betont. Aufgrund dieser Eigenschaften neigen die meisten funktionalen Sprachen dazu, Probleme wie das Sperren einfach zu umgehen, was die parallele Programmierung in imperativen Sprachen zu massiven Kopfschmerzen macht.

Abgesehen davon denke ich, dass das GIS-Feld noch einen langen Weg vor sich hat, bevor Sie wirklich viele Vorteile der funktionalen Programmierung nutzen können. Bestehende Technologien und Bibliotheken sind einfach zu sehr auf Objektorientierung und einen allgemein zwingenden Ansatz fixiert. Nur weil Sie ArcObjects von F # aus verwenden können, bedeutet dies leider nicht unbedingt, dass die zugrunde liegenden Bibliotheken mit einem funktionalen Programmierstil tatsächlich gut funktionieren.


3

Nicht streng programmiert, aber ArcToolbox folgt einem funktionaleren Design-Paradigma.

  • Die meisten Tools sind so konzipiert, dass sie eine Reihe von Eingaben akzeptieren, eine Funktion ausführen und die Ausgaben ohne Einfluss des externen Zustands zurückgeben.
  • Die meisten Werkzeuge bearbeiten keine vorhandenen Ebenen, sondern erstellen neue (Unveränderlichkeit).
  • Viele Werkzeuge funktionieren ähnlich wie eine Kartenfunktion. Sie arbeiten mit Objektgruppen (Feature-Set) und verwenden keine Iteration, um Objekte niedrigerer Ebene (Geometrie) zu verarbeiten.
  • Grundlegende Tools wie Vereinigung, Überschneiden und Auflösen können zahlreiche Probleme lösen, die in einer deklarativen Sprache wie SQL nur schwer auszudrücken sind.

Mit dem funktionalen Ansatz von ArcToolbox können wir räumliche Analysen durchführen, ohne Code schreiben zu müssen. Der Benutzer kann mit einem einfachen Satz von Elementen wie Ebenen arbeiten und muss sich keine Gedanken über Iteration, Beibehaltung des Status oder komplizierte Nebenwirkungen machen.


2

Ich bin selbst neu in der funktionalen Programmierung, daher sind dies nur einige Gedanken.

Es gibt ein interessantes Beispiel für einen Ray Tracer in F # , das einige der Stärken der funktionalen Programmierung veranschaulicht, nämlich Funktionen höherer Ordnung , Rekursion , Parallelität und Mustervergleich . Wenn Sie einige dieser Konzepte erweitern, scheint Rastermathematik ein Schlüsselbereich in GIS zu sein, für den die funktionale Programmierung besonders geeignet sein könnte.

Geben Sie hier die Bildbeschreibung ein

Bearbeiten: Hier ist ein weiteres Beispiel von derselben Site: Regel 30 Zelluläre Automaten

Ein anderer Gedanke ist, dass Sie nicht Ihr gesamtes Programm in F # schreiben müssen. Sie können das Hauptprogramm in C # schreiben lassen und Projekte / Baugruppen in F # erstellen, die bestimmte funktionale Programmierprobleme lösen. Ich habe gelesen, dass Sie ILMerge auch verwenden können , um C # und F # zu einer ausführbaren Datei / Assembly zusammenzuführen.

Schließlich gibt es eine Menge von funktionaler Programmierung Dingen , die Sie in C # mit tun können LINQ , durch die Verwendung von Lambda - Ausdrücke , höhere Funktionen Ordnung ( Select, Whereusw.), Sequenzmustervergleich usw.


Danke für den Link zum Ray Tracer. Hat sich die Freiheit genommen, Ihrer Antwort ein Bild hinzuzufügen.
Kirk Kuykendall
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.