Message error: String index out of range:

classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

Message error: String index out of range:

timea
J'ai obtenu ce message erreur 20 fois aujourd'hui avec différents nombres après le :
Pourriez-vous m'indiquer à quoi s'agit il?
Merci.
Reply | Threaded
Open this post in threaded view
|

Re: Message error: String index out of range:

Gwendall Petit
Administrator
Timea,

Pourrais-tu préciser dans quel cas cette erreur apparaît ? Après quelle requête SQL ou quel traitement ?
A première vue, il s'agit d'un soucis de lecture d'un champ texte... mais je n'en suis pas certain.
Reply | Threaded
Open this post in threaded view
|

Re: Message error: String index out of range:

timea
Bonjour,

Aujourd'hui j'ai des messages différents pour le même requête donc le mieux si je les copie ici avec le fichier sql.
Les nouveaux messages:
Caused by: java.lang.IllegalArgumentException
Java heap space
Caused by: Java heap space

D'ailleurs si j'essaie de l'exécuter j'ai à nouveau le message erreur String index out of range: -2.

Merci d'avance.
T.
et la requête:
create table "gridIntersectWithBati" as select intersection(a.the_geom,b.the_geom)
as the_geom, a.the_geom from "studyarea" a, "reservoir_agglo" b where isValid(b.the_geom)
and intersects(a.the_geom,b.the_geom);
create table "gridIntersectWithBati1" as select intersection(a.the_geom,b.the_geom)
as the_geom, a.the_geom from "studyarea" a, "construction_surfacique_agglo" b where isValid(b.the_geom)
and intersects(a.the_geom,b.the_geom);
create table "gridIntersectWithBati2" as select intersection(a.the_geom,b.the_geom)
as the_geom, a.the_geom from "studyarea" a, "bati_remarquable_agglo" b where isValid(b.the_geom)
and intersects(a.the_geom,b.the_geom);
create table "gridIntersectWithBati3" as select intersection(a.the_geom,b.the_geom)
as the_geom, a.the_geom from "studyarea" a, "bati_industriel_agglo" b where isValid(b.the_geom)
and intersects(a.the_geom,b.the_geom);
create table "gridIntersectWithBati4" as select intersection(a.the_geom,b.the_geom)
as the_geom, a.the_geom from "studyarea" a, "bati_indifferencie_agglo" b where isValid(b.the_geom)
and intersects(a.the_geom,b.the_geom);
create table "gridIntersectWithBatia" as "gridIntersectWithBati1" union "gridIntersectWithBati2";
create table "gridIntersectWithBatib" as "gridIntersectWithBati3" union "gridIntersectWithBati4";
create table "gridIntersectWithBati" as "gridIntersectWithBatia" union "gridIntersectWithBatib";
create table exploded as select explode() from "gridIntersectWithBati";
create table "filterPointsAndLines" as select * from exploded where
dimension(the_geom) = 2;
create table "unionGridBati" as select geomunion(the_geom) as the_geom,the_geom from
"filterPointsAndLines" group by the_geom;
create table "batiDensityPerCell" as select area(the_geom) as area,the_geom from
"unionGridBati";
create table density as select a.the_geom, a.the_geom, b.area/area(a.the_geom) as density
from "studyarea" as a,"batiDensityPerCell" as b where a.the_geom=b.the_geom;
drop table "gridIntersectWithBati1";
drop table "gridIntersectWithBati2";
drop table "gridIntersectWithBati3";
drop table "gridIntersectWithBati4";
drop table "gridIntersectWithBatia";
drop table "gridIntersectWithBatib";
drop table "gridIntersectWithBati";
drop table "exploded";
drop table "filterPointsAndLines";
drop table "unionGridBati";
drop table "batiDensityPerCell";

Reply | Threaded
Open this post in threaded view
|

Re: Message error: String index out of range:

timea
In reply to this post by Gwendall Petit
En fait OrbisGIS n'arrive pas créer le tableau gridintersectwithBati4.
J'obtiens les messages erreurs à ce moment là.
Peut-être c'est un problème de taille de tableau?
Si j'utilise grid à la place de studyarea le script marche (hier a marché).
T.
Reply | Threaded
Open this post in threaded view
|

Re: Message error: String index out of range:

Gwendall Petit
Administrator
Bonjour Timea,

Avant toute chose, je voudrais comprendre comment ta première requête peut fonctionner (et celles qui suivent aussi, puisqu'elles sont identiques)!

Tu écris :
create table "gridIntersectWithBati" as select intersection(a.the_geom,b.the_geom) as the_geom, a.the_geom from "studyarea" a, "reservoir_agglo" b where isValid(b.the_geom) and intersects(a.the_geom,b.the_geom);
Le problème c'est que tu es en train de créer une table "gridIntersectWithBati" qui va avoir deux fois le même champ the_geom et donc théoriquement c'est impossible --> OrbisGIS doit t'afficher un message d'erreur.

Deuxième remarque : si tu travailles sur la dernière version d'OrbisGIS (disponible sur le site), tu n'as plus besoin d'encadrer tes noms de couches par des " ".

Selon moi, ta requête devrait donc être plutôt de ce genre :
create table gridIntersectWithBati as select intersection(a.the_geom,b.the_geom) as the_geom from studyarea a, reservoir_agglo b where isValid(b.the_geom) and intersects(a.the_geom,b.the_geom);
 
Enfin pour mieux comprendre ton problème, peux-tu me confirmer que ta couche "studyarea" est bien une couche vecteur et que "grid" est un maillage généré à l'aide de la fonction CreateGrid ?
Reply | Threaded
Open this post in threaded view
|

Re: Message error: String index out of range:

timea
Merci pour ta réponse rapide!
Je vérifie...
Reply | Threaded
Open this post in threaded view
|

Re: Message error: String index out of range:

timea
In reply to this post by Gwendall Petit
Bonjour,

J'utilise la dernière version d'Orbis, donc merci pour la conseille sur l'ortographe SQL... Existe-t(il un gid ou qc pour aider les débutants comme moi pour mieux progresser avec SQL et OrbisGIS? J'ai déjà téléchargé les pdfs de site OrbisGIS.

J'ai suivi le tutorial pour créer studyarea et le maillage en remplacant index avec gid. Peut-être il y a un meilleur moyen de le faire....
Par contre dans cette ligne

create table "gridIntersectWithBati" as select intersection(a.the_geom,b.the_geom) as the_geom, a.the_geom from "studyarea" a, "reservoir_agglo" b where isValid(b.the_geom) and intersects(a.the_geom,b.the_geom);
je pense qu'il faut garder la structure 'the_geom,a.the_geom from...' en remplacant the_geom avec gid pour obtenir la densité, et finalement j'ai abandonné studyarea, je travaille avec grid, comme suivant:

select register('gridIntersectWithBati1');
create table gridIntersectWithBati1 as select intersection(a.the_geom,b.the_geom)
as the_geom,a.gid from grid a, reservoir_agglo b where isValid(b.the_geom)
and intersects(a.the_geom,b.the_geom);
...
select register('density');
create table density as select a.the_geom, a.gid, b.area/area(a.the_geom) as density
from grid as a,batiDensityPerCell as b where a.gid=b.gid;

Merci pour ton aide, cela me permet d'avancer (même à distance).
Reply | Threaded
Open this post in threaded view
|

Re: Message error: String index out of range:

Gwendall Petit
Administrator
Bonjour Timea,

Pour l'aide sur OrbisGIS, il faut effectivement que tu utilises la doc en .pdf ou alors l'aide en ligne (qui vient d'être créée) disponible ici : http://brehat.ec-nantes.fr/orbisgis_download/documentation/online/fr/orbisgis_help.htm

Sinon pour le SQL en général, tu trouveras beaucoup de ressources sur internet. Voici un site très intéressant ou tu devrais trouver ton bonheur : http://sql.developpez.com/

Concernant ton script SQL, fonctionne-t-il finalement ?
Reply | Threaded
Open this post in threaded view
|

Re: Message error: String index out of range:

timea
oui ma requête marche maintenant. Merci.