Mehr

Ordnen Sie eine Liste von Punkten an, um ein Polygon mit glattem Außenrand zu erstellen


Ich habe eine Funktion, die einige Lat/Longs aus einer Datenbank zieht und dann diese Werte in ein Polygon füge, um seine Form zu sehen. Das Problem ist, dass sie in Position und Richtung so zufällig sind, dass ich aufgrund der Überlappung eine Menge Dreiecksformen bekomme. Gibt es eine Möglichkeit, die Positionen so anzuordnen, dass ich ein solides Polygon ohne die überlappenden Löcher bekomme? Versucht:

Dim orderedPoints = points.OrderBy(Function(ll) ll.Lng).ThenBy(Function(ll) ll.Lat).ToList

Ich habe das Gefühl, dass es in einem kreisförmigen Muster gezeichnet werden muss, um das am weitesten entfernte zu finden, wenn es sich in eine bestimmte Richtung bewegt. In der Hoffnung, das Rad wenn möglich hier nicht neu erfinden zu müssen. Wenn es einen Namen für diesen Prozess gibt, würde ich ihn gerne recherchieren, sobald ich weiß, wie er heißt.

BEARBEITEN: Gefunden für Konvexer Rumpf. Habe diesen Code bisher erstellt. Nicht sicher, wie es von hier aus weitergehen soll.

Öffentliche Klasse ConvexHull Öffentliche Funktion ccw(a As PointLatLng, b As PointLatLng, c As PointLatLng) As Integer Dim area2 = (b.Lat - a.Lat) * (c.Lng - a.Lng) - (b.Lng - a .Lng) * (c.Lat - a.Lat) If (area2 < 0) Then Rückgabe -1 If (area2 > 0) Then Rückgabe +1 Rückgabe area2 ' grundsätzlich kollinear End Function Public Function collinear(a As PointLatLng, b As PointLatLng, c As PointLatLng) As Boolean Return ccw(a, b, c) = 0 End Function End Class

Das allgemeine Problem hier, bekannt als Polygonisierung in der Literatur, ist ziemlich schwierig. Siehe z.B. diese Webseite.

Das Problem mit der konvexen Hülle besteht darin, dass die von Ihren Punkten umrissene Region möglicherweise nicht konvex ist. Und tatsächlich könnten Sie die meisten Details verlieren:



Oben ist die konvexe Hülle der eingekreisten Punkte das blau umrandete Dreieck, aber vielleicht bevorzugen Sie das nuanciertere hellblaue Polygon im Inneren.

Eine Idee, die hier und in einigen anderen eingeschränkten Situationen funktionieren würde, besteht darin, den Schwerpunkt Ihrer Punkte zu berechnen und sie dann in Winkelreihenfolge um den Schwerpunkt zu verbinden.


So fügen Sie 'border' zum Voronoi-Diagramm hinzu

Angenommen, ich habe eine Menge von Punkten pts, aus denen ich ein Voronoi-Diagramm VD erzeuge:

Nun können wir anhand der geometrischen Transformation, die mit Voronoiesh[] durchgeführt wurde, beobachten, dass sich die Fläche der "äußeren" Zellen unbegrenzt projiziert, bis sich ihre Kanten mit einer anderen Zelle schneiden, sodass ihre Fläche viel größer ist als die der "inneren" Zellen .

Meine Frage ist, wie kann ich das Voronoi-Diagramm so "binden", dass die äußeren Zellen ungefähr die gleiche Fläche haben wie die inneren?

Ich denke, dass eine mögliche Lösung das Generieren einer "Maske" erfordern würde, die den von pts abgedeckten Bereich begrenzt, und dann den Bereich außerhalb dieser Maske ausschließt. Ich dachte daran, eine solche Maske als Verschmelzung von Kreisen zu erstellen, die an jedem Punkt zentriert sind, mit einem Radius, der ungefähr die gleiche Fläche wie die inneren Punkte erzeugt.

Eine zweite Lösung, an die ich gedacht habe, besteht darin, einen gewissen Überschuss an Punkten ptsOuter zu generieren, die einen Bereich außerhalb des Bereichs innerhalb von pts abdecken, der ungefähr den gleichen Abstand wie die pts hat. Machen Sie dann das Voronoi-Netz auf dem Set , was meiner Meinung nach die Punkte in pts mit den Punkten in ptsOuter begrenzen würde.

Ich frage mich, ob es einen einfacheren oder effizienteren Weg gibt als diese Ideen, die ich derzeit habe.

Bearbeiten: Mit 'Grenze' meine ich eine Grenze, die der Verteilung der Punkte in pts folgt, stellen Sie sich am Ende so etwas vor (die gezeichnete Grenze hier, die den Bereich außerhalb davon ausschließen würde):


4 Antworten 4

  1. Es gibt immer eine einzelne offene Fläche, die durch ein Polygon dargestellt wird. Alle anderen Bereiche sind irrelevant.
  2. Eine Linie beginnt, wenn Sie sich vom Umfang des Polygons in das Innere des Polygons bewegen.
  3. Eine Linie stoppt, wenn Sie sich vom Inneren des Polygons zurück auf den Umfang bewegen.
  4. Wenn Sie die Linie anhalten, haben Sie teilte das Polygon in zwei Polygone.
  5. Sie entscheiden dann, welches der beiden Polygone gefüllt und welches als offene Fläche beibehalten werden soll. In Qix blieb die Seite, auf der sich der Qix (Feind) befand, offen und die andere Seite wurde gefüllt.

Wie unterteilt man das Polygon? Sie verwenden die Endpunkte Ihrer Linie, um den Polygonumfang in zwei Abschnitte zu unterteilen, und verwenden dann die neue Linie, um diese beiden Abschnitte zu neuen Polygonen zu vervollständigen.

Angenommen, Ihre offene Fläche ist ein Polygon mit Punkten [p0, p1, p2, p3, p4, p5] . Dein Startpunkt A liegt zwischen p1 und p2 und dein Endpunkt B liegt zwischen p3 und p4 . Die neu gezeichnete Linie ist [A, s, t, u, v, B] . Wir teilen das Polygon zunächst in zwei Segmente [A, p2, p3, B] und [B, p4, p5, p0, p1, A] auf. Diese beiden Segmente bilden zusammen das ursprüngliche Polygon. Dann kleben wir die neue Linie in jede (einmal vorwärts, einmal rückwärts) und bilden [A, p2, p3, B, v, u, t, s] und [B, p4, p5, p0, p1, A, s, t, u, v] . Sie füllen eines dieser Polygone und behalten das andere als Ihre neue offene Fläche.

Ich habe dies nicht implementiert und weiß nicht genau, ob es funktioniert, aber das ist der Ansatz, den ich verwenden würde: Polygonunterteilung statt Polygonfüllung.

Dies ist ein Problem mit mehreren diskreten Unterschritten. Hier ist eine Übersicht dessen, was ich vorschlagen würde:

  • Warten Sie, bis der Spieler einen Schnittpunkt mehrerer Linien bildet
  • Holen Sie sich ein Pixel von jeder Seite der Kreuzung
  • Pathfind, um zu sehen, ob sie sich miteinander verbinden können
  • Pixel, die nicht miteinander verbunden werden können, sind separate Bereiche
  • Führen Sie eine Flutfüllung durch, um alle Pixel im Bereich zu erhalten

Ich würde den Zustand der Pixel des Spiels in einem Numpy-Array speichern (numpy dot scipy dot org). Farbe könnte drei separate Arrays für RGB sein, aber das Array, auf das ich mich konzentriere, ist das Line- / No-Line-Array. Initialisieren Sie es einfach mit Nullen und stellen Sie es auf die Größe Ihres Spielfelds ein, und jedes Mal, wenn der Spieler ein Pixel durchläuft, setzen Sie das entsprechende Element im Array auf 1. Sie möchten diese auf dem Bildschirm in einer anderen Farbe anzeigen , da sie deine Linie sind!

Jedes Mal, wenn sich das Pixel des Spielers bewegt, würde ich überprüfen, ob es eine vorhandene Linie passiert (und eine Linie daneben gezogen hat). Wenn ja, würde ich aus jeder möglichen Division ein Pixel erhalten:

Punkte sind leere Pixel, Linien sind (offensichtlich) Linien und Xs sind die leeren Pixel, die wir auswählen möchten. Wir können dies auf folgende Weise tun:


Vektordatenmodell und seine Anwendung

Das Vektordatenmodell stellt geografische Merkmale ähnlich wie Karten dar. Punkte stellen geografische Merkmale dar, die zu klein sind, um als Linien oder Flächen dargestellt zu werden. Linien stellen geografische Merkmale dar, die zu schmal sind, um sie darzustellen, da Flächen und Flächen homogene geografische Merkmale darstellen. Ein x, y (kartesisches) Koordinatensystem verweist auf reale Standorte.

In einem Vektordatenmodell wird jede Position als einzelne x, y-Koordinate aufgezeichnet. Punkte werden als einzelne Koordinate aufgezeichnet. Linien werden als eine Reihe von geordneten x-, y-Koordinaten aufgezeichnet. Flächen werden als eine Reihe von x-, y-Koordinaten aufgezeichnet, die Liniensegmente definieren, die eine Fläche umschließen, daher der Begriff Polygon, was „vielseitige Figur“ bedeutet. (ESRI, 1998)

6.2 Struktur des Vektordatenmodells

Das Vektordatenmodell besteht aus drei Arten von geometrischen Objekten: Punkt, Linie und Fläche. Ein Punkt kann eine Kiesgrube darstellen, eine Linie kann einen Bach darstellen und eine Fläche kann eine begrünte Fläche darstellen. Der vierte Typ von räumlichen Daten, kontinuierliche 3D-Oberflächen, wird normalerweise als Rasterdaten dargestellt, obwohl sie oft durch Höhenlinien dargestellt werden.

Ein Punkt hat die Dimension 0. Ein Punkt-Feature belegt eine Position und ist von anderen Features getrennt. Eine Linie ist eindimensional und hat die Eigenschaft der Länge. Ein Linien-Feature besteht aus Punkten: einem Anfangspunkt, einem Endpunkt und einer Reihe von Punkten, die die Form der Linie markieren, die eine glatte Kurve oder eine Verbindung von geraden Liniensegmenten sein kann. Glatte Kurven werden in der Regel durch mathematische Gleichungen, wie beispielsweise kubische Polynomgleichungen, erzeugt oder angepasst. Gerade Liniensegmente können von Menschenhand geschaffene Merkmale oder Annäherungen von Kurven bei der Dateneingabe darstellen. Punkte, die die Form eines Linien-Features markieren, aber keine Knoten sind, werden als Stützpunkte bezeichnet. Linien-Features können andere Linien schneiden oder mit ihnen verbinden und ein Netzwerk bilden.

Eine Fläche ist zweidimensional und hat die Eigenschaften Fläche und Grenze. Die Begrenzung eines Flächen-Features trennt den Innenbereich vom Außenbereich. Bereichsmerkmale können isoliert oder verbunden sein. Ein Merkmal eines isolierten Bereichs weist typischerweise einen Knoten auf, der sowohl als Anfangs- als auch als Endknoten dient. Gebietsmerkmale können von anderen Gebieten umgeben sein und darin Löcher bilden, wie beispielsweise die vom Bundesstaat Idaho umgebenen Indianerreservate. Bereichs-Features können sich gegenseitig überlappen und überlappende Bereiche erzeugen. Beispielsweise können sich die befeuerten Gebiete aus früheren Waldbränden überlappen.

Die Vektordatendarstellung unter Verwendung von Punkt, Linie, Fläche und Volumen ist nicht immer einfach, da sie vom Kartenmaßstab und gelegentlich von den von staatlichen Kartenbehörden festgelegten Kriterien abhängen kann. Eine Stadt auf einer Karte im Maßstab 1:1.000.000 wird als Punkt dargestellt, aber dieselbe Stadt wird als Gebiet auf einer Karte im Maßstab 1:24.000 angezeigt.

Ein Bach wird als einzelne Linie in der Nähe seines Oberlaufs, aber als Bereich entlang seines Unterlaufs angezeigt. In diesem Fall bestimmt die Breite des Streams, wie er auf einer Karte dargestellt werden soll. Der U.S. Geological Survey (USGS) verwendet Einzellinien zur Darstellung von Bächen mit einer Breite von weniger als 12 m auf topografischen Karten im Maßstab 1:24.000 und Doppellinien für größere Bäche. Wenn die Hydrographie zu einer Schicht in Digital Line Graph (DLG)-Daten wird, werden Streams in Einzellinien als Linien und Streams in Doppellinien als Flächen digitalisiert. Daher kann ein Bach je nach seiner Breite und dem von der Behörde verwendeten Kriterium als Linie oder Fläche erscheinen. (http://geolibrary.uidaho.edu /courses/geog385/Lectures/1/)

Die Topologie definiert explizit räumliche Beziehungen. Das Prinzip in der Praxis besteht darin, dass relativ einfache räumliche Beziehungen als Listen ausgedrückt werden (z. B. wird ein Polygon durch die Liste von Bögen definiert, die seinen Rand umfasst).

Das Erstellen und Speichern topologischer Beziehungen hat eine Reihe von Vorteilen. Die Daten werden effizient gespeichert, sodass große Datensätze schnell verarbeitet werden können. Die Topologie erleichtert analytische Funktionen, z. B. das Modellieren des Flusses durch die Verbindungslinien in einem Netzwerk, das Kombinieren benachbarter Polygone mit ähnlichen Eigenschaften, das Identifizieren benachbarter Features und das Überlagern geographischer Features.

Die Topologie drückt explizit die räumlichen Beziehungen zwischen geometrischen Objekten aus. Das Vektordatenmodell in ARC/INFO unterstützt drei grundlegende topologische Konzepte:

Konnektivität: Bögen sind an Knoten miteinander verbunden
Flächendefinition: Eine Fläche wird durch eine Reihe verbundener Bögen definiert
Kontiguität: Bögen haben Richtungen und linke und rechte Polygone

Nicht alle GIS-Datendateien sind topologisch strukturiert. Das in ArcView verwendete Standardformat für räumliche Daten heißt Shapefiles, die nicht topologisch sind. Shapefiles definieren die Geometrie und Attribute von Karten-Features in drei Basisdateien. Das .shp Datei speichert die Feature-Geometrie, die .shx -Datei behält den Index der Feature-Geometrie und die .dbf Datei speichert die Attribute von Kartenmerkmalen. Abhängig von der Anwendung kann ArcView andere Dateien erstellen und verwenden. Beispielsweise erfordert die Netzwerkanalyse die Verwendung eines Netzwerkindexverzeichnisses.

Obwohl die Feature-Geometriedatei in ArcView einen Punkt als Paar von X-, Y-Koordinaten, eine Linie als eine Reihe von Punkten und ein Polygon als eine Reihe von Linien speichert, beschreiben keine Dateien die räumliche Beziehung zwischen geometrischen Objekten. Bei Polygonen verstößt die Shapefile-Datenstruktur tatsächlich gegen die einfache Polygontopologie, indem sie zulässt, dass Shapefile-Polygone doppelte Bögen aufweisen und sich gegenseitig überlappen.

Ohne Topologie können Shapefiles bei einigen GIS-Analysen zu Problemen führen, z. B. bei topologiebasierter Kartenüberlagerung und Netzwerkanalyse. Die Verwendung von Shapefiles hat jedoch zwei Hauptvorteile (1) sie werden in einer Ansicht schneller angezeigt als ARC/INFO-Coverages und (2) sie sind nicht proprietär und können direkt in anderen GIS-Softwarepaketen wie MapInfo und GeoMedia verwendet werden.

Shapefiles können in ARC/INFO-Coverages konvertiert werden und umgekehrt. Die Konvertierung von einem Shapefile in ein Coverage erfordert den Aufbau topologischer Beziehungen und das Entfernen doppelter Bögen. Die Konvertierung von einem Coverage in ein Shapefile ist einfacher. Wenn ein Coverage jedoch topologische Fehler aufweist, z. B. Linien, die nicht perfekt verbunden sind, können die Fehler zu Problemen mit fehlenden Features im Shapefile führen. (http://geolibrary.uidaho.edu/courses/geog385/Lectures/1/)

Die vektortopologischen Fähigkeiten der GIS-Software lassen sich in zwei Gruppen einteilen

1. Gespeicherte Topographie (traditionell)

Überlegungen zum Speicherplatz für die gespeicherte Topologie sind erforderlich

Topologie wird erstellt, wenn neue Daten hinzugefügt werden

Fehler werden vor der Analyse erkannt und bereinigt

Kenntnisse zur Pflege des Datensatzes erforderlich

2. Dynamische Topographie (nicht traditionell)

Topologie wird im laufenden Betrieb erstellt und nicht gespeichert

Überlegungen zum Speicherplatz für gespeicherte Topologie minimal

Topologie wird während der Nutzung/Analyse erstellt

Datendosis nicht veraltet

Fehler werden nicht unbedingt vor der Analyse erkannt

Weniger Kenntnisse erforderlich, um den Datensatz zu pflegen

(Geo Asia Pacific August/September 1999: Michelle Legault, GIS Analyst Research Center, University of Science and Technology, Clearwater Bay, Kowloon, Hongkong)

Konnektivität

Konnektivität ermöglicht es, eine Route zum Flughafen zu identifizieren oder Bäche mit Flüssen zu verbinden oder einem Weg von der Wasseraufbereitungsanlage zu einem Haus zu folgen. So funktioniert es.

Rufen Sie die Arc-Knoten-Datenstruktur wieder auf. Ein Bogen wird durch zwei Endpunkte definiert, wobei der Von-Knoten angibt, wo der Bogen beginnt und ein Nach-Knoten angibt, wo er endet. Dies wird als Arc-Knoten-Topologie bezeichnet.

Die Arc-Knoten-Topologie wird durch eine Arc-Knoten-Liste unterstützt. Die Liste identifiziert die Von- und Bis-Knoten für jeden Bogen. Verbundene Bögen werden bestimmt, indem die Liste nach gemeinsamen Knotennummern durchsucht wird. Im folgenden Beispiel ist es möglich festzustellen, dass sich die Bögen 1, 2 und 3 alle schneiden, weil sie sich den Knoten 11 teilen. Der Computer kann feststellen, dass es möglich ist, entlang von Bogen 1 zu fahren und auf Bogen 3 abzubiegen, weil sie einen gemeinsamen Knoten haben (11), aber es ist nicht möglich, direkt von Bogen 1 auf Bogen 5 abzubiegen, da sie keinen gemeinsamen Knoten haben. (ESRI, 1998)

Nachbarschaft

Zwei geografische Merkmale, die eine gemeinsame Grenze haben, werden als benachbart bezeichnet. Kontiguität ist das topologische Konzept, das es dem Vektordatenmodell ermöglicht, die Nachbarschaft zu bestimmen.

Denken Sie daran, dass der Von-Knoten und der Nach-Knoten einen Bogen definieren. Dies gibt die Richtung eines Bogens an, so dass die Polygone auf seiner linken und rechten Seite bestimmt werden können. Links-Rechts-Topologie bezieht sich auf die Polygone auf der linken und rechten Seite eines Bogens. In der folgenden Abbildung befindet sich Polygon B links von Bogen 6 und Polygon C rechts. Somit kann erkannt werden, dass die Polygone B und C benachbart sind.

Beachten Sie, dass die Beschriftung für Polygon A außerhalb der Bereichsgrenze liegt. Dieses Polygon wird als externes oder Universumspolygon bezeichnet und repräsentiert die Welt außerhalb des Untersuchungsgebiets. Das Universumspolygon stellt sicher, dass jeder Bogen immer eine linke und rechte Seite definiert hat. (ESRI, 1998)

Bereichsdefinition

Viele der geografischen Merkmale, die dargestellt werden sollen, decken ein unterscheidbares Gebiet auf der Erdoberfläche ab, beispielsweise Seen, Landparzellen und Zählgebiete. Ein Bereich wird im Vektormodell durch eine oder mehrere Grenzen dargestellt, die ein Polygon definieren. Obwohl dies nicht intuitiv klingt, stellen Sie sich einen See mit einer Insel in der Mitte vor. Der See hat eigentlich zwei Grenzen, die, die seinen äußeren Rand definiert, und die Insel, die seinen inneren Rand definiert. In der Terminologie des Vektormodells definiert eine Insel eine innere Grenze (oder ein Loch) eines Polygons. So wird Topologie verwendet, um Bereiche zu definieren.

Denken Sie daran, dass die Arc-Knoten-Struktur Polygone als geordnete Liste von Bögen und nicht als geschlossene Schleife von x, y-Koordinaten darstellt. Dies wird als Polygonbogen-Topologie bezeichnet. In der Abbildung unten besteht Polygon F aus den Bögen 8, 9, 10 und 7 (die 0 vor der 7 zeigt an, dass dieser Bogen eine Insel im Polygon bildet).

Jeder Bogen erscheint in zwei Polygonen (in der Abbildung unten erscheint Bogen 6 in der Liste für die Polygone B und C). Da das Polygon einfach die Liste von Bögen ist, die seine Grenze definieren, werden Bogenkoordinaten nur einmal gespeichert, wodurch die Datenmenge reduziert und sichergestellt wird, dass sich die Grenzen benachbarter Polygone nicht überlappen. (ESRI, 1998)

6.3 Besonderheit des Vektordatenmodells

Der Overlay-Vorgang untersucht zwei Datasets, um zu bestimmen, welche geografischen Features an derselben Position vorhanden sind.

Region

Regionen unterstützen die Modellierung komplexer Beziehungen zwischen geographischen Features, die als Polygone dargestellt werden. Während der Baustein eines Polygons der Bogen ist, ist der Baustein einer Region das Polygon. Daher wird eine Region als ein Satz von Polygonen dargestellt.

Eine der Grundvoraussetzungen für die Darstellung von geographischen Objekten als Polygone besteht darin, dass die Polygone nicht überlappen und die dargestellte Fläche vollständig abdecken. Diese Einschränkung entfällt für Regionen. In einer Region können die Polygone, die geografische Merkmale darstellen, freistehend sein, sie können sich überlappen und müssen nicht die Gesamtfläche ausschöpfen. Beispielsweise wird eine Region mit Waldbrandschäden durch Polygone dargestellt, die das Gebiet und den Zeitpunkt des Schadens angeben.

Eine weitere Prämisse von Polygonen ist, dass jedes geografische Feature durch ein Polygon repräsentiert wird. Dies wird für Regionen erweitert, sodass ein einzelnes geografisches Feature durch mehrere Polygone dargestellt werden kann. Zum Beispiel sind die Inseln des Bundesstaates Hawaii eine Region, die aus mehreren Polygonen besteht.

Wie bei Punkten, Linien und Polygonen erhält jede Region eine eindeutige Kennung. Wie bei Polygonen werden Fläche und Umfang für jede Region beibehalten.

Das Konstruieren von Regionen mit Polygonen ähnelt dem Konstruieren von Polygonen aus Bögen. Während ein Polygon eine Liste von Bögen ist, ist eine Region einfach eine Liste von Polygonen. Ein wichtiger Unterschied besteht darin, dass die Reihenfolge der Polygone nicht signifikant ist.

Das Konstruieren überlappender Bereiche ähnelt ebenfalls dem Konstruieren von Polygonen. Während Polygone dort, wo sie sich treffen, einen gemeinsamen Bogen teilen, teilen sich Regionen ein Polygon, wo sie sich überlappen.

Regionen verbessern das Datenmanagement erheblich, da sie viele verschiedene Arten von geografischen Merkmalen in einer einzigen Ansicht integrieren und gleichzeitig die Merkmale der ursprünglichen geografischen Merkmale beibehalten. Das Verwalten von Beziehungen zwischen geografischen Merkmalen innerhalb des Datenmodells ist besonders bei der Durchführung komplexer Analysen wertvoll. (ESRI, 1998)

Im Allgemeinen ist ein Netzwerk ein System miteinander verbundener linearer Merkmale, durch das Ressourcen transportiert oder Kommunikation erreicht wird. Das NETWORK-Datenmodell ist eine abstrakte Darstellung der Komponenten und Eigenschaften realer Netzwerksysteme. Das Modell besteht aus Netzverbindungen, Netzknoten, Haltestellen, Zentren und Abbiegern. Der Schlüssel zur Erstellung erfolgreicher Netzwerkmodelle liegt im Verständnis der Beziehung zwischen den Eigenschaften physikalischer Netzwerksysteme und der Darstellung dieser Eigenschaften durch die Elemente des Netzwerkmodells.

Network bietet Tools zum Auffinden von Pfaden – dem kürzesten oder minimalen Impedanzpfad durch ein Netzwerk. Dazu gehören auch Touren - ein heuristisches Verfahren zum sogenannten Handlungsreisenden-Problem, das den effizientesten Weg zu einer Reihe von Standorten findet. Zuweisungsfunktionen weisen Teile des Netzwerks einem Ressourcenversorgungsstandort zu. Location-Allocation bestimmt Standortstandorte und ordnet die Nachfrage den Standorten zu. (ESRI, 1998)

6.4 Anwendungen des Vektordatenmodells

Eine Fallstudie zum Vektordatenmodell: Standortauswahl für Kino in Khulna Stadt als Freizeiteinrichtung für Geringverdiener

Eine Stadt kann mit einer großen Anzahl von Industrien, Wohnvierteln, Geschäftsniederlassungen, Einkaufsmöglichkeiten usw. gesegnet sein. Aber es bleibt hinter seinen höchsten Möglichkeiten zurück, wenn es nicht über jene Lebensqualitäten verfügt, die ein fruchtbareres und glücklicheres Leben für seine Menschen darstellen. Erholung gehört zu den Qualitäten einer Stadt, die das Leben glücklicher machen. Es gibt nichts im Stadtplan, das wichtiger zu diesem reicheren Leben der Menschen beitragen könnte, als angemessene Erholungsangebote (Mahamud, 1999).

In der Gesellschaft werden Freizeitangebote für die Menschen jeden Alters und aller Gruppen dringend benötigt. Die Menschen haben erst vor kurzem und in sehr begrenztem Umfang begonnen, Freizeitbedürfnisse auf wissenschaftliche Weise zu verstehen. Es ist eine Planung erforderlich, um Freizeiteinrichtungen in geeigneter Weise und in geeigneter Lage bereitzustellen.

Im Allgemeinen wird die einkommensschwache Gruppe der Gesellschaft immer mehr von Freizeiteinrichtungen benachteiligt, da sie sich viele verfügbare Freizeiteinrichtungen nicht leisten können. In Khulna City sind die öffentlichen Freizeiteinrichtungen sehr begrenzt. Selbst in der Stadt Khulna herrscht ein echter Mangel an bebauten öffentlichen Freiflächen oder Parks. In dieser Situation kann das Kino eine günstige Freizeiteinrichtung für die einkommensschwache Bevölkerungsgruppe dieser Stadt sein. In dieser Studie wurde der Servicebereich des bestehenden Kinos von Khulna abgegrenzt und der Standort für Kino im nicht bedienten Bereich anhand einiger Kriterien ermittelt. Diese Studie zeigt die praktische Anwendung von Vektordatenmodellfunktionen.

Der Standort des Kinos ist ein wichtiges Thema im Hinblick auf seine Servicenutzer. Wenn sich ein Kino an einem ungewöhnlichen Ort befindet, werden die Leute nicht dorthin gehen und die dafür aufgewendeten Ressourcen bleiben ungenutzt. Im Falle der Stadt Khulna gibt es in der Nähe des CBD eine Ansammlung von Kinos. Neben der BIDC Road in der Nähe von Khalishpur gibt es zwei Kinos im Umkreis von 100 m. So haben die Leute an einem Ort mehr Auswahl, um Filme im Kino zu sehen, da es mehr als ein Kino in angemessener Entfernung gibt. Vom Standort des Kinos von Khulna City (Karte 6.1 ) scheint es, dass es einige Orte geben kann, von denen die Entfernung zum nächsten Kino erheblich groß ist.


6.4.2 Kriterien für die Standortauswahl

Die Standortauswahl oder geeignete Standortanalyse ist eine sehr verbreitete Anwendung von GIS. Aber in den meisten Fällen ist die Anwendung von Overlay und Puffer beliebt. In dieser Studie wurde zunächst der nicht versorgte Bereich durch eine Netzzuordnungsanalyse ermittelt und dann die anderen GIS-Analysetechniken zusammen mit Overlay und Puffer angewendet.

1. Der Bereich muss außerhalb des Servicebereichs des bestehenden Kinos liegen

2. Der Standort muss sich in einem landwirtschaftlichen, gewerblichen oder gemischt genutzten Gebiet befinden, das außerhalb von Wohngebieten liegt

3. Das Gebiet muss innerhalb des Wohnortes der unteren und mittleren Einkommensgruppe liegen

4. Der Bereich muss innerhalb von 20 m zur Straße liegen

5. Die Fläche muss mehr als 2 Hektar betragen

Berechnung der zugewiesenen Fläche

Kino ist ein Medium der Erholung für die arme und die Mittelschicht, da sie sich zu Hause keine andere teure Freizeit leisten können. Die Kinonachfrage wurde sowohl aus Sekundärdaten als auch aus Feldstudien berechnet. Die Orte, an denen die Probe entnommen wurde, sind in Karte 6.1 .


Fügen Sie in beiden Plotbefehlen bty="n" hinzu.

Fügen Sie für Zeitreihen frame.plot=FALSE hinzu, um denselben Effekt zu erzielen.

Dies ist ganz einfach, Sie fügen einfach das Argument axis=FALSE ein. Erwägen:

Beachten Sie, dass dies für Histogramme genauso gut funktioniert:

Bevor Sie Plot aufrufen, wird es für Zoo behoben. Es kann es auch für eine Vielzahl von Situationen beheben, in denen es nicht an den Plotting-Befehl übergeben werden kann.

(Siehe bty-Option in der par()-Hilfe für andere Arten von Frames für den Plot)

Ich beantworte die allgemeinere Frage des Entfernens von Grenzen in Grundstücken, ohne auf Tufte Bezug zu nehmen.

Für ein Histogramm habe ich nicht gefunden, dass btn='n' den Rand losgeworden ist.

Eine Lösung, die für Histogramme funktioniert und für alle Diagrammtypen funktionieren sollte, besteht darin, den Linientyp für den Rahmen auf unsichtbar zu setzen: lty="blank"


5 Antworten 5

Dies ist ein Job für die Schnellmaskierungsfunktion. I erlaubt Ihnen, auf der Auswahl selbst zu malen, als ob es das Bild wäre -

Nachdem Sie also wie oben mit dem Zauberstab den Rahmen selbst ausgewählt haben, klicken Sie auf den kleinen "versteckten" Button links neben der horizontalen Bildlaufleiste. Dies zeigt eine rot getönte, durchscheinende Darstellung Ihrer Auswahl selbst, und alle Malereien, die Sie tun, wirken sich darauf aus - es ist eine Graustufen-Zeichnung, also bedeutet Vollweiß (255) "vollständig ausgewählt" und Schwarz (0) bedeutet "nicht ausgewählt" (obwohl die Darstellung in dieser Ansicht ist invertiert: ausgewählte Bereiche werden transparent, nicht ausgewählte Bereiche undurchsichtig). Verwenden Sie dann einfach das Eimerfüllwerkzeug, um die Außenseite (oder Innenseite) Ihrer Auswahl mit "Weiß" zu füllen (was den durchscheinenden Farbton transparent macht), kehren Sie zur normalen Bearbeitung zurück, indem Sie erneut auf die Schnellmaske klicken - und Sie sind getan.


4 Antworten 4

Die Farbtiefe ist die Anzahl der Bits/Bytes, die verwendet werden, um eine Farbe anzuzeigen. Derzeit verwenden Sie eine 8-Bit-Tiefe, die Ihnen 256 Farben (0-255) bietet. Dies ist ein indizierter Farbansatz, die verschiedenen Werte (von 0-255) werden palettiert, was bedeutet, dass jeder der 256 Werte auf eine Farbdarstellung zeigt, die in der Kopfzeile des Grafikdokuments, an dem Sie arbeiten, gespeichert ist.

Es gibt eine Reihe weiterer Formate, mit denen Sie die gewünschten glatten Kanten herstellen können. Versuchen Sie, Ihr Bildformat auf 24- oder 32-Bit-Tiefe zu ändern.

In GIMP können Sie dies so tun.

Dann musst du das ankreuzen Feder Option in der Rahmen auswählen Bord Dialogbox.


3 Antworten 3

Wenn es sich um Formen handelt, wählen Sie alle aus, duplizieren Sie sie und vereinigen Sie sie dann zu einer Form.

Die schnellste Lösung, die mir einfällt, um einen Pfad um einen Klumpen von Formen zu verfolgen, ist die Verwendung des Eimerfüllwerkzeugs. Zeichnen Sie zuerst ein farbiges Feld (um die Eimerfüllung einzuschränken) um die Formen, wählen Sie das Feld aus und zoomen Sie auf die Auswahl.

Wählen Sie als Nächstes das Füllwerkzeug für Eimer aus und legen Sie den Schwellenwert auf 10 oder mehr fest, damit Sie eine gleichmäßige Füllung erhalten. (Stellen Sie auch den Strich auf einen großen Wert ein, sagen wir 6 Pixel und keine Füllung, damit Sie das Ergebnis deutlich sehen können). Klicken Sie mit dem Eimerfüllwerkzeug zwischen Ihrer Box und der Gruppe von Formen

Die resultierende Eimerfüllung hat auch einen Rand am Rand Ihrer farbigen Box.

Entfernen Sie einfach die äußere Form, indem Sie die Knoten der äußeren Form mit dem Knotenwerkzeug auswählen und dann löschen:

Sie können nun die Umrandung nach hinten in die Formgruppe verschieben, den Strich einfärben oder seine Dicke erhöhen oder ihm eine Füllung geben. Löschen Sie das Feld, wenn Sie möchten.

Wenn eine Bitmap in der Gruppe von Formen enthalten ist, würde ich zuerst einen Pfad mit einem dicken Strich um die Bitmap ziehen, um eine glatte, gleichmäßig gefärbte Kante zum Nachzeichnen zu erhalten, bevor ich die Eimerfüllung mache.

Dies ist möglicherweise nicht sehr genau – beachten Sie, dass es einige abgerundete Ecken gibt, an denen sie scharf sein sollten. Dies kann mit dem Knotentool korrigiert werden. Wenn ich einen genaueren Rahmen haben möchte, würde ich eine Vereinigungsoperation für alle Vektorformen durchführen, einschließlich der Form, die ich um eine Bitmap gelegt habe (ich könnte die resultierende Form sogar vergrößern, indem ich ihr einen dicken Strich verleihe, den Strich in Pfade umwandele, den Pfad auseinander zu brechen und nur die äußere Form als Grenze beizubehalten).


4 Antworten 4

Das Stiftwerkzeug wird besser sein, als jede Linie einzeln zu zeichnen.

Sie können jedoch Ihre Pfade nehmen und zu einem einzigen Pfad kombinieren, indem Sie sie auswählen und zu:

Objekt → Pfad → Verbinden oder Rechtsklick → Beitreten

und dann können Sie diesen Weg umrunden, indem Sie zu:

Effekt → Stilisieren → Runde Ecken

Alternativ können Sie nach dem Kombinieren der Pfade die Punkte einzeln auswählen und die Ecken mit dem Stiftwerkzeug nach Belieben anpassen.

Fügen Sie einem der Liniensegmente, beispielsweise dem vertikalen Segment, einen Ankerpunkt in einem bestimmten Abstand vom Eckankerpunkt (p1) hinzu und verwenden Sie dann das Direktauswahlwerkzeug (weißer Pfeil in der Werkzeugleiste), um das Original zu verschieben Eckpunkt im gleichen Abstand entlang des anderen Liniensegments.

Wählen Sie dann das Werkzeug Ankerpunkt konvertieren (Umschalt-C) und klicken Sie auf den neuen Punkt, um ihn in einen Kurvenankerpunkt umzuwandeln – halten Sie die Maustaste gedrückt, während Sie den Ziehpunkt nach unten ziehen, der aus dem Punkt herauskommt. Ziehen Sie diesen Ziehpunkt nach unten, bis er auf derselben Ebene mit der anderen Linie ist. Sie werden sehen, wie sich die Kurve entwickelt… (Halten Sie beim Ziehen auch die Umschalttaste gedrückt, um sicherzustellen, dass das Ziehen perfekt gerade ist.)

(Die anderen leicht abgerundeten Ecken wurden wahrscheinlich einfach mit der Schaltfläche Round Joint and Round Caps im Stroke-Panel erstellt.)


2 Antworten 2

Nur um es klarzustellen, das Folgende basiert auf Experimenten und kann sehr irreführend sein.

Der Umriss des Algorithmus zum Generieren des Netzes für Plot3D und DensityPlot scheint wie folgt zu sein:

  • Erstellen Sie ein Anfangsnetz basierend auf der Anzahl der Plotpunkte
  • Injizieren Sie alle vom Benutzer bereitgestellten Punkte in das Netz
  • Verfeinern Sie das Netz

Bei der Bereitstellung einer expliziten Liste von Punkten an PlotPoints sind zwei Probleme zu beachten. Die erste besteht darin, dass das Einfügen eines Punktes in das anfängliche Netz durch die Unterteilung des umgebenden Dreiecks funktioniert, was zu sehr langen dünnen Dreiecken im Netz führen kann. Das zweite, kritische Problem ist, dass die Die Netzverfeinerung scheint fehlzuschlagen, wenn zu viele Punkte in ein grobes Anfangsnetz eingefügt werden.

Um diese Probleme zu demonstrieren, werde ich eine Funktion definieren, um das Netz anzuzeigen, das mit den angegebenen PlotPoints- und MaxRecursion-Einstellungen erhalten wurde:

Zunächst können wir uns das ohne Verfeinerung und eine kleine Anzahl von Plotpunkten erhaltene Netz ansehen. Hier gibt es keine Überraschungen:

Wenn ein expliziter Zusatzpunkt angegeben wird, wird das umgebende Dreieck unterteilt:

Das Problem mit den dünnen Dreiecken ist klar, vergleichen Sie zum Beispiel das erste Mesh oben mit einer Delaunay-Triangulation der gleichen Punkte:

Wenn wir mit MaxRecursion eine Netzverfeinerung zulassen, können wir sehen, dass der benutzerdefinierte Punkt abgetastet wird nach dem die anfänglichen Mesh-Punkte, aber Vor die Verfeinerung. Ich habe den vom Benutzer angegebenen Punkt rot hervorgehoben:

Ich werde jetzt zu einer interessanteren Plotfunktion wechseln, um die Verfeinerung offensichtlicher zu machen. Hier sind die Netze, bei denen unser einzelner benutzerdefinierter Punkt und die adaptive Netzverfeinerung aktiviert sind:

Es ist etwas Interessantes passiert - die Netze mit 3 und 4 anfänglichen Plotpunkten wurden verfeinert, aber das mit 2 anfänglichen Plotpunkten nicht. (Deutlich etwas wurde gemacht, da das dünne Dreieck verschwunden ist - es sieht jetzt aus wie die Delaunay-Triangulation, aber es gab keine Unterteilung.)

Noch interessanter wird es, wenn wir die Anzahl der vom Benutzer bereitgestellten Punkte erhöhen:

Bei 10 Punkten ist nun auch das Netz mit 3 anfänglichen Plotpunkten nicht verfeinert. (Beachten Sie, dass es keinen festen Schwellenwert gibt. Wenn Sie den Code mehrmals ausführen, wird das Netz manchmal verfeinert und manchmal nicht.)

Der Trend setzt sich fort, wenn wir die Anzahl der vom Benutzer bereitgestellten Punkte erhöhen:

Aus diesem Grund kommen die Plots in der Frage schlecht heraus - bei einer großen Anzahl von vom Benutzer bereitgestellten Punkten und einem anfänglichen Netz von None (dh 2) Punkten findet keine adaptive Verfeinerung statt, und der Plot basiert auf einem schrecklichen Mesh mit vielen dünnen Dreiecken.

Die einzige Lösung, die ich sehen kann, ist die in der Frage angegebene - verwenden Sie eine ausreichend große Anzahl von anfänglichen Plotpunkten (oder automatisch), damit die Netzverfeinerung einsetzt:

Es ist nicht klar, warum die Netzverfeinerung fehlschlägt. Ich vermute, dass der Algorithmus, der entscheidet, ob ein Dreieck unterteilt werden soll, von den langen, dünnen Dreiecken getäuscht wird, die erscheinen, wenn die vom Benutzer angegebenen Punkte eingefügt werden. Idealerweise würde nach dem Einfügen der zusätzlichen Punkte eine vollständige Neutriangulation des Netzes erfolgen, indem so etwas wie eine Delaunay-Triangulation verwendet wird, aber ich kann keinen Weg finden, dies zu erreichen.

Wie MichaelE2 darauf hingewiesen hat, ist es nicht so eindeutig wie die rekursive Netzverfeinerung, die entweder funktioniert oder nicht funktioniert. Stattdessen scheint die Regel zu sein, dass ein Benutzerpunkt in jeder quadratische Zelle des ursprünglichen Netzes wird die Verfeinerung vollständig verhindern. However, when an original mesh cell is free of extra points, subdivision can occur in that cell - and propagate to adjacent cells. The propagation won't continue through the whole region though, rather it appears to spread by a few cells per recursion.

To demonstrate, here's a mesh with a single user-defined point (shown in blue) placed inside each square cell. There is no mesh refinement at all:

Now I'll remove the extra point from just one cell, in the middle. This time I'll highlight only the extra points added to the mesh by the refinement algorithm:

The refinement has started in the empty cell (the blue disk shows where the user point was removed) and spread to nearby cells. Here's an animation showing the result as MaxRecursion is increased from 0 to 6.

The upshot seems to be that when specifying extra plot points, care must be taken to ensure that there are some initial mesh cells without extra points in, and also a high enough MaxRecursion to propagate the mesh refinement from those cells across the whole region.