Mehr

Entfernen leerer Geometrie mit ogr2ogr

Entfernen leerer Geometrie mit ogr2ogr


Ich verwende ogr2ogr, das von Shape -> Shape konvertiert, um Shapefiles zu bereinigen, bevor sie über shp2pgsql zu PostGIS hinzugefügt werden.

Das Problem, auf das ich stoße, ist, wenn das Shapefile Datensätze enthält, die keine Geometrie haben, was Probleme mit meinem System verursacht.

Kennt jemand eine Möglichkeit, mit ogr2ogr Datensätze ohne Geometrie auszuschließen?

Gibt es sowieso auch, um ungültige Geometrie zu entfernen. Z.B. zwei Knoten an der gleichen Stelle?


Sie können beides mit dem SQLite-Dialekt http://www.gdal.org/ogr_sql_sqlite.html tun. Der SQLite-Dialekt bietet Ihnen alle Möglichkeiten von SQLite http://www.sqlite.org/lang.html und SpatiaLite http://www.gaia-gis.it/gaia-sins/spatialite-sql-latest.html. Ich bin mir jedoch nicht sicher, ob zwei Scheitelpunkte an derselben Position Geometrien ungültig machen.

Zum Entfernen der leeren Geometrien:

ogr2ogr -f "ESRI Shapefile" -dialect sqlite -sql "select * from input where Geometrie is not null" output.shp input.shp

Um gleichzeitig ungültige Geometrien zu korrigieren, wird der -sql-Teil etwas länger, da Sie die Attribute einzeln für die Abfrage auswählen müssen

ogr2ogr -f "ESRI Shapefile" -dialect sqlite -sql "wähle ST_MakeValid(geometry) als Geometrie, attr_1, attr_2, attr_3, attr_4 aus der Eingabe, wo die Geometrie nicht null ist" output.shp input.shp

Wenn wiederholte Scheitelpunkte nicht als Fehler betrachtet werden, können Sie diese beseitigen, indem Sie die Geometrien mit einer Toleranz von Null vereinfachen

ogr2ogr -f "ESRI Shapefile" -dialect sqlite -sql "wähle ST_Simplify(geometry,0) als Geometrie, attr_1, attr_2, attr_3, attr_4 aus der Eingabe, wo die Geometrie nicht null ist" output.shp input.shp

Befehle werden nicht getestet, aber ich werde die Antwort bearbeiten, wenn sie für Sie nicht funktionieren.


Ich habe SQLite nicht in meinem ogr2ogr kompiliert, aber Sie können dies umgehen, indem Sie den Standard-SQL-Dialekt verwenden und "wo ogr_geom_wkt nicht wie '%EMPTY%'" hinzufügen.


Darüber hinaus können Sie eine ungefähre Antwort erhalten, indem Sie den Katalog abfragen - wenn null_frac null ist, zeigt dies keine Nullen an, sollte jedoch mit "echten" Daten verglichen werden:

In Postgresql können Sie die Daten direkt aus den Statistiken abrufen:

Möglicherweise erhalten Sie ein paar falsch positive Ergebnisse, daher ist eine erneute Überprüfung angebracht, nachdem die Kandidaten gefunden wurden.

Ich zeige Ihnen meine Lösung in T-SQL für SQL Server 2008. Ich bin mit PostgreSQL nicht vertraut, hoffe aber, dass Sie in meiner Lösung eine Anleitung finden.

Kurz gesagt, habe ich eine Testtabelle mit 5 Spalten erstellt, wobei ID und testTime von der Funktion identity und getdate() generiert werden, während die 3 varchar-Spalten von Interesse sind. Einer hat nur NULL-Werte, einer hat keine NULL-Werte, der andere ist eine kombinierte Spalte. Das Endergebnis des Skripts ist, dass das Skript die Spalte nullColumn als alle Zeilen NULL enthält.

Die Idee war, die Funktion DATALENGTH für jede Spalte zu berechnen (berechnet die Anzahl der Bytes für einen bestimmten Ausdruck). Also habe ich den DATALENGTH-Wert für jede Zeile jeder Spalte berechnet und pro Spalte eine SUMME erstellt. Wenn die SUM pro Spalte NULL ist, hat die gesamte Spalte NULL-Zeilen, andernfalls befinden sich einige Daten darin.

Jetzt müssen Sie die Übersetzung für PostgreSQL finden und hoffentlich kann Ihnen ein Kollege dabei helfen. Oder vielleicht gibt es eine schöne Systemansicht, die zeigt, wie dumm ich bin, das Rad neu zu erfinden :-).


GeoFile ist eine Serie, die sich der Betrachtung geografischer Daten, ihrer Funktionen und ihrer Verwendung widmet. In diesem Artikel diskutieren wir räumlich&hellip

Abdullah Alger Produkte Datenbanken Preise Add-Ons Rechenzentren Unternehmen Erfahren Sie warum Artikel verfassen Artikel schreiben Kundengeschichten Webinare Unternehmen Über Datenschutzrichtlinien Servicebedingungen Support Support Kontakt Dokumentation Systemstatus Sicherheit


Cara Penggunaan OGR2OGR

ogr2ogr -f “ESRI Shapefile” namatarget.shp FILESUMBERASAL.TAB -t_srs EPSG:32647

Nein, untuk tahu format apa saja yang didukung oleh OGR2OGR, silahkan lihat keterangan ogr2ogr –long-usage di atas …

Treiber OGR dapat mendeteksi otomatis sumber kita, makanya, yang perlu dikasih tahu ke OGR adalah ZIEL kita saja …

Karena saya ingin membuat SHP, makanya formatnya bernama “ESRI Shapefile”, lalu diikuti nama file yang ingin dibuat, diikuti oleh FILESUMBER.tab … dan jangan lupa untuk menambahkan target SRS nya, yaginitu karena pro sayGya, yaginitu karena pro sayGya, yaginitu karena pro ke UTM Zona 47N


Entfernen leerer Geometrie mit ogr2ogr - Geographische Informationssysteme

Wenn Sie versuchen, ogr2ogr (Version 1.9) zu verwenden, um ein Shapefile (Geometrietyp
Polygon) in File-Geodatabase (FileGDB) erhalte ich eine Fehlermeldung wie "FGDB
Layer können nicht mit dem Layer-Geometrietyp wkbUnknown erstellt werden.":

$ ogr2ogr -f filegdb out.gdb polygon.shp

Beim Hinzufügen von -nlt scheint es zu funktionieren:

$ ogr2ogr -f filegdb out.gdb polygon.shp -nlt POLYGON

Dies ist a) ein übliches OGR-Verhalten und b) ein Showstopper für mein Skript
weil ich vorher nicht weiß (und nicht bei ogrinfo nachschauen werde) was
Geometrietyp die Eingabequelle ist. Anscheinend gibt es ein Problem in der
FileGDB-Treiber.

Kann jemand diesen Fehler bestätigen und erklären?

Dein Stefan
-------------- nächster Teil --------------
Ein HTML-Anhang wurde bereinigt.
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20130421/4bea1b4d/attachment.html>

Ich bestätige dieses Verhalten weder mit 1.9.2 noch mit 1.10.0. Konvertierung funktioniert
für mich in Ordnung, ohne -nlt anzugeben. Welcher Geometrietyp wird von . gemeldet?
ogrinfo auf polygon.shp ?

Vielen Dank für die schnelle Antwort, Even!

Du hast Recht, es scheint mit Shapefile zu funktionieren - aber nicht für den WFS-Reader
(und eigener Server) testen wir.

Unten finden Sie die GML-Ausgabe unserer WFS-Quelle.

Liegt der "Fehler" also im WFS-Reader - oder sogar in unserem WFS-Antwort-XML?

Hol dir alle Hostels in der Schweiz aus der OpenStreetMap-Datenbank
("Tourismus=Herberge"). Antwort bearbeitet:

2013/4/21 Even Rouault <even.rouault at mines-paris.org>

Seltsamerweise funktioniert dieser ogrinfo-Befehl

$ ogrinfo -ro WFS:
http://openpoimap.ch/featureserver/workspace.cgi?key=HG4kFX2kEEqBSqvcswuh2E
INFO: Öffnen von `WFS:
http://openpoimap.ch/featureserver/workspace.cgi?key=HG4kFX2kEEqBSqvcswuh2E'
Verwendung des Treibers `WFS' erfolgreich.
1: Pois (Punkt)

Dies funktioniert auch, stolpert jedoch über zusätzliche URL-Parameter:
$ ogrinfo -ro WFS:
http://openpoimap.ch/featureserver/workspace.cgi?key=HG4kFX2kEEqBSqvcswuh2E&SERVICE=WFS&TYPENAME=pois
INFO: Öffnen von `WFS:
http://openpoimap.ch/featureserver/workspace.cgi?key=HG4kFX2kEEqBSqvcswuh2E'
Verwendung des Treibers `WFS' erfolgreich.
1: Pois (Punkt)
'SERVICE' wird nicht als interner oder externer Befehl erkannt,
lauffähiges Programm oder Batch-Datei.
'TYPENAME' wird nicht als interner oder externer Befehl erkannt,
lauffähiges Programm oder Batch-Datei.

2013/4/21 Stefan Keller <sfkeller at gmail.com>

Ich habe das eigentliche Problem: Es tritt mit dieser WFS-Quelle auf:
http://maps.zh.ch/wfs/FnsNSWFS?SERVICE=WFS&REQUEST=GetCapabilities

=> ogrinfo meldet keine Geometrie mit diesem WFS:

$ ogrinfo -ro WFS:http://maps.zh.ch/wfs/FnsNSWFS?TYPENAME=svo_zonen
INFO: Öffnen von `WFS:http://maps.zh.ch/wfs/FnsNSWFS?TYPENAME=svo_zonen'
Verwendung des Treibers `WFS' erfolgreich.
1: svo_zonen

Sollte sein
1: svo_zonen (Polygon)

Keine Geometrie hier in Klammern angegeben. Es ist also eine Konfiguration oder
Installationsproblem des WFS-Servers (ArcGIS)

In QGIS funktioniert dies (der QGIS-Reader scheint den Geometrietyp irgendwie zu erraten).

PS Immer noch unsicher, warum der OGR WFS-Reader über zusätzliche WFS-URL stolpert
Parameter angehängt. Kann es an dem Schlüsselparameter liegen?

$ ogrinfo -ro WFS:
http://openpoimap.ch/featureserver/workspace.cgi?key=HG4kFX2kEEqBSqvcswuh2E&SERVICE=WFS
INFO: Öffnen von `WFS:
http://openpoimap.ch/featureserver/workspace.cgi?key=HG4kFX2kEEqBSqvcswuh2E'
Verwendung des Treibers `WFS' erfolgreich.
1: Pois (Punkt)
'SERVICE' wird nicht als interner oder externer Befehl erkannt,
lauffähiges Programm oder Batch-Datei.

2013/4/21 Stefan Keller <sfkeller at gmail.com>

Ja, bei der Prüfung der
"http://maps.zh.ch/wfs/FnsNSWFS?TYPENAME=svo_zonen&SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType"
du kannst sehen :

<element name="msGeometry" type="gml:GeometryPropertyType"
minOccurs="0" maxOccurs="1"/>

Der Geometrietyp ist also undefiniert. OGR meldet dann einen unbekannten Geometrietyp.
Es könnte eine Mischung von Geometrien in einer solchen Schicht geben.

Ich vermute, dass QGIS nach dem Herunterladen den gesamten Layer-Inhalt überprüft
es, um den Geometrietyp zu bestimmen, aber der OGR WFS-Treiber tut dies nicht für
Effizienzzwecken. Es kann beim Streaming auf beliebig großen Layern betrieben werden
Modus (gilt für OGR 1.10)

Sie haben Recht mit den Klammern von URLs mit & in der Shell.

2013/4/21 Even Rouault <even.rouault at mines-paris.org>

Ja das ist es.
Genauer gesagt hat jedes Feature/Objekt/jede Instanz eine gml:Box und a
gml:Polygon (siehe unten).
Das ist eine seltsame Ausgabe von diesem ArcGIS-Server-Zeug und eine unvollständige
Antwort von DescribeFeatureType.

----
Antwort von "
http://maps.zh.ch/wfs/FnsNSWFS?SERVICE=WFS&VERSION=1.0.0&EQUEST=GetFeature&TYPENAME=svo_zonen
"
<. >
<gml:featureMitglied>
<ms:svo_zonen fid="svo_zonen.4896">
<gml:boundedBy>
<gml:Box srsName="EPSG:21781">
<gml:Koordinaten>693970.812500,273550.094000
694049.875000,273650.312500</gml:Koordinaten>
</gml:Box>
</gml:boundedBy>
<ms:msGeometry>
<gml:Polygon srsName="EPSG:21781">
<gml:outerBoundaryIst>
<gml:LinearRing>
<gml:Koordinaten>694037.000000,273550.094000
694021.625000. </gml:Koordinaten>
</gml:LinearRing>
</gml:outerBoundaryIst>
</gml:Polygon>
</ms:msGeometrie>
<ms:geodb_oid>4896</ms:geodb_oid>
<ms:objectid>49</ms:objectid>
<ms:svozoneoid>141</ms:svozoneoid>
.
</ms:svo_zonen>
</gml:featureMitglied>
.

2013/4/21 Even Rouault <even.rouault at mines-paris.org>

Für mich sollte GetCapabilities von http://http://maps.zh.ch/wfs/FnsNSWFS auch
sei genauer. Derzeit gibt es keinen Geometriehinweis (und es gibt sogar Probleme
Warnungen über fehlenden EXTENT).

Also würde DescribeFeatureType melden
type="gml:SurfacePropertyType" würde der WFS-Reader von GDAL funktionieren?

Ich dachte, die meisten WFS-Clients/-Konverter lesen GetCapabilities, nicht
Beschreiben Sie den FeatureType.

2013/4/21 Even Rouault <even.rouault at mines-paris.org>

OK. Ich sehe jetzt, dass es etwas ist, das auf der WFS-Serverseite korrigiert werden kann
[1].

Im Mapserver kann man konfigurieren:
gml_geometries "Geometrie"
gml_geometry_type "polygon"
. um den Geometrietyp explizit auf type="gml:polygonPropertyType" zu setzen.

2013/4/21 Even Rouault <even.rouault at mines-paris.org>

Nur zur Information, es ist nicht ungewöhnlich, dass WFS-Server a
allgemeiner Geometrietyp "gml:GeometryPropertyType", sogar der Layer enthält
nur ein Geometrietyp und daher sollten sich WFS-Clients dessen bewusst sein.
Der allgemeine Geometrietyp kommt mehr oder weniger automatisch beim Einrichten eines WFS
Service auf Oracle, da Oracle standardmäßig beliebige Geometrien aufnehmen kann
in der Spalte Geometrie. Es ist möglich, eine Geometrietyp-Beschränkung festzulegen
beim Erstellen eines räumlichen Indexes, ist aber für Oracle nicht wichtig und
daher fehlt oft die Einschränkung. Auch wenn es existiert, ist es ein bisschen
kompliziert abzufragen. Zum Beispiel weiß Geoserver, wie man diese Prüfung durchführt, aber
GDAL OCI-Treiber nicht. Wenn sich jemand für die Verbesserung des OCI . interessiert
Treiber, hier ist ein grundlegender Teil der Abfrage.

wähle idxmeta.sdo_layer_gtype aus all_sdo_index_info idxinfo,
all_sdo_index_metadata idxmeta
wobei idxinfo.index_name=idxmeta.sdo_index_name
und idxinfo.table_name='TABLE_NAME'

Wenn der WFS-Client gemischte Geometrietypen auf einem Layer nicht verarbeiten kann, könnte er
vielleicht die erste nicht leere Geometrie aus der WFS-Antwort nehmen und einleiten
der Layer, um diesen Geometrietyp zu verwenden. Um auf der sicheren Seite zu sein, könnte es ein
Multipolygon- oder Multilinestring-Layer, selbst wenn das erste Feature einfach ist.
Ein anderer Geometrietyp, der später in den Daten auftaucht, führt zu einem Fehler, aber
es ist sowieso nicht zu vermeiden, wenn der Client gemischte Schichten nicht verarbeiten kann.

Ich habe auch daran gedacht, d.h. die Bestimmung der Geometrie zu verzögern
Geben Sie check bis zum ersten Vorkommen ein, falls die abstrakte gml:
GeometryPropertyType wurde in DescribeFeature angekündigt.

Ich weiß, dass QGIS-, ArcGIS Desktop- und Gaia-Clients das WFS lesen können
unten genannten. Und ich bin mir fast sicher, dass sie nicht den gesamten Datenstrom lesen
um festzustellen, dass es sich um einen Polygontyp handelt. In meiner Testsuite ist es nur OGR
der damit nicht zurechtkommt und eine manuelle Konfiguration benötigt ("-nlt POLYGON")
was für mich keine Option ist, da es sich in einem automatisierten Skript befindet.

Auf der anderen Seite und aus einer höheren Perspektive ist etwas klar
zu mir: Das Original-Feature-Set (hier z.B. svo_zonen) ist vom Typ
gml:Polygon. Wenn das WFS dies nicht als gml:Polygon anzeigt und erklärt
Andere, es gibt ein Problem mit diesem Server.

22.04.2013 Jukka Rahkonen <jukka.rahkonen at mmmtike.fi>

Ich denke, dass es in den meisten Fällen funktionieren würde. Aber das weiß ich im wirklichen Leben
die Geometrie des ersten Features kann leer sein. Es ist auch möglich, dass WFS
Feature-Typ enthält wirklich gemischte Geometrien. Für den Umgang mit ihnen
automatisch würde ich vielleicht Spatialite als Zwischenziel verwenden und sortieren
die Features nach Geometrietypen, bevor Sie sie weiter verschieben.

Immerhin stimme ich Even zu, dass sich OGR in diesem Fall korrekt verhält.
Und ich denke, "-nlt rate" ist ein guter Vorschlag.
Mir ist auch bewusst, was Jukka sagt, dass gemischte Geometrien erlaubt sind.
Aber ich habe mich immer gefragt, welche aktuelle Implementierung das verkraften kann -
außer Spatialite/SQLite (was sowieso ein (schöner) Eimer ist).

22.04.2013 Jukka Rahkonen <jukka.rahkonen at mmmtike.fi>

Hallo,
Ich möchte mit Geotiffs von x,y (Pixel) zu lon,lat und umgekehrt wechseln.
Ich habe die GetGeoTransform() gefunden
<http://www.gdal.org/classGDALDataset.html#af9593cc241e7d140f5f3c4798a43a668>
Funktion, aber die Dokumentation sagt:

"HINWEIS: GetGeoTransform()
<http://www.gdal.org/classGDALDataset.html#af9593cc241e7d140f5f3c4798a43a668>
ist nicht ausdrucksstark genug, um mit der Vielfalt der OGC-Grid-Coverages umzugehen
Transformationsschemata von Pixel/Zeile in Projektion. Irgendwann diese Methode
zugunsten einer allgemeineren Regelung abgeschrieben werden."

Ich habe viel gegoogelt, kann aber nicht herausfinden, was genau mit "OGC Grid" gemeint ist
Coverages". Ich arbeite nur mit einem einfachen kartesischen XY-Raster.

Jeder, der bereit ist, ein bisschen mehr zu erklären.
Vielen Dank.
-------------- nächster Teil --------------
Ein HTML-Anhang wurde bereinigt.
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20130423/4cab3ef3/attachment.html>

Ich habe den von Ihnen zitierten Kommentar entfernt. Es ist aus der fernen Vergangenheit. Was
Sie sollten verstehen, dass dies nicht die *einzige* Art ist, sich auszudrücken
Georeferenzierung für GDAL-Bilder. Sie können auch Bodenkontrollpunkte verwenden,
RPCs und Geolocation-Arrays. GeoTransforms sind jedoch die gebräuchlichste Methode
und für viele Situationen ausreichend.

Ist die Beziehung zwischen Ihren Bildern und der geografischen (Länge/Länge)
raumaffin koordinieren? Wenn ja, reicht eine Geotransformation aus. (dh. ist
gleichmäßiger Pixelabstand über das Bild in Dezimalgrad)

wärmerdam
und beobachte, wie sich die Welt dreht - Rush | Geoinformatik-Softwareentwickler
-------------- nächster Teil --------------
Ein HTML-Anhang wurde bereinigt.
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20130423/7ab4c570/attachment.html>

Wenn ich Sie richtig verstehe, kann es z.B. nicht verwendet werden. ein Lambert
konform > kartesisch (z. B. Bitmap x,y Pixel), da lons nicht
Parallel und Lats werden bei der Projektion gebogen.

Übrigens, ich möchte GDAL für ein OS-Flugnavigationsprojekt verwenden
(http://openflightnav.org/)

wärmerdam
<http://pobox.com/%7Ewarmerdam>
und beobachte, wie sich die Welt dreht - Rush | Geoinformatik-Softwareentwickler

Nun, es kann möglicherweise sein, aber das ist ein komplizierterer Fall. Du brauchst
um auch eine geeignete Definition der Lambert-konformen Koordinate zu geben
System, und dann die affine Transformation von Pixel-/Linienkoordinaten in
Meterkoordinaten in diesem projizierten Koordinatensystem.

Zum Beispiel ist in dieser Datei ein weiteres projiziertes Beispiel zu sehen. Das
Koordinatensystem ist ein transversaler Mercator mit bestimmten Parametern und der
geotransform bezieht sich auf den unten angegebenen Ursprung und die Pixelgröße. Angesichts dieser
Informationen GDAL weiß, wie man Pixel mit Lat/Long in Beziehung setzt, wie Sie in sehen können
die Ecken berichtet.

Größe ist 512, 512
Koordinatensystem ist:
PROJCS["NAD27 / UTM-Zone 11N",
GEOGCS["NAD27",
DATUM["North_American_Datum_1927",
SPHEROID["Clarke 1866",6378206.4,294.97869822139006,
BEHÖRDE["EPSG","7008"]],
BEHÖRDE["EPSG","6267"]],
PRIMEM["Greenwich",0],
EINHEIT["Grad",0.0174532925199433],
BEHÖRDE["EPSG","4267"]],
PROJEKTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["zentraler_meridian",-117],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
EINHEIT["Meter",1,
BEHÖRDE["EPSG","9001"]],
BEHÖRDE["EPSG","26711"]]
Herkunft = (440720.0000000000000000,3751320.0000000000000000)
Pixelgröße = (60.0000000000000000,-60.000000000000000)
Metadaten:
AREA_OR_POINT=Bereich
Metadaten zur Bildstruktur:
INTERLEAVE=BAND
Eckkoordinaten:
Oben links (440720.000, 3751320.000) (117d38'28.21"W, 33d54' 8.47"N)
Unten links ( 440720.000, 3720600.000) (117d38'20.79"W, 33d37'31.04"N)
Oben rechts ( 471440.000, 3751320.000) (117d18'32.07"W, 33d54'13.08"N)
Unten rechts ( 471440.000, 3720600.000) (117d18'28.50"W, 33d37'35.61"N)
Mitte (456080.000, 3735960.000) (117d28'27.39"W, 33d45'52.46"N)
Band 1 Block=512x16 Typ=Byte, ColorInterp=Gray


Betriebssystem

C:> ogr2ogr --version
GDAL 2.3.2, veröffentlicht am 21.09.2018

Der Text wurde erfolgreich aktualisiert, aber diese Fehler sind aufgetreten:

Wir können die Aufgabe derzeit nicht in ein Problem umwandeln. Bitte versuche es erneut.

Das Problem wurde erfolgreich erstellt, aber wir können den Kommentar derzeit nicht aktualisieren.

Joshbernfeld kommentiert 09.11.2018

Gleiches Problem hier. Dies bedeutet auch, dass die Tabelle "geometrie_columns" nicht mehr benötigt wird, da MySQL 8.0 die Tabelle INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS verwendet.

YoshiakiYamasaki kommentiert 17. Juli 2019

Ich habe ein wichtiges Problem zu diesem Thema gefunden. MySQL kann keinen räumlichen Index verwenden, wenn keine SRID für die Spalte definiert ist. Daher hoffe ich, dass die Bedeutung dieses Themas zunimmt.

Der Optimierer berücksichtigt SPATIAL-Indizes nur für SRID-eingeschränkte Spalten:
Indizes für Spalten, die auf eine kartesische SRID beschränkt sind, ermöglichen kartesische Bounding-Box-Berechnungen.
Indizes für Spalten, die auf eine geografische SRID beschränkt sind, ermöglichen die Berechnung von geografischen Begrenzungsrahmen.

Der Optimierer ignoriert SPATIAL-Indizes für Spalten, die kein SRID-Attribut haben (und sind daher nicht SRID-beschränkt).

Rouault kommentiert 17. Juli 2019

Ich hoffe, dass die Bedeutung dieses Themas zunimmt

Dies ist kostenlose und Open-Source-Software. Siehe http://nyalldawson.net/2016/08/how-to-effectly-get-things-changed-in-qgis/, das auch für GDAL gilt

YoshiakiYamasaki kommentiert 18. Juli 2019

Aha. Danke für die Information. Ich werde versuchen, Pull-Request später einzureichen.

Um ehrlich zu sein, ist dies das erste Mal, dass ein Pull-Request gesendet wird. Daher braucht es vielleicht etwas Zeit. Trotzdem möchte ich es versuchen!

Miurahr kommentiert 15. Dez. 2019

@YoshiakiYamasaki Wie soll es funktionieren, wenn nicht unterstützte SRID in Quelldaten verwendet werden?

InnoDB-Tabellen erlauben SRID-Werte für kartesische und geografische SRSs. MyISAM-Tabellen erlauben SRID-Werte für kartesische SRSs.

Geografisches SRS ist beispielsweise 4326 und kartesisches ist beispielsweise 27700.

YoshiakiYamasaki kommentiert 16. Dez. 2019 •

@YoshiakiYamasaki Wie soll es funktionieren, wenn nicht unterstützte SRID in Quelldaten verwendet werden?

InnoDB-Tabellen erlauben SRID-Werte für kartesische und geografische SRSs. MyISAM-Tabellen erlauben SRID-Werte für kartesische SRSs.

Geografisches SRS ist beispielsweise 4326 und kartesisches ist beispielsweise 27700.

In diesem Fall wird der folgende Fehler zurückgegeben.

FEHLER 1178 (42000): Die Speicher-Engine für die Tabelle unterstützt keine geografischen Raumbezugssysteme

Wenn Sie eine nicht unterstützte SRID angeben, wird der folgende Fehler zurückgegeben.

FEHLER 3548 (SR001): Es gibt kein räumliches Bezugssystem mit SRID 277000.

mysql> CREATE TABLE test_InnoDB(id INT, geo GEOMETRY SRID 4236)
Abfrage OK, 0 Zeilen betroffen (0,15 Sek.)

mysql> drop table test_InnoDB
Abfrage OK, 0 Zeilen betroffen (0,10 Sek.)

mysql> CREATE TABLE test_InnoDB(id INT, geo GEOMETRY SRID 27700)
Abfrage OK, 0 Zeilen betroffen (0,04 Sek.)

mysql> Tabelle löschen test_InnoDB
Abfrage OK, 0 Zeilen betroffen (0,07 Sek.)

mysql> CREATE TABLE test_MyISAM(id INT, geo GEOMETRY SRID 4236) ENGINE=MyISAM
FEHLER 1178 (42000): Die Speicher-Engine für die Tabelle unterstützt keine geografischen Raumbezugssysteme
mysql> CREATE TABLE test_MyISAM(id INT, geo GEOMETRY SRID 27700) ENGINE=MyISAM
Abfrage OK, 0 Zeilen betroffen (0,02 Sek.)

mysql> drop table test_MyISAM
Abfrage OK, 0 Zeilen betroffen (0,02 Sek.)

mysql> CREATE TABLE test_InnoDB(id INT, geo GEOMETRY SRID 277000)
FEHLER 3548 (SR001): Es gibt kein räumliches Bezugssystem mit SRID 277000.

Miurahr kommentiert 16. Dez. 2019

@YoshiakiYamasaki Was ist ein korrektes Verhalten für GDAL/ogr, wenn ein solcher SRID-Wert akzeptiert wird?

Das einfache Hinzufügen eines SRID-Blocks führt zu einem Fehler im Autotest-Fall test_ogr_mysql_longlat.

Ohne SRID, bevor SRID hinzugefügt wird, wird es übergeben.
Ist es erwartetes Verhalten für MySQL-Benutzer? Sollte der Fall aufgrund einer falsch konfigurierten Kombination von ENGINE und SRID fehlschlagen?

Miurahr kommentiert 16. Dez. 2019

Dies bedeutet auch, dass die Tabelle "geometrie_columns" nicht mehr benötigt wird, da MySQL 8.0 die Tabelle INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS verwendet.

Es scheint, dass die Tabelle erforderlich ist, wenn ältere Versionen von MySQL und MariaDB verwendet werden. Der Treiber sollte also je nach Serverversion auf zwei unterschiedliche Weisen umgehen.

Miurahr kommentiert 16. Dez. 2019

Dies bedeutet auch, dass die Tabelle "geometrie_columns" nicht mehr benötigt wird, da MySQL 8.0 die Tabelle INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS verwendet.
@joshbernfeld Ich würde es gerne als einen anderen PR als #2111 zur Überprüfung aktualisieren, da es viele Teile des MySQL-Treibers betrifft.

YoshiakiYamasaki kommentiert 17. Dez. 2019

@YoshiakiYamasaki Was ist ein korrektes Verhalten für GDAL/ogr, wenn ein solcher SRID-Wert akzeptiert wird?

Das einfache Hinzufügen eines SRID-Blocks führt zu einem Fehler im Autotest-Fall test_ogr_mysql_longlat.

Ohne SRID, bevor SRID hinzugefügt wird, wird es übergeben.
Ist es erwartetes Verhalten für MySQL-Benutzer? Sollte der Fall aufgrund einer falsch konfigurierten Kombination von ENGINE und SRID fehlschlagen?

@miurahr
Ich denke, dass das direkte Zurückgeben des MySQL-Fehlers das richtige Verhalten ist.

In diesem Fall können wir jedoch keine Daten in MySQL importieren, daher ist es wünschenswert, die folgende Problemumgehung bereitzustellen:.

Optionen, die nur eine SQL-Anweisung für eine Textdatei erstellen können (ogr2ogr führt SQL nicht direkt aus). Ich habe in der Vergangenheit die folgende Funktionsanfrage gestellt. Wenn diese Option bereitgestellt wird, können MySQL-Benutzer das Problem selbst beheben, indem sie die SQL-Anweisung ändern.
#1090

Optionen, die ohne SRID importiert werden können, wie -no-grid, werden als Optionen für ogr2ogr bereitgestellt (gleiches Verhalten wie aktuelles Verhalten)

Übrigens, es gibt folgende Hintergründe. Heutzutage möchten nur wenige Benutzer die GIS-Funktion mit MyISAM verwenden. Fast Benutzer möchten die GIS-Funktion mit InnoDB verwenden.


Die Verwendung von ogr2ogr zum Laden von Shapefile in MS SQL Server-Geografietypen hat Probleme mit der Ringausrichtung

Mache dies schon eine Weile und es funktioniert in Ordnung, außer dass die Ringausrichtungen immer rückwärts sind. SQL Server folgt der "Regel für die linke Hand" und erwartet, dass sich das Innere des Polygons beim Durchlaufen des Rings links befindet, daher sollte der Ring normalerweise gegen den Uhrzeigersinn ausgerichtet sein. Wenn nicht, wird das Innere als die ganze Erde betrachtet und das Äußere des Polygons ist der kleinere Bereich (also das Innere ist größer als das Äußere).

Ogr2ogr lädt meine Polygone immer so, dass sie in der falschen Ausrichtung sind, also führe ich einfach einen SQL UPDATE-Befehl mit der ReorientObject()-Methode aus, um die Richtung zu ändern und das Problem zu lösen. Jetzt habe ich jedoch einen Datensatz, der einige MULTIPOLYGON-Objekte enthält, und ReorientObject() funktioniert mit diesen nicht.

Ich wünschte wirklich, es gäbe eine Möglichkeit, ogr2ogr anzuweisen, beim Laden in SQL nur die entgegengesetzte Ausrichtung zu verwenden, aber ich sehe keine solche Option. Ich experimentiere mit Ideen wie dem Hochladen als Geometrie und dann versuchen, es während der Konvertierung in Geographies zu beheben, oder die MULTIPOLYGONs in GEOMETRYCOLLECTIONs konvertieren, die ReorientObject()-Korrektur ausführen (die bei Geometriesammlungen funktioniert) und dann wieder in MULTIPOLYGONs konvertieren, zuerst in etwas anderes als Shapefile konvertieren und dann in SQL hochladen, um zu sehen, ob Ich erhalte unterschiedliche Ergebnisse (vielleicht GeoJSON?).

Hat sich schon jemand damit beschäftigt und kennt eine einfache Lösung? Haben Shapefiles eine andere Orientierungsregel und ogr2ogr ist sich der Bedeutung der Orientierung nicht bewusst, also ist es ihm egal? Scheint ein Defekt zu sein.


Wege

Wir haben unsere Geodaten. Machen Sie sich jetzt bereit zu rocken.

Zuerst definieren wir unser erstes Pfadgenerator :

d3.geo.path() ist ein totaler Lebensretter einer Funktion. Es macht die ganze Drecksarbeit, das Durcheinander von GeoJSON-Koordinaten in noch chaotischere Durcheinander von SVG-Pfadcodes zu übersetzen. Alles Gute d3.geo.path() !

Jetzt wir könnten Fügen Sie all das GeoJSON direkt in unsere HTML-Datei ein, aber so viele Koordinaten und geschweifte Klammern – was für ein Durcheinander! Es ist sauberer und üblicher, die Geodaten in einer separaten Datei zu speichern und sie mit d3.json() zu laden:

d3.json() nimmt zwei Argumente an. Erstens benötigt es eine Zeichenfolge, die auf den Pfad der zu ladenden Datei verweist. Zweitens benötigt es eine Callback-Funktion, die ausgelöst wird, wenn die JSON-Datei geladen und analysiert wurde. (Weitere Informationen zur Callback-Funktion finden Sie unter Umgang mit Fehlern beim Laden von Daten.) d3.json() , genau wie d3.csv() , ist asynchron , d. h. es verhindert nicht, dass der Rest Ihres Codes ausgeführt wird, während der Browser auf das Laden dieser externen Datei wartet. Beispiel: Code platziert nach dem die Callback-Funktion könnte ausgeführt werden Vor der Inhalt des Rückrufs selbst:

Wenn Sie also externe Datendateien laden, fügen Sie den Code, der von diesen Daten abhängt, in der Regel in die Callback-Funktion ein. (Oder fügen Sie den Code in andere benutzerdefinierte Funktionen ein und rufen Sie diese Funktionen dann innerhalb des Rückrufs auf.)

Zurück zum Beispiel. Schließlich binden wir die GeoJSON-Features an neue Pfadelemente und erstellen einen neuen Pfad für jedes Feature:

Beachten Sie die letzte Zeile, in der sich d (das Pfaddatenattribut) auf unseren Pfadgenerator bezieht, der auf magische Weise die gebundenen Geodaten nimmt und all diesen verrückten SVG-Code berechnet. Das Ergebnis ist Abbildung 12-1.

Eine Landkarte! Das war so einfach! Schau es dir an 01_pfade.html . Der Rest ist nur Anpassung.

Weitere Informationen zu Pfaden und Pfadgenerator-Optionen finden Sie im Wiki.


D:GISPekanbaruBapendaSMARTMAPpeta>ogr2ogr -f “ESRI Shapefile” 1471010001.shp 1471010001.TAB
FEHLER 1: Es wurde versucht, Geometrie ohne Polygon (POINT) in Shapefile vom Typ POLYGON zu schreiben.
FEHLER 1: Feature 4488 aus Layer 1471010001 kann nicht geschrieben werden.
FEHLER 1: Übersetzung vorzeitig abgebrochen, nachdem fehlgeschlagen
Übersetzung des Layers 147101001 (verwenden Sie -skipfailures, um Fehler zu überspringen)

Fehler ini karena file asal, tabel nya memiliki 2 jenis fitur, yaitu titik dan polygon. Sedangkan ESRI Hanya Mendukung 1 Jenis Fitur Saja, Apakah Titik Saja, Atau Polygon Saja …

Nein, Agar tidak gagal, perlu juga ditambahkan -skipfailures di perintah ogr2ogr nya … (lihat penggunaan di long-usage di atas)


Hfrhyu

Wie ist es möglich, einen Fähigkeitswert von weniger als 3 zu erreichen?

Kann ein Vampir mit Multiangriff zweimal mit seinen Klauen angreifen?

Metadaten aus der Scratch-Organisation von Partner Developer können aufgrund zusätzlicher Felder nicht bereitgestellt werden

Was bringt es, Num Lock auf Anmeldebildschirmen zu deaktivieren?

Gab es jemals ein Verkehrsflugzeugdesign, bei dem die Generatorlast durch die Installation von Sonnenkollektoren reduziert wurde?

Ein neuer Freund meines Bruders hat ihm eine Menge Baseballkarten geschenkt, die angeblich extrem wertvoll sind. Ist das ein Betrug?

Sätze, die den Fortschritt behinderten

Wie können Buchten und Meerengen in einer prozedural generierten Karte bestimmt werden?

Was würde mit einem modernen Wolkenkratzer passieren, wenn es Mikro-Schwarze Löcher regnet?

Zusehen, wie etwas live mit tail in eine Datei geschrieben wird

Cross Compiling für RPi - Fehler beim Laden von Shared Libraries

Ich fliege heute nach Frankreich und mein Reisepass läuft in weniger als 2 Monaten ab

Warum erhalte ich zwei verschiedene Antworten für dieses Zählproblem?

Hochspannungs-LED-Anzeige 40-1000 VDC ohne zusätzliche Stromversorgung

Wie vergleicht sich die Quantilregression mit der logistischen Regression mit der Variablenaufteilung am Quantil?

Wie kann ich verhindern, dass hyperentwickelte Versionen normaler Kreaturen ihre Cousins ​​​​auslöschen?

Wichtige Ressourcen für Zivilisationen des Mittelalters?

Ist es für Unternehmen legal, meine geschäftliche E-Mail-Adresse zu verwenden, um so zu tun, als würde ich noch dort arbeiten?

Warum bedeutet Newtons drittes Gesetz nicht, dass eine Person wieder dorthin zurückspringt, wo sie angefangen hat, wenn sie den Boden berührt?

Wie verschiebe ich eine dünne Linie mit dem schwarzen Pfeil in Illustrator?

Java Casting: Java 11 löst LambdaConversionException aus, während 1.8 dies nicht tut

Wie konvertiert man eine ASCII-Datei (mit Lat,lon-Koordinaten) mit OGR in ein Shapefile?

Zeichnen von Gitterzellen in QGIS?So extrahieren Sie Features mit bestimmten Koordinaten aus einem ShapeFile?So legen Sie das vertikale Koordinatensystem beim Erstellen eines 3D-Shapefiles fest?ogr2ogr - Konvertieren Sie Geojson in Shapefile Erstellen Sie einen Versatz in KoordinatenASCII-Datei mit Breitengrad, Längengrad und Daten zu GeoTiff mit Pythonogr2ogr SQL-Abfrage aus einer TextdateiWie man Daten in der Attributtabelle beim Importieren einer ASCII-Datei in ArcMap beibehältErstellen eines Bildes mit bestimmten Breiten-/Längengrad-Positionen mit GDAL?So beschneiden Sie eine MID von einer Form mit Python und gdal/ogrAlter und aktualisieren Sie eine Shapefile mit einem Feld aus einem ASCII-Datei mit ogr

Ich habe eine ASCII-Datei mit den folgenden Spalten: ID, Längengrad, Breitengrad, Wert

Ist es möglich, OGR (ogr2ogr oder ogrinfo) in der Befehlszeile zu verwenden, um die ASCII-Datei zu öffnen und sie mit den Punktkoordinaten (X-Feld = Längengrad, Y-Feld = Breitengrad) in ein Shapefile (in WGS84) zu konvertieren?

Was ich tun möchte, ist ähnlich wie bei QGIS, wenn eine ASCII-Datei mit "Getrennter Text" geöffnet und die Geometrie (Punktkoordinaten) definiert wird.

Ich möchte das für eine große Anzahl von Dateien tun, also möchte ich wissen, ob dies in OGR möglich ist.

Ich habe eine ASCII-Datei mit den folgenden Spalten: ID, Längengrad, Breitengrad, Wert

Ist es möglich, OGR (ogr2ogr oder ogrinfo) in der Befehlszeile zu verwenden, um die ASCII-Datei zu öffnen und sie mit den Punktkoordinaten (X-Feld = Längengrad, Y-Feld = Breitengrad) in ein Shapefile (in WGS84) zu konvertieren?

Was ich tun möchte, ist ähnlich wie bei QGIS, wenn eine ASCII-Datei mit "Getrennter Text" geöffnet und die Geometrie (Punktkoordinaten) definiert wird.

Ich möchte das für eine große Anzahl von Dateien tun, also möchte ich wissen, ob dies in OGR möglich ist.

Ich habe eine ASCII-Datei mit den folgenden Spalten: ID, Längengrad, Breitengrad, Wert

Ist es möglich, OGR (ogr2ogr oder ogrinfo) in der Befehlszeile zu verwenden, um die ASCII-Datei zu öffnen und sie mit den Punktkoordinaten (X-Feld = Längengrad, Y-Feld = Breitengrad) in ein Shapefile (in WGS84) zu konvertieren?

Was ich tun möchte, ist ähnlich wie bei QGIS, wenn eine ASCII-Datei mit "Getrennter Text" geöffnet und die Geometrie (Punktkoordinaten) definiert wird.

Ich möchte das für eine große Anzahl von Dateien tun, also möchte ich wissen, ob dies in OGR möglich ist.

Ich habe eine ASCII-Datei mit den folgenden Spalten: ID, Längengrad, Breitengrad, Wert

Ist es möglich, OGR (ogr2ogr oder ogrinfo) in der Befehlszeile zu verwenden, um die ASCII-Datei zu öffnen und sie mit den Punktkoordinaten (X-Feld = Längengrad, Y-Feld = Breitengrad) in ein Shapefile (in WGS84) zu konvertieren?

Was ich tun möchte, ist ähnlich wie bei QGIS, wenn eine ASCII-Datei mit "Getrennter Text" geöffnet und die Geometrie (Punktkoordinaten) definiert wird.

Ich möchte das für eine große Anzahl von Dateien tun, also möchte ich wissen, ob dies in OGR möglich ist.


Schau das Video: Soudruzi Piráti. Volební sliby vs realita všedních dní. Jakub Tichý chce s občany mluvit