Hi Brett

There are two fixes. Both of them are working for more than a week on my server with no errors and no new invalid geoms in the db.

regarding the array_length - I was not aware of that, as I'm using 8.4 on all my machines. I will have a look how to change that.

The performance issue - no, I made no tests, I can try to test it on an other server, where I did not change osmosis to the modified version.

kirill

On 18.04.2011 15:25, Brett Henderson wrote:
Hi Kirill,

Is the fix you've provided in defect 3650 still valid or is a more elaborate fix required? I have two concerns with the fix as it stands:

   1. If I'm reading the SQL query correctly it uses the array_length
      function which was only introduced in PostgreSQL 8.4.  Currently
      the code is compatible with PostgreSQL 8.3.  Is there any way to
      make it PostgreSQL 8.3 compatible?
   2. I'm hesitant to make too many changes in this space without some
      proof that diff processing performance isn't impacted.  Have you
      taken performance measurements before and after the change?

Brett


On Sat, Apr 9, 2011 at 9:57 PM, Kirill Bestoujev <bestou...@gmail.com <mailto:bestou...@gmail.com>> wrote:

    I do look at them - (select n.geom as geom, count(1).


    2011/4/9 Jochen Topf <joc...@remote.org <mailto:joc...@remote.org>>

        Sorry, that was a bit unclear. You can't just look at the node
        ids, you have
        to look at the geometries of those nodes, too.

        Jochen

        On Sat, Apr 09, 2011 at 02:36:36PM +0400, Kirill Bestoujev wrote:
        > Date: Sat, 9 Apr 2011 14:36:36 +0400
        > From: Kirill Bestoujev <bestou...@gmail.com
        <mailto:bestou...@gmail.com>>
        > To: Jochen Topf <joc...@remote.org <mailto:joc...@remote.org>>
        > Cc: osmosis-dev@openstreetmap.org
        <mailto:osmosis-dev@openstreetmap.org>
        > Subject: Re: [osmosis-dev] one node ways
        >
        > Why? Where do I have to look if not at the nodes???
        >
        > K.
        >
        > 2011/4/9 Jochen Topf <joc...@remote.org
        <mailto:joc...@remote.org>>
        >
        > > You can have several nodes on the same position which
        could also lead to a
        > > broken geometry but will not be caught be looking just at
        the nodes.
        > >
        > > Jochen
        > >
        > > On Sat, Apr 09, 2011 at 02:22:58PM +0400, Kirill Bestoujev
        wrote:
        > > > Date: Sat, 9 Apr 2011 14:22:58 +0400
        > > > From: Kirill Bestoujev <bestou...@gmail.com
        <mailto:bestou...@gmail.com>>
        > > > To: osmosis-dev@openstreetmap.org
        <mailto:osmosis-dev@openstreetmap.org>
        > > > Subject: Re: [osmosis-dev] one node ways
        > > >
        > > > And in works!
        > > >
        > > > and (select count(1) from (select n.geom as geom,
        count(1) as node_count
        > > > from way_nodes wn join nodes n on n.id <http://n.id> =
        wn.node_id where wn.way_id =
        > > > w.idgroup by 1) n_group) > 1
        > > >
        > > > added to the request below works fine!
        > > >
        > > > I will look at it for a couple of days to make sure it
        works in all
        > > cases,
        > > > but looks like it is a solution.
        > > >
        > > > What is the process of merging it into osmosis distro?
        > > >
        > > > The pg_snapshot and pg_simple load scripts   should also
        be updated!
        > > >
        > > > Kirill
        > > >
        > > > 2011/4/9 Kirill Bestoujev <bestou...@gmail.com
        <mailto:bestou...@gmail.com>>
        > > >
        > > > > Sure, I know this. But if I create an indes with, for
        example, a
        > > st_within
        > > > > condition, than osmosis falls already while
        replicating diffs...
        > > > >
        > > > > That's why I want to solve the problem in osmosis
        itself, not in the
        > > db.
        > > > >
        > > > > Yesterday on Russian irc channel we found a solution
        to add to
        > > NodeDao.java
        > > > > linesting update sql-command the following line:
        > > > >
        > > > > and (select count(1) from (select n.geom as geom,
        count(1) as
        > > node_count
        > > > > from way_nodes wn join nodes n on n.id <http://n.id> =
        wn.node_id where wn.way_id =
        > > w.idgroup by 1) n_group) > 1
        > > > >
        > > > > This solves the problem with ways having only
        duplicate nodes in them.
        > > > >
        > > > > But the recompiled version of osmosis falls on the
        following command:
        > > > >
        > > > > org.springframework.jdbc.
        > > > > UncategorizedSQLException: PreparedStatementCallback;
        uncategorized
        > > > > SQLException for SQL [UPDATE ways w SET linestring = (
        SELECT
        > > > > MakeLine(c.geom) AS way_line FROM ( SELECT n.geom AS
        geom FROM nodes n
        > > INNER
        > > > > JOIN way_nodes wn ON n.id <http://n.id> = wn.node_id
        WHERE (wn.way_id = w.id <http://w.id>) and
        > > > > array_length(nodes, 1) > 1 ORDER BY wn.sequence_id ) c
        ) WHERE w.id <http://w.id>  =
        > > ?];
        > > > > SQL state [XX000]; error code [0]; ERROR: Exception in
        LWGEOM2GEOS;
        > > nested
        > > > > exception is org.postgresql.util.PSQLException: ERROR:
        Exception in
        > > > > LWGEOM2GEOS
        > > > >
        > > > > the added code - and array_length(nodes, 1) > 1 -
        which I thought was
        > > > > solving the problem does not work OR there is an other
        problem - not
        > > one
        > > > > node ways.
        > > > >
        > > > > Kirill
        > > > >
        > > > >
        > > > > 2011/4/9 Jochen Topf <joc...@remote.org
        <mailto:joc...@remote.org>>
        > > > >
        > > > >> Hi!
        > > > >>
        > > > >> This has worked for me: I use the ST_isvalid()
        function in Postgis to
        > > find
        > > > >> out
        > > > >> if a geometry is valid. If not, I either delete the
        way or set the
        > > > >> geometry to
        > > > >> NULL and then do all further processing only on ways
        with geometry !=
        > > > >> NULL.
        > > > >>
        > > > >> Jochen
        > > > >>
        > > > >> On Fri, Apr 08, 2011 at 08:55:43PM +0400, Kirill
        Bestoujev wrote:
        > > > >> > Date: Fri, 8 Apr 2011 20:55:43 +0400
        > > > >> > From: Kirill Bestoujev <bestou...@gmail.com
        <mailto:bestou...@gmail.com>>
        > > > >> > To: Igor Podolskiy <igor.podols...@vwi-stuttgart.de
        <mailto:igor.podols...@vwi-stuttgart.de>>
        > > > >> > Cc: osmosis-dev <osmosis-dev@openstreetmap.org
        <mailto:osmosis-dev@openstreetmap.org>>
        > > > >> > Subject: Re: [osmosis-dev] one node ways
        > > > >> >
        > > > >> > Igor,
        > > > >> >
        > > > >> > the context is simple - we have a mirror of the
        planet, we update if
        > > > >> with
        > > > >> > replication with minute diffs.
        > > > >> >
        > > > >> > You may have a look at way 35966868 to see the
        problem by yourself.
        > > > >> After
        > > > >> > creation of geom by osmosis it looks like
        LINESTRING(2.2321042
        > > > >> > 48.7767191,2.2321042 48.7767191) which is not good.
        > > > >> >
        > > > >> >
        > > > >> >
        > > > >> > K.
        > > > >> >
        > > > >> > 2011/4/8 Igor Podolskiy
        <igor.podols...@vwi-stuttgart.de
        <mailto:igor.podols...@vwi-stuttgart.de>>
        > > > >> >
        > > > >> > > Hi Kirill,
        > > > >> > >
        > > > >> > >
        > > > >> > >  When a one node way is present in the database
        and osmosis
        > > creates a
        > > > >> > >> linestring geometry for it the resulting
        geometry is something
        > > like
        > > > >> > >> LINESTRING(139.386972 37.095865)
        > > > >> > >>
        > > > >> > >> When we process this linestring with any postgis
        function it
        > > gives us
        > > > >> > >> an error - the linestring must contain 0 or > 1
        nodes.
        > > > >> > >>
        > > > >> > >
        > > > >> > > I think I understand the problem but I'm having a
        hard time
        > > > >> understanding
        > > > >> > > the context :) Could you maybe provide a simple
        example and/or a
        > > > >> > > step-by-step guide to reproduce this? Like the
        osmosis command
        > > line
        > > > >> you're
        > > > >> > > using, the kind of data you're trying to put in
        the database -
        > > that
        > > > >> would be
        > > > >> > > very helpful.
        > > > >> > >
        > > > >> > > Regards
        > > > >> > > Igor
        > > > >> > >
        > > > >>
        > > > >> > _______________________________________________
        > > > >> > osmosis-dev mailing list
        > > > >> > osmosis-dev@openstreetmap.org
        <mailto:osmosis-dev@openstreetmap.org>
        > > > >> > http://lists.openstreetmap.org/listinfo/osmosis-dev
        > > > >>
        > > > >>
        > > > >> --
        > > > >> Jochen Topf joc...@remote.org
        <mailto:joc...@remote.org>
        http://www.remote.org/jochen/+49-721-388298
        > > > >>
        > > > >>
        > > > >
        > >
        > > > _______________________________________________
        > > > osmosis-dev mailing list
        > > > osmosis-dev@openstreetmap.org
        <mailto:osmosis-dev@openstreetmap.org>
        > > > http://lists.openstreetmap.org/listinfo/osmosis-dev
        > >
        > >
        > > --
        > > Jochen Topf joc...@remote.org <mailto:joc...@remote.org>
        http://www.remote.org/jochen/ +49-721-388298
        > >
        > >

        --
        Jochen Topf joc...@remote.org <mailto:joc...@remote.org>
        http://www.remote.org/jochen/  +49-721-388298



    _______________________________________________
    osmosis-dev mailing list
    osmosis-dev@openstreetmap.org <mailto:osmosis-dev@openstreetmap.org>
    http://lists.openstreetmap.org/listinfo/osmosis-dev



_______________________________________________
osmosis-dev mailing list
osmosis-dev@openstreetmap.org
http://lists.openstreetmap.org/listinfo/osmosis-dev

Reply via email to