Suite

Supprimer la géométrie vide avec ogr2ogr


J'exécute ogr2ogr en convertissant Shape -> Shape pour nettoyer les fichiers de formes avant qu'ils ne soient ajoutés à PostGIS via shp2pgsql.

Le problème que je rencontre est lorsque le fichier Shapefile contient des enregistrements sans géométrie, ce qui cause des problèmes avec mon système.

Est-ce que quelqu'un connaît un moyen d'utiliser ogr2ogr pour exclure des enregistrements sans géométrie ?

Est-il également possible de supprimer la géométrie invalide. Par exemple. deux sommets au même endroit ?


Vous pouvez faire les deux avec le dialecte SQLite http://www.gdal.org/ogr_sql_sqlite.html. Le dialecte SQLite vous offre toutes les possibilités de SQLite http://www.sqlite.org/lang.html et SpatiaLite http://www.gaia-gis.it/gaia-sins/spatialite-sql-latest.html. Cependant, je ne suis pas sûr que deux sommets au même endroit rendent les géométries invalides.

Pour supprimer les géométries vides :

ogr2ogr -f "ESRI Shapefile" -dialect sqlite -sql "select * from input où la géométrie n'est pas nulle" output.shp input.shp

Pour corriger les géométries invalides en même temps, la partie -sql s'allonge un peu car vous devez choisir les attributs un par un pour la requête

ogr2ogr -f "ESRI Shapefile" -dialect sqlite -sql "select ST_MakeValid(geometry) as geometry, attr_1, attr_2, attr_3, attr_4 from input où la géométrie n'est pas null" output.shp input.shp

S'il se trouve que les sommets répétés ne sont pas considérés comme des erreurs, vous pouvez vous en débarrasser en simplifiant les géométries avec une tolérance de zéro

ogr2ogr -f "ESRI Shapefile" -dialect sqlite -sql "select ST_Simplify(geometry,0) comme géométrie, attr_1, attr_2, attr_3, attr_4 à partir de l'entrée où la géométrie n'est pas nulle" output.shp input.shp

Les commandes ne sont pas testées mais je modifierai la réponse si elles ne fonctionnent pas pour vous.


Je n'ai pas compilé sqlite dans mon ogr2ogr mais vous pouvez contourner ce problème en utilisant le dialecte SQL standard et en ajoutant "où ogr_geom_wkt n'aime pas '%EMPTY%'"


De plus, vous pouvez obtenir une réponse approximative en interrogeant le catalogue - si null_frac est égal à zéro, cela n'indique aucun null mais doit être revérifié par rapport aux données « réelles » :

Dans Postgresql, vous pouvez obtenir les données directement à partir des statistiques :

Vous pourriez obtenir quelques faux positifs, une vérification s'impose donc après avoir trouvé les candidats.

Je vais vous montrer ma solution en T-SQL, fonctionnant pour SQL Server 2008. Je ne connais pas PostgreSQL, mais j'espère que vous trouverez des conseils dans ma solution.

Ce que j'ai fait, en bref, c'est de créer une table de test avec 5 colonnes, ID et testTime étant générés par la fonction Identity et getdate(), tandis que les 3 colonnes varchar étant celles qui nous intéressent. L'une n'aura que des valeurs NULL, l'une n'aura aucune valeur NULL, l'autre sera une colonne combinée. Le résultat final du script sera que le script signalera la colonne nullColumn comme ayant toutes les lignes NULL.

L'idée était de calculer la fonction DATALENGTH pour chaque colonne (calcule le nombre d'octets pour une expression donnée). J'ai donc calculé la valeur DATALENGTH pour chaque ligne de chaque colonne et fait une SOMME par colonne. Si la SOMME par colonne est NULL, alors la colonne complète a des lignes NULL, sinon il y a des données à l'intérieur.

Vous devez maintenant trouver la traduction pour PostgreSQL et j'espère qu'un collègue pourra vous aider. Ou peut-être qu'il y a une belle vue système qui montrera à quel point je suis stupide de réinventer la roue :-).


GeoFile est une série dédiée à l'étude des données géographiques, de leurs caractéristiques et de leurs usages. Dans cet article, nous discutons de spatial&hellip

Abdullah Alger Produits Bases de données Tarification Modules complémentaires Centres de données Entreprise Apprenez pourquoi rédiger des articles Écrire des trucs Témoignages de clients Webinaires Entreprise À propos Politique de confidentialité Conditions d'utilisation Support Support Nous contacter Documentation État du système Sécurité


Cara Penggunaan OGR2OGR

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

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

Pilote OGR dapat mendeteksi otomatis sumber kita, makanya, yang perlu dikasih tahu ke OGR adalah TARGET 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 cible SRS nya, yaitu EPSG:32647, ke UTM Zona 47N


Supprimer la géométrie vide avec ogr2ogr - Systèmes d'information géographique

Lorsque vous essayez d'utiliser ogr2ogr (ver. 1.9) pour convertir un Shapefile (type de géométrie
Polygon) vers la géodatabase fichier (FileGDB) J'obtiens une erreur du type "FGDB
les calques ne peuvent pas être créés avec un type de géométrie de calque wkbUnknown." :

$ ogr2ogr -f filegdb out.gdb polygon.shp

Lors de l'ajout de -nlt, cela semble fonctionner :

$ ogr2ogr -f filegdb out.gdb polygone.shp -nlt POLYGONE

Il s'agit a) d'un comportement OGR habituel et b) d'un obstacle pour mon script
parce que je ne sais pas à l'avance (et je ne vérifierai pas avec ogrinfo) quoi
type de géométrie la source d'entrée est. On dirait qu'il y a un problème dans le
Pilote FileGDB.

Quelqu'un peut-il confirmer et expliquer ce bug?

Bien à vous, Stéphane
-------------- partie suivante --------------
Une pièce jointe HTML a été nettoyée.
URL : <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20130421/4bea1b4d/attachment.html>

Je ne confirme pas ce comportement avec 1.9.2 ou 1.10.0. Travaux de conversion
très bien pour moi sans spécifier -nlt. Quel est le type de géométrie signalé par
ogrinfo sur polygon.shp ?

Merci beaucoup pour la réponse rapide, Even!

Vous avez raison, cela semble fonctionner avec Shapefile - mais pas pour le lecteur WFS
(et propre serveur) que nous testons.

Vous trouverez ci-dessous la sortie GML de notre source WFS.

Alors, la "faute" est-elle dans le lecteur WFS - ou même dans notre WFS Response XML ?

Obtenez toutes les auberges de Suisse à partir de la base de données OpenStreetMap
("tourisme=auberge"). Réponse modifiée :

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

Assez étrange, cette commande ogrinfo fonctionne

$ ogrinfo -ro WFS :
http://openpoimap.ch/featureserver/workspace.cgi?key=HG4kFX2kEEqBSqvcswuh2E
INFO : Ouverture de `WFS :
http://openpoimap.ch/featureserver/workspace.cgi?key=HG4kFX2kEEqBSqvcswuh2E'
utilisation du pilote `WFS' réussie.
1 : pois (Point)

Cela fonctionne aussi mais trébuche sur tous les paramètres d'URL supplémentaires :
$ ogrinfo -ro WFS :
http://openpoimap.ch/featureserver/workspace.cgi?key=HG4kFX2kEEqBSqvcswuh2E&SERVICE=WFS&TYPENAME=pois
INFO : Ouverture de `WFS :
http://openpoimap.ch/featureserver/workspace.cgi?key=HG4kFX2kEEqBSqvcswuh2E'
utilisation du pilote `WFS' réussie.
1 : pois (Point)
'SERVICE' n'est pas reconnu comme une commande interne ou externe,
programme exécutable ou fichier batch.
'TYPENAME' n'est pas reconnu comme une commande interne ou externe,
programme exécutable ou fichier batch.

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

J'ai le vrai problème : il se produit avec cette source WFS :
http://maps.zh.ch/wfs/FnsNSWFS?SERVICE=WFS&REQUEST=GetCapabilities

=> ogrinfo ne signale aucune géométrie avec ce WFS :

$ ogrinfo -ro WFS:http://maps.zh.ch/wfs/FnsNSWFS?TYPENAME=svo_zonen
INFO : Ouverture de `WFS:http://maps.zh.ch/wfs/FnsNSWFS?TYPENAME=svo_zonen'
utilisation du pilote `WFS' réussie.
1: svo_zonen

Devrait être
1 : svo_zonen (polygone)

Aucune géométrie rapportée ici entre parenthèses. C'est donc une configuration ou
problème d'installation du serveur WFS (ArcGIS)

Dans QGIS, cela fonctionne (le lecteur QGIS semble deviner le type de géométrie).

P.S. Vous ne savez toujours pas pourquoi le lecteur OGR WFS trébuche sur une URL WFS supplémentaire
paramètres ajoutés. Peut-être à cause du paramètre clé ?

$ ogrinfo -ro WFS :
http://openpoimap.ch/featureserver/workspace.cgi?key=HG4kFX2kEEqBSqvcswuh2E&SERVICE=WFS
INFO : Ouverture de `WFS :
http://openpoimap.ch/featureserver/workspace.cgi?key=HG4kFX2kEEqBSqvcswuh2E'
utilisation du pilote `WFS' réussie.
1 : pois (Point)
'SERVICE' n'est pas reconnu comme une commande interne ou externe,
programme exécutable ou fichier batch.

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

Oui, lors de l'examen du
"http://maps.zh.ch/wfs/FnsNSWFS?TYPENAME=svo_zonen&SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType"
tu peux voir :

&lélément name="msGeometry" type="gml:GeometryPropertyType"
minOccurs="0" maxOccurs="1"/>

Le type de géométrie n'est donc pas défini. OGR signale alors un type de géométrie inconnu.
Il pourrait y avoir un mélange de géométries dans une telle couche.

Je suppose que QGIS inspectera l'ensemble du contenu de la couche après avoir téléchargé
pour déterminer le type de géométrie, mais le pilote OGR WFS ne le fait pas pour
des fins d'efficacité. Il peut fonctionner sur des couches arbitrairement énormes en streaming
mode (vrai pour OGR 1.10)

Vous avez raison pour les parenthèses des URL avec & dans le shell.

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

Oui c'est ça.
Pour être précis, chaque fonctionnalité/objet/instance a un gml:Box et un
gml : Polygone (voir ci-dessous).
C'est une sortie étrange de ce serveur ArcGIS et un résultat incomplet
réponse de DescribeFeatureType.

----
Réponse de "
http://maps.zh.ch/wfs/FnsNSWFS?SERVICE=WFS&VERSION=1.0.0&EQUEST=GetFeature&TYPENAME=svo_zonen
"
<. >
<gml:featureMember>
<ms:svo_zonen fid="svo_zonen.4896">
<gml:boundedBy>
<gml:Boîte srsName="EPSG:21781">
<gml:coordonnées>693970.812500,273550.094000
694049.875000,273650.312500</gml:coordonnées>
</gml:Boîte>
</gml:boundedBy>
<ms:msGéométrie>
<gml:Polygone srsName="EPSG:21781">
<gml:outerBoundaryIs>
<gml:Anneau linéaire>
<gml:coordonnées>694037.000000,273550.094000
694021.625000. </gml:coordonnées>
</gml:Anneau Linéaire>
</gml:outerBoundaryIs>
</gml:Polygone>
</ms:msGéométrie>
<ms:geodb_oid>4896</ms:geodb_oid>
<ms:objectid>49</ms:objectid>
<ms:svozoneoid>141</ms:svozoneoid>
.
</ms:svo_zonen>
</gml:featureMember>
.

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

Pour moi, GetCapabilities de http://http://maps.zh.ch/wfs/FnsNSWFS devrait également
sois plus précis. Actuellement, il n'y a pas d'indice de géométrie (et cela pose même des problèmes
avertissements concernant l'EXTENT manquant).

Donc, étant donné que DescribeFeatureType rapporterait
type="gml:SurfacePropertyType" le lecteur WFS de GDAL fonctionnerait-il ?

Je pensais que la plupart des clients/convertisseurs WFS lisent GetCapabilities, pas
DécrivezFeatureType.

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

D'accord. Je vois maintenant que c'est quelque chose qui peut être corrigé côté serveur WFS
[1].

Dans Mapserver on peut configurer :
gml_geometries "géométrie"
gml_geometry_type "polygone"
. pour définir explicitement le type de géométrie sur type="gml:polygonPropertyType".

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

Juste pour information, il n'est pas rare que les serveurs WFS annoncent un
type de géométrie général "gml:GeometryPropertyType" même la couche contient
un seul type de géométrie et, par conséquent, les clients WFS doivent en être conscients.
Le type de géométrie générale vient plus ou moins automatiquement lors de la configuration d'un WFS
service au-dessus d'Oracle car par défaut Oracle peut contenir toutes les géométries
dans la colonne géométrie. Il est possible de définir une contrainte de type géométrie
lors de la création d'un index spatial mais ce n'est pas important pour Oracle et
donc la contrainte est souvent absente. Même si ça existe c'est un peu
compliqué à interroger. Par exemple Geoserver sait comment faire cette vérification mais
Le pilote GDAL OCI ne fonctionne pas. Si quelqu'un s'intéresse à l'amélioration de l'OCI
pilote, voici une partie de base de la requête.

sélectionnez idxmeta.sdo_layer_gtype de all_sdo_index_info idxinfo,
all_sdo_index_metadata idxmeta
où idxinfo.index_name=idxmeta.sdo_index_name
et idxinfo.table_name='TABLE_NAME'

Si le client WFS ne peut pas gérer les types de géométrie mixtes sur une couche, il pourrait
peut-être prendre la première géométrie non vide de la réponse WFS et lancer
la couche pour utiliser ce type de géométrie. Pour être du bon côté, cela pourrait créer un
couche multipolygone ou multiligne même si la première entité est simple.
Un autre type de géométrie apparaissant plus tard dans les données entraînera une erreur mais
cela ne peut être évité de toute façon si le client ne peut pas gérer les couches mixtes.

J'ai aussi pensé à ça, c'est à dire à retarder la détermination de la géométrie
tapez check à la première occurrence, dans le cas où le gml abstrait :
GeometryPropertyType a été annoncé dans DescribeFeature.

Je sais que les clients QGIS, ArcGIS Desktop et Gaia peuvent lire le WFS
mentionné ci-dessous. Et je suis presque sûr qu'ils ne lisent pas tout le flux de données
afin de déterminer qu'il s'agit d'un type de polygone. C'est seulement OGR dans ma suite de tests
qui ne peut pas faire face à cela et a besoin d'une configuration manuelle ("-nlt POLYGON")
ce qui n'est pas une option pour moi car c'est à l'intérieur d'un script automatisé.

D'un autre côté et d'un point de vue supérieur, quelque chose est clair
pour moi : l'ensemble de fonctionnalités d'origine (ici par exemple svo_zonen) est de type
gml : polygone. Si le WFS n'expose pas et expliquez cela en tant que gml:Polygon to
d'autres, il y a un problème avec ce serveur.

2013/4/22 Jukka Rahkonen <jukka.rahkonen à mmmtike.fi>

Je suppose que cela fonctionnerait dans la plupart des cas. Cependant, je sais que dans la vraie vie
la géométrie de la première entité peut être vide. Il est également possible que WFS
le type d'entité contient vraiment des géométries mixtes. Pour les manipuler
automatiquement j'utiliserais peut-être Spatialite comme cible intermédiaire et trierais
les entités par types de géométrie avant de les déplacer plus loin.

Après tout, je suis d'accord avec Even que OGR se comporte correctement dans ce cas.
Et je pense que "-nlt guess" est une bonne proposition.
Je suis également au courant de ce que dit Jukka selon lequel les géométries mixtes sont autorisées.
Mais je me suis toujours demandé quelle implémentation actuelle peut faire face à cela -
sauf Spatialite/SQLite (qui est quand même un (beau) seau).

2013/4/22 Jukka Rahkonen <jukka.rahkonen à mmmtike.fi>

Salut,
Je veux passer de x,y (pixels) à lon,lat et vice versa, en utilisant des geotiffs.
J'ai trouvé le GetGeoTransform()
<http://www.gdal.org/classGDALDataset.html#af9593cc241e7d140f5f3c4798a43a668>
fonction, mais la documentation dit :

"REMARQUE : GetGeoTransform()
<http://www.gdal.org/classGDALDataset.html#af9593cc241e7d140f5f3c4798a43a668>
n'est pas assez expressif pour gérer la variété des couvertures de grille OGC
schémas de transformation pixel/ligne en projection. Finalement, cette méthode
seront amortis au profit d'un régime plus général."

J'ai beaucoup cherché sur Google, mais je n'arrive pas à savoir ce que l'on entend exactement par "OGC Grid
Couvertures". Je travaille juste avec une simple grille cartésienne x,y.

Quiconque veut expliquer un peu plus.
Merci.
-------------- partie suivante --------------
Une pièce jointe HTML a été nettoyée.
URL : <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20130423/4cab3ef3/attachment.html>

J'ai supprimé le commentaire que vous citez. C'est du passé lointain. Quoi
vous devez comprendre que ce n'est pas la *seule* façon d'exprimer
géoréférencement pour les images GDAL. Vous pouvez également utiliser des points de contrôle au sol,
RPC et tableaux de géolocalisation. Cependant, les GeoTransforms sont le moyen le plus courant
et suffisant pour de nombreuses situations.

La relation entre vos images et géographique (lat/long)
espace de coordonnées affine? Si c'est le cas, une géotransformation fera très bien l'affaire. (c'est-à-dire est
l'espacement des pixels uniforme sur l'image en termes de degrés décimaux)

warmerdam
et regardez le monde tourner - Rush | Développeur de logiciels géospatiaux
-------------- partie suivante --------------
Une pièce jointe HTML a été nettoyée.
URL : <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20130423/7ab4c570/attachment.html>

Si je vous comprends bien, il ne peut pas être utilisé par ex. une lambert
conforme > cartésien (par exemple bitmap x,y pixels), car les lons ne sont pas
parallèle et lats sont pliés lors de la projection.

BTW, je veux utiliser GDAL pour un projet de navigation de vol OS
(http://openflightnav.org/)

warmerdam
<http://pobox.com/%7Ewarmerdam>
et regardez le monde tourner - Rush | Développeur de logiciels géospatiaux

Eh bien, cela peut potentiellement l'être, mais c'est un cas plus compliqué. Vous avez besoin
fournir également une définition appropriée de la coordonnée conforme de Lambert
système, puis la transformation affine des coordonnées pixel/ligne en
coordonnées du mètre dans ce système de coordonnées projeté.

Par exemple, un autre exemple projeté est vu dans ce fichier. le
système de coordiante est mercator transverse avec des paramètres particuliers et le
La géotransformation se rapporte à l'origine et à la taille des pixels indiquées ci-dessous. Compte tenu de cela
information GDAL sait comment lier les pixels à lat/long comme vous pouvez le voir dans
les coins rapportés.

La taille est 512, 512
Le système de coordonnées est :
PROJETS["NAD27 / UTM zone 11N",
GEOGCS["NAD27",
DATUM["North_American_Datum_1927",
SPHÉROIDDE["Clarke 1866",6378206.4,294.9786982139006,
AUTORITÉ["EPSG","7008"]],
AUTORITÉ["EPSG","6267"]],
PRIMEM["Greenwich",0],
UNITÉ["degré",0.0174532925199433],
AUTORITÉ["EPSG","4267"]],
PROJECTION["Transverse_Mercator"],
PARAMÈTRE["latitude_d'origine",0],
PARAMÈTRE["central_meridian",-117],
PARAMÈTRE["scale_factor",0.9996],
PARAMÈTRE["false_easting",500000],
PARAMETRE["false_northing",0],
UNITE["mètre",1,
AUTORITÉ["EPSG","9001"]],
AUTORITÉ["EPSG","26711"]]
Origine = (440720.00000000000000,3751320.0000000000000000)
Taille de pixel = (60,0000000000000000,-60,00000000000000000)
Métadonnées :
AREA_OR_POINT=Zone
Métadonnées de la structure de l'image :
INTERLEAVE=BANDE
Coordonnées du coin :
En haut à gauche ( 440720.000, 3751320.000) (117d38'28.21"W, 33d54' 8.47"N)
En bas à gauche (440720.000, 3720600.000) (117d38'20.79"W, 33d37'31.04"N)
En haut à droite (471440.000, 3751320.000) (117d18'32.07"W, 33d54'13.08"N)
En bas à droite (471440.000, 3720600.000) (117d18'28.50"W, 33d37'35.61"N)
Centre (456080.000, 3735960.000) (117d28'27.39"W, 33d45'52.46"N)
Bande 1 Bloc=512x16 Type=Byte, ColorInterp=Gris


Système opérateur

C:> ogr2ogr --version
GDAL 2.3.2, publié le 21/09/2018

Le texte a été mis à jour avec succès, mais les erreurs suivantes se sont produites :

Nous ne sommes pas en mesure de convertir la tâche en problème pour le moment. Veuillez réessayer.

Le problème a été créé avec succès, mais nous ne sommes pas en mesure de mettre à jour le commentaire pour le moment.

Joshbernfeld commenté le 9 novembre 2018

Même problème ici. Cela signifie également que la table geometry_columns n'est plus nécessaire puisque MySQL 8.0 utilise la table INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS.

YoshiakiYamasaki a commenté le 17 juil. 2019

J'ai trouvé un problème important concernant cette question. MySQL ne peut pas utiliser d'index spatial si aucun SRID n'est défini pour la colonne. Par conséquent, j'espère que l'importance de cette question augmente.

L'optimiseur prend en compte les index SPATIAL uniquement pour les colonnes restreintes au SRID :
Les index sur les colonnes limités à un SRID cartésien permettent des calculs de cadre de délimitation cartésien.
Les index sur les colonnes limités à un SRID géographique permettent des calculs de cadre de délimitation géographique.

L'optimiseur ignore les index SPATIAL sur les colonnes qui n'ont pas d'attribut SRID (et ne sont donc pas restreints au SRID).

Rouault a commenté le 17 juil. 2019

J'espère que l'importance de cette question augmente

Il s'agit d'un logiciel libre et open source. Voir http://nyalldawson.net/2016/08/how-to-effectively-get-things-changed-in-qgis/ qui s'applique également à GDAL

YoshiakiYamasaki a commenté le 18 juil. 2019

Je vois. Merci pour l'information. J'essaierai de soumettre une pull request plus tard.

Pour être honnête, c'est la première fois que vous soumettez une pull request. Par conséquent, il faut peut-être un peu de temps. Cependant, je veux l'essayer!

Miurahr commenté le 15 déc. 2019

@YoshiakiYamasaki Comment procéder lorsqu'un SRID non pris en charge est utilisé dans les données source ?

Les tables InnoDB autorisent les valeurs SRID pour les SRS cartésiens et géographiques. Les tables MyISAM autorisent les valeurs SRID pour les SRS cartésiens.

Le SRS géographique est tel que 4326 et cartésien est tel que 27700.

YoshiakiYamasaki commenté le 16 déc. 2019 •

@YoshiakiYamasaki Comment procéder lorsqu'un SRID non pris en charge est utilisé dans les données source ?

Les tables InnoDB autorisent les valeurs SRID pour les SRS cartésiens et géographiques. Les tables MyISAM autorisent les valeurs SRID pour les SRS cartésiens.

Le SRS géographique est tel que 4326 et cartésien est tel que 27700.

Dans ce cas, l'erreur suivante est renvoyée.

ERREUR 1178 (42000) : le moteur de stockage de la table ne prend pas en charge les systèmes de référence spatiale géographique

Si vous spécifiez un SRID non pris en charge, l'erreur suivante est renvoyée.

ERREUR 3548 (SR001) : Il n'y a pas de système de référence spatiale avec le SRID 277000.

mysql> CREATE TABLE test_InnoDB(id INT, geo GEOMETRY SRID 4236)
Requête OK, 0 ligne affectée (0,15 seconde)

mysql> supprime la table test_InnoDB
Requête OK, 0 ligne affectée (0,10 seconde)

mysql> CREATE TABLE test_InnoDB(id INT, geo GEOMETRY SRID 27700)
Requête OK, 0 ligne affectée (0,04 s)

mysql> supprime la table test_InnoDB
Requête OK, 0 ligne affectée (0,07 s)

mysql> CREATE TABLE test_MyISAM(id INT, geo GEOMETRY SRID 4236) ENGINE=MyISAM
ERREUR 1178 (42000) : le moteur de stockage de la table ne prend pas en charge les systèmes de référence spatiale géographique
mysql> CREATE TABLE test_MyISAM(id INT, geo GEOMETRY SRID 27700) ENGINE=MyISAM
Requête OK, 0 ligne affectée (0,02 seconde)

mysql> supprime la table test_MyISAM
Requête OK, 0 ligne affectée (0,02 seconde)

mysql> CREATE TABLE test_InnoDB(id INT, geo GEOMETRY SRID 277000)
ERREUR 3548 (SR001) : il n'y a pas de système de référence spatiale avec le SRID 277000.

Miurahr commenté le 16 déc. 2019

@YoshiakiYamasaki Quel est le comportement correct de GDAL/ogr lors de l'acceptation d'une telle valeur SRID ?

Le simple ajout d'un bloc SRID entraîne l'échec du cas d'autotest test_ogr_mysql_longlat.

Sans SRID, avant d'ajouter SRID, ça passe.
Est-ce un comportement attendu pour les utilisateurs de MySQL ? Le cas devrait-il échouer en raison d'une combinaison mal configurée de ENGINE et SRID ?

Miurahr commenté le 16 déc. 2019

Cela signifie également que la table geometry_columns n'est plus nécessaire puisque MySQL 8.0 utilise la table INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS.

Il semble que la table soit nécessaire lors de l'utilisation d'une ancienne version de MySQL et MariaDB. Ainsi, le pilote doit gérer deux manières différentes selon la version du serveur.

Miurahr commenté le 16 déc. 2019

Cela signifie également que la table geometry_columns n'est plus nécessaire puisque MySQL 8.0 utilise la table INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS.
@joshbernfeld J'aimerais le mettre à jour comme un autre PR que #2111 pour examen car il affecte de nombreuses parties du pilote mysql.

YoshiakiYamasaki a commenté le 17 déc. 2019

@YoshiakiYamasaki Quel est le comportement correct de GDAL/ogr lors de l'acceptation d'une telle valeur SRID ?

Le simple ajout d'un bloc SRID entraîne l'échec du cas d'autotest test_ogr_mysql_longlat.

Sans SRID, avant d'ajouter SRID, ça passe.
Est-ce un comportement attendu pour les utilisateurs de MySQL ? Le cas devrait-il échouer en raison d'une combinaison mal configurée de ENGINE et SRID ?

@miurahr
Je pense que renvoyer l'erreur MySQL directement est le comportement correct.

Cependant, dans ce cas, nous ne pouvons pas importer de données dans MySQL, il est donc souhaitable de fournir la solution de contournement suivante :

Options pouvant être créées uniquement dans un fichier texte (ogr2ogr n'exécute pas SQL directement). J'ai déjà soumis la demande de fonctionnalité suivante. Si cette option est fournie, les utilisateurs de MySQL peuvent résoudre le problème eux-mêmes en modifiant l'instruction SQL.
#1090

Les options pouvant être importées sans SRID, telles que -no-grid, sont fournies en tant qu'options pour ogr2ogr (même comportement que le comportement actuel)

BTW, il y a l'arrière-plan suivant. Aujourd'hui, peu d'utilisateurs souhaitent utiliser la fonctionnalité SIG avec MyISAM. Presque les utilisateurs souhaitent utiliser la fonctionnalité SIG avec InnoDB.


L'utilisation d'ogr2ogr pour charger un fichier de formes dans les types de géographie MS SQL Server présente des problèmes d'orientation de l'anneau

Je fais ça depuis un moment et ça marche bien, sauf que les orientations de l'anneau sont toujours à l'envers. SQL Server suit la "règle de la main gauche" et s'attend à ce que l'intérieur du polygone soit vers la gauche lorsque vous vous déplacez le long de l'anneau, donc normalement l'anneau doit être orienté dans le sens antihoraire. Sinon, l'intérieur est considéré comme la Terre entière et l'extérieur du polygone est la zone la plus petite (donc l'intérieur est plus grand que l'extérieur).

Ogr2ogr charge toujours mes polygones afin qu'ils soient dans la mauvaise orientation, j'exécute donc simplement une commande SQL UPDATE à l'aide de la méthode ReorientObject() pour changer la direction et résoudre le problème. Cependant, j'ai maintenant un ensemble de données qui contient des objets MULTIPOLYGON, et ReorientObject() ne fonctionne pas sur ceux-ci.

Je souhaite vraiment qu'il y ait un moyen de dire à ogr2ogr d'utiliser simplement l'orientation opposée lors du chargement dans SQL, mais je ne vois pas une telle option. J'expérimente avec des idées comme le téléchargement en tant que géométrie et ensuite essayer de le corriger lors de la conversion en géographies, ou en convertissant les MULTIPOLYGON en GEOMETRYCOLLECTIONs, en effectuant le correctif ReorientObject() (qui fonctionne sur les collections de géométrie), puis en reconvertissant en MULTIPOLYGON, en convertissant d'abord en autre chose que le fichier de formes, puis en téléchargeant vers SQL pour voir si J'obtiens des résultats différents (peut-être GeoJSON ?).

Est-ce que quelqu'un a déjà traité ce problème et connaît une solution simple ? Les fichiers de formes ont-ils une règle d'orientation différente et ogr2ogr n'est-il pas au courant de la signification de l'orientation, alors s'en moque ? On dirait un défaut.


Chemins

Nous avons nos géodonnées. Préparez-vous maintenant à basculer.

Tout d'abord, nous définissons notre premier générateur de chemin :

d3.geo.path() est une bouée de sauvetage totale d'une fonction. Il fait tout le sale boulot de traduire ce désordre de coordonnées GeoJSON en désordres encore plus désordonnés de codes de chemin SVG. Salut à tous d3.geo.path() !

Maintenant nous pourrait collez tout ce GeoJSON directement dans notre fichier HTML, mais tant pis, tant de coordonnées et d'accolades, quel gâchis ! Il est plus propre et plus courant de conserver les géodonnées dans un fichier séparé et de les charger en utilisant d3.json() :

d3.json() prend deux arguments. Premièrement, il faut une chaîne pointant vers le chemin du fichier à charger. Deuxièmement, il faut une fonction de rappel qui est déclenchée lorsque le fichier JSON a été chargé et analysé. (Voir Gestion des erreurs de chargement de données pour plus de détails sur la fonction de rappel.) d3.json() , tout comme d3.csv() , est asynchrone , ce qui signifie que cela n'empêchera pas le reste de votre code de s'exécuter pendant que le navigateur attend le chargement de ce fichier externe. Par exemple, le code placé après la fonction de rappel peut être exécutée avant que le contenu du rappel lui-même :

Donc, en règle générale, lors du chargement de fichiers de données externes, placez le code qui dépend de ces données dans la fonction de rappel. (Ou placez le code dans d'autres fonctions personnalisées, puis appelez ces fonctions à partir du rappel.)

Revenons à l'exemple. Enfin, nous lions les fonctionnalités GeoJSON à de nouveaux éléments de chemin, créant un nouveau chemin pour chaque fonctionnalité :

Notez cette dernière ligne, dans laquelle d (l'attribut de données de chemin) fait référence à notre générateur de chemin, qui prend comme par magie les géodonnées liées et calcule tout ce code SVG fou. Le résultat est la figure 12-1.

Une carte! C'était si facile ! Vérifiez-le dans 01_chemins.html . Le reste n'est que personnalisation.

Vous pouvez trouver beaucoup plus de détails sur les chemins et les options de générateur de chemin sur le wiki.


D:GISPekanbaruBapendaSMARTMAPpeta>ogr2ogr -f “ESRI Shapefile” 1471010001.shp 1471010001.TAB
ERREUR 1 : Tentative d'écriture d'une géométrie non polygonale (POINT) dans un fichier de formes de type POLYGONE.
ERREUR 1 : Impossible d'écrire la fonctionnalité 4488 à partir de la couche 1471010001.
ERREUR 1 : Terminer la traduction prématurément après un échec
traduction de la couche 1471010001 (utilisez -skipfailures pour ignorer les erreurs)

Erreur 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 polygone saja …

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


Hfrhyu

Comment est-il possible d'avoir un score de capacité inférieur à 3 ?

Un vampire peut-il attaquer deux fois avec ses griffes en utilisant Multiattack ?

Impossible de déployer les métadonnées à partir de l'organisation scratch Partner Developer en raison de champs supplémentaires

Quel est l'intérêt de désactiver Num Lock sur les écrans de connexion ?

Y a-t-il déjà eu une conception d'avion de ligne impliquant la réduction de la charge du générateur en installant des panneaux solaires ?

Un nouvel ami de mon frère lui a donné un tas de cartes de baseball qui sont censées être extrêmement précieuses. Est-ce une arnaque ?

Des théorèmes qui ont entravé le progrès

Comment les baies et les détroits peuvent-ils être déterminés dans une carte générée de manière procédurale ?

Que deviendrait un gratte-ciel moderne s'il pleuvait des micro trous noirs ?

Regarder quelque chose être écrit dans un fichier en direct avec queue

Compilation croisée pour RPi - erreur lors du chargement des bibliothèques partagées

Je m'envole pour la France aujourd'hui et mon passeport expire dans moins de 2 mois

Pourquoi ai-je deux réponses différentes pour ce problème de comptage ?

Indicateur LED haute tension 40-1000 VDC sans alimentation supplémentaire

Comment la régression quantile se compare-t-elle à la régression logistique avec la variable divisée au quantile ?

Comment puis-je empêcher les versions hyper évoluées de créatures ordinaires d'anéantir leurs cousins ​​?

Ressources importantes pour les civilisations de l'âge des ténèbres ?

Est-il légal pour l'entreprise d'utiliser mon adresse e-mail professionnelle pour prétendre que j'y travaille toujours ?

Pourquoi la troisième loi de Newton ne signifie-t-elle pas qu'une personne rebondit là où elle a commencé lorsqu'elle a touché le sol ?

Comment déplacer une ligne fine avec la flèche noire dans Illustrator ?

Casting Java : Java 11 lève LambdaConversionException alors que 1.8 ne le fait pas

Comment convertir un fichier ASCII (avec coordonnées lat, lon) en un fichier de formes à l'aide d'OGR ?

Dessiner des cellules de grille dans QGIS ? Comment extraire des entités avec des coordonnées spécifiques à partir d'un ShapeFile ? Comment définir le système de coordonnées verticales lors de la création d'un fichier de formes 3D ? requête sql à partir d'un fichier texteComment conserver les données dans la table attributaire lors de l'importation d'un fichier ASCII dans ArcMapCréation d'une image avec des positions de latitude/longitude spécifiques à l'aide de GDAL ? fichier ASCII utilisant ogr

J'ai un fichier ASCII avec les colonnes suivantes : ID, longitude, latitude, valeur

Est-il possible d'utiliser OGR (ogr2ogr ou ogrinfo) en ligne de commande pour ouvrir le fichier ASCII et le convertir en shapefile (en WGS84) en utilisant les coordonnées du point (champ X=longtitude, champ Y=latitude) ?

Ce que je veux faire est similaire à ce que fait QGIS lors de l'ouverture d'un fichier ASCII avec "Delimited Text" et de la définition de la géométrie (coordonnées du point).

Je veux le faire pour un grand nombre de fichiers, donc je veux savoir si cela est possible dans OGR.

J'ai un fichier ASCII avec les colonnes suivantes : ID, longitude, latitude, valeur

Est-il possible d'utiliser OGR (ogr2ogr ou ogrinfo) en ligne de commande pour ouvrir le fichier ASCII et le convertir en shapefile (en WGS84) en utilisant les coordonnées du point (champ X=longtitude, champ Y=latitude) ?

Ce que je veux faire est similaire à ce que fait QGIS lors de l'ouverture d'un fichier ASCII avec "Delimited Text" et de la définition de la géométrie (coordonnées du point).

Je veux le faire pour un grand nombre de fichiers, donc je veux savoir si cela est possible dans OGR.

J'ai un fichier ASCII avec les colonnes suivantes : ID, longitude, latitude, valeur

Est-il possible d'utiliser OGR (ogr2ogr ou ogrinfo) en ligne de commande pour ouvrir le fichier ASCII et le convertir en shapefile (en WGS84) en utilisant les coordonnées du point (champ X=longtitude, champ Y=latitude) ?

Ce que je veux faire est similaire à ce que fait QGIS lors de l'ouverture d'un fichier ASCII avec "Delimited Text" et de la définition de la géométrie (coordonnées du point).

Je veux le faire pour un grand nombre de fichiers, donc je veux savoir si cela est possible dans OGR.

J'ai un fichier ASCII avec les colonnes suivantes : ID, longitude, latitude, valeur

Est-il possible d'utiliser OGR (ogr2ogr ou ogrinfo) en ligne de commande pour ouvrir le fichier ASCII et le convertir en shapefile (en WGS84) en utilisant les coordonnées du point (champ X=longtitude, champ Y=latitude) ?

Ce que je veux faire est similaire à ce que fait QGIS lors de l'ouverture d'un fichier ASCII avec "Delimited Text" et de la définition de la géométrie (coordonnées du point).

Je veux le faire pour un grand nombre de fichiers, donc je veux savoir si cela est possible dans OGR.


Voir la vidéo: EXCEL Vers Shapefile CSV to SHP QGis (Octobre 2021).