Linien-Aliasing in Karten-Services
In diesem Thema
Die in ArcMap verwendete Grafik-Pipeline basiert auf der GDI-Technologie (Graphics Device Interface) von Microsoft. Eine der Beschränkungen dieser Technologie besteht darin, dass Grafiken nur von ganzzahligen Koordinaten dargestellt werden können. Da für reale Geometrie normalerweise nicht nur ganze Zahlen verwendet werden, werden die Koordinaten auf- oder abgerundet, wenn sie mit dieser Grafik-Pipeline gezeichnet werden. Dies ist in Vektorexportformaten wie PDF zu beobachten. Wenn Sie genau hinsehen, können Sie bei Vektorlinien häufig "Treppenstufen" erkennen.
Die von Grundkarten-Layern und Karten-Services verwendete Grafik-Pipeline kann die richtigen Nicht-Ganzzahl-Koordinaten der Geometrie verwenden und das Rendering mehr als pixelgenau durchführen. Dies führt zu einer höheren Genauigkeit dieser Vektorformate. Wenn diese Features jedoch in Raster-Formaten wie PNG oder BMP gezeichnet werden, müssen die Werte der Geometrie wieder gerundet werden, um die geforderte Auflösung pixelgenau wiedergeben zu können. Bei niedrigen Auflösungen kann dies teilweise auch zu Aliasing mit Multilayer-Liniensymbolen führen, z. B. bei Symbolen für eine Straße mit Straßenbegrenzung.
Karten-Services können das Antialiasing anwenden, um die Auswirkungen des oben beschriebenen Problems abzuschwächen, aber es gibt auch einige Fälle, in denen das Antialiasing nicht die beste Möglichkeit darstellt. Bei Verwendung des Antialiasings kann sich z. B. die Performance eines Karten-Service reduzieren. Je nach den Anforderungen des Service kann dies ggf. nicht akzeptabel sein. Außerdem ist das Antialiasing bei Zielformaten, die eine 8-Bit-Palette verwenden (wie die Formate PNG 8 oder GIF), unter Umständen nicht so effektiv wie sonst, weil zum Rendern der fortlaufenden Farbfolgen eine Farbmischung erforderlich ist. Antialiasing ist für die Grundkarten-Layer-Darstellung nicht verfügbar.
Das Fenster Vorbereiten verfügt über eine Analysefunktion, mit der Sie Multilayer-Liniensymbole ermitteln können, die ggf. zur Verstärkung des Problems beitragen, sodass Sie dieses Problem ohne Verwendung des Antialiasings abschwächen können.
Für diese Analysefunktion gibt es zwei Lösungen: Die erste besteht darin, diesen Layer für die automatische Anpassung der Liniengrößen während der Konvertierung zu kennzeichnen. Wenn das Kartendokument als Karten-Service freigegeben wird, werden die Linienbreiten der Layer, für die diese Option aktiviert ist, automatisch geändert. Damit wird sichergestellt, dass sie durchgängig mit 96 dpi oder höher gerendert werden. Die Größe des Symbols im Kartendokument bleibt gleich. Für die meisten Benutzer ist diese Lösung ausreichend. Stellen Sie im Vorschaufenster sicher, dass die Darstellung der korrigierten Linien Ihren Erwartungen entspricht. Diese Analysefunktion wird nicht für Grundkarten-Layer angezeigt, weil in dem Fall immer die automatische Anpassung ausgewählt wird.
Eine alternative Lösung ist das manuelle Ändern der Struktur des Multilayer-Liniensymbols, um geeignetere Liniengrößen zu erzielen. Dies ermöglicht auch eine Konvertierung zur Verwendung mit einem anderen DPI-Zielwert als 96 dpi (Beispiel: 72 dpi).
Entwerfen von Linien für eine bestimmte Auflösung (dpi)
Um die passenden Liniengrößen für eine bestimmte Auflösung zu ermitteln, geben Sie die Größen der einzelnen Symbole im Multilayer-Liniensymbol in die folgende Formel ein. Wie bereits erwähnt, sollte der Wert für TargetResolution die gewünschte Mindestauflösung widerspiegeln, bei der das Symbol verwendet werden soll.
WidthInPixels = (LineWidth in Punkt * TargetResolution in dpi)/72
Falls WidthInPixels kleiner als 1,5 ist, sollte die Breite nicht geändert werden.
Falls WidthInPixels größer oder gleich 1,5 ist, können Sie die Bearbeitungsbreite mit der folgenden Formel ermitteln:
- NewWidthInPoints = (WidthInPixels + 0,5)
- Runden Sie NewWidthInPoints anschließend auf den nächsten Ganzzahlwert auf, der nicht größer als NewWidthInPoints ist.
- final line width sollte auf (RoundedNewWidthInPoints * 72) / TargetResolution festgelegt sein.
Wenn die gewünschte Auflösung beispielsweise 44 dpi und die Breite des Liniensymbols 2,60 beträgt, ergibt sich folgende Berechnung:
- WidthInPixels = (2,60 * 44) / 72.0
- WidthInPixels ist 1,5888888 und somit größer als 1,5. Wir fahren also fort:
- NewWidthInPoints = (1,588888 + 0,5) = 2,10
- Abrunden: NewWidthInPoints = 2,0
- final line width sollte auf (2,0 * 72) / 44 = 3,27 Punkt festgelegt werden
Für ein weiteres Beispiel, bei dem die gewünschte Auflösung 120 dpi und die Breite des neuen Liniensymbols 2,60 beträgt, ergibt sich folgende Berechnung:
- WidthInPixels = (2,60 * 120) / 72
- WidthInPixels ist 4,33333 und somit größer als 1,5. Wir fahren also fort:
- NewWidthInPoints = (4,33333 + 0,5) = 4,83
- NewWidthInPoints wird auf die nächste Ganzzahl abgerundet (also 4,0).
- final line width sollte auf (4,0 * 72) / 120 = 2,4 Punkt festgelegt werden