GeoDjango GEOSException error

后端 未结 8 872
Happy的楠姐
Happy的楠姐 2020-12-12 14:06

Trying to install a GeoDjango on my machine. I\'m really new to Python and being brought into a project that has been a very tricky install for the other team members. I ins

相关标签:
8条回答
  • 2020-12-12 14:44

    In the latest GEOS install, the above answer didn't work... but was close to the problem.

    I changed the regex right above the geos_version_info(): from:

    version_regex = re.compile(r'^(?P<version>(?P<major>\d+)\.(?P<minor>\d+)\.(?P<subminor>\d+))((rc(?P<release_candidate>\d+))|dev)?-CAPI-(?P<capi_version>\d+\.\d+\.\d+)$')
    

    to be:

    version_regex = re.compile(r'^(?P<version>(?P<major>\d+)\.(?P<minor>\d+)\.(?P<subminor>\d+))((rc(?P<release_candidate>\d+))|dev)?-CAPI-(?P<capi_version>\d+\.\d+\.\d+).*$')
    

    Notice the .* added to the end of the regex.

    0 讨论(0)
  • 2020-12-12 14:44

    It appears that this has been fixed in Django as of last March or so. See also Django bug 20036. So upgrading to Django 1.5.4 will solve the problem.

    0 讨论(0)
  • 2020-12-12 14:47

    I fixed the issue by installing PostGIS with Postgres using https://postgresapp.com/downloads.html.

    1. Install PostGIS (2.2): brew install postgis
    2. To unlink geos if version is higher than 3.6.1: brew unlink geos
    3. Install Geos (3.6.1): brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/145b22e8330e094ee148861e72e26c03e73d34a1/Formula/geos.rb
    4. Switch geos version(latest version is 3.7.2 which is not supported by Django 1.11.3): brew switch geos 3.6.1
    5. Login to database and create postgis extensions: CREATE EXTENSION postgis; Test postgis extension: SELECT ST_Distance('LINESTRING(-122.33 47.606, 0.0 51.5)'::geography, 'POINT(-21.96 64.15)'::geography);
    6. Check postgis version: SELECT PostGIS_full_version();
    0 讨论(0)
  • 2020-12-12 14:53

    Brew just released geos 3.8.0 that of course breaks Django 1.11 again. The previous version, 3.7.3, was oh so very helpfully cleared by the all new all automatic cleanup now running on upgrades, so no brew switch geos 3.7.3 for me.

    I ended up using this post to understand how to find the previous version number and commit hash:

    cd $( brew --prefix )/Homebrew/Library/Taps/homebrew/homebrew-core
    git log -- Formula/geos.rb | less
    # find the version you need in the file, copy its hash
    brew unlink geos
    brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/<yourcommithash>/Formula/geos.rb
    

    After all this, the download for geos 3.7.3 fails SHA256 checksum validation for some reason... so I ended up trying 3.7.2, that actually worked.

    For now the command to reinstall 3.7.2 on Catalina is:

    brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/823b700ab61eeec57f34d50be2cc34a285fb5abc/Formula/geos.rb
    
    0 讨论(0)
  • 2020-12-12 14:53

    This can be fixed by trying the following,

    brew switch geos 3.6.1

    0 讨论(0)
  • 2020-12-12 15:01

    This is my solution (obviously it is ugly, like my English, but works). The problem is that the versions string has an white space unwanted in the RegEx.

    The error says:

    GEOSException: Could not parse version info string "3.4.2-CAPI-1.8.2 r3921"

    And the geos_version_info warns:

    Regular expression should be able to parse version strings such as '3.0.0rc4-CAPI-1.3.3', '3.0.0-CAPI-1.4.1' or '3.4.0dev-CAPI-1.8.0'

    Edit this file: site-packages/django/contrib/gis/geos/libgeos.py

    Look for the function: geos_version_info

    And change this line:

    ver = geos_version().decode()

    With this line:

    ver = geos_version().decode().split(' ')[0]

    There is also another problem, where there is a whitespace at the end but no more information is provided. Such version also doesn't match version regular expression, so strip()-ping the version may be expected behaviour as a quick fix. In my example it was: '3.8.0-CAPI-1.13.1 '

    0 讨论(0)
提交回复
热议问题