Linien-Aliasing in einem optimierten Karten-Service
Die in ArcMap verwendete Grafik-Pipeline und der standardmäßige Karten-Service basieren 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 verwendete Grafik-Pipeline und der optimierte Karten-Service können 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.
Der optimierte Karten-Service kann das Anti-Aliasing anwenden, um die Auswirkungen des oben beschriebenen Problems abzuschwächen, aber es gibt auch einige Fälle, in denen das Anti-Aliasing nicht die beste Möglichkeit darstellt. Bei Verwendung des Anti-Aliasings kann sich z. B. die Performance eines optimierten Karten-Service reduzieren. Je nach den Anforderungen des Service kann dies ggf. nicht akzeptabel sein. Außerdem kann das Anti-Aliasing bei Zielformaten, die eine 8-Bit-Palette verwenden (wie die Formate PNG8 oder GIF), unter Umständen nicht so effektiv wie sonst sein, weil zum Rendern der fortlaufenden Farbfolgen eine Farbmischung erforderlich ist. Beachten Sie, dass Anti-Aliasing nicht verfügbar für Grundkarten-Layer-Zeichnung ist.
Um dieses Problem ohne die Verwendung des Anti-Aliasings abzuschwächen, verfügt das Fenster Vorbereiten über eine Analysefunktion, mit der Sie Multilayer-Liniensymbole ermitteln können, die ggf. zur Verstärkung des Problems beitragen.
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 in eine Map Service Definition (MSD) konvertiert 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 in der Karte (MXD) 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. Beachten Sie, dass diese Analysefunktion nicht für Grundkarten-Layer angezeigt wird, da für diesen 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 folgenden Formeln 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.