Giter Site home page Giter Site logo

Comments (7)

mattijn avatar mattijn commented on August 24, 2024

Thanks for raising the issue. Quick look. I'm trying to break it down to isolate the issue:

import geopandas as gpd
from shapely import geometry
import topojson as tp
def visz_arcs(topo):
    gdf = gpd.GeoDataFrame(geometry=[geometry.LineString(arc) for arc in topo.to_dict()['arcs']])
    gdf.plot(cmap='Dark2')
pth = '/Users/mattijnvanhoek/Downloads/testcase_topojson/testcase_topojson.gpkg'
gdf = gpd.read_file(pth)
# when `shared_coords` set to `True`, a path is considered shared when 
# all coordinates appear in both paths (`coords-connected`).
topo = tp.Topology(gdf, prequantize=False, shared_coords=True)
visz_arcs(topo)

output_3_0

# when `shared_coords` set to `False` a path is considered shared when
# coordinates are on the same path (`path-connected`). 
# the path-connected strategy is more 'correct', but slower. Default is `True`.
topo = tp.Topology(gdf, prequantize=False, shared_coords=False)
visz_arcs(topo)

output_4_0

With shared_coords=True it seems there is some overlap with some line strings. These linestrings are not splitted and recognised as duplicate arcs.
This behaviour above is on master version. Not sure if the same happens in latest release.

It would be great if we can isolate it even further. Maybe it is possible to bring it back to 2 or 3 linestrings?

Currently the following gives to many output

from topojson.core.cut import Cut
cut = Cut(gdf, options={'prequantize':False, 'shared_coords':True})
cut.to_svg(separate=True, include_junctions=True)

image

from topojson.core.dedup import Dedup
dedup = Dedup(gdf, options={'prequantize':False, 'shared_coords':True})
dedup.to_svg(separate=True, include_junctions=True)

from topojson.

mattijn avatar mattijn commented on August 24, 2024

With shared_coords=False it seems OK, but what about here?
image

Hm, thinking about it. I think that is alright as well. A single point on a line is not a shared path and therefor not seen as a junction.
Ah, the green and pink arcs are separated because probably there is the start/end coordinate of the polygon. With a perfect topology these two arcs are combined again.

from topojson.

theroggy avatar theroggy commented on August 24, 2024

Probably you know this resource already, but I Just found this really interesting explanation that clarified for me at least what to expect: https://bost.ocks.org/mike/topology/

from topojson.

mattijn avatar mattijn commented on August 24, 2024

Yes. I use the same wording/phases to create a certain synergy, but the implementations are different.

from topojson.

mattijn avatar mattijn commented on August 24, 2024

See also https://mattijn.github.io/topojson/how-it-works.html

from topojson.

theroggy avatar theroggy commented on August 24, 2024

Some answers:

  • I noticed the issue in the release version and afterwards tested it on master as well to be sure it wasn't fixed yet in master.
  • I tried with shared_coords=False as well, and it seemed better but I still noticed issues. The performance is 3 times worse though, and the functional advantage offered by shared_coords=False is not relevant for my use case, so I focused on shared_coords=True for the moment

I think the problem at least starts in the 'join' phase: there is an issue in how the junctions are determined, as there are junctions in the middle of lines. Possibly there are also missing junctions which could explain the overlapping parts.

from topojson.

theroggy avatar theroggy commented on August 24, 2024

I have been looking deeper into it based on your feedback and it seems I misunderstood the impact of shared_coords=True. Both the overlapping pieces and the odd way the "red" line is split can be explained by this. Not sure if this behaviour is really wanted and/or "by design", but my data definitely needs shared_coords=True to get decent results.

As I stated before I also saw issues when I tried shared_coords=True but they might indeed be explained by the problem you raise here:

Ah, the green and pink arcs are separated because probably there is the start/end coordinate of the polygon. With a perfect topology these two arcs are combined again.

I'll have a look if I can add support to combine those arcs again...

from topojson.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.