Error importing GIS / Gdal / OSGeos in django on Windows

I try this with a clock and I could not solve the problem. I use this link to configure GeoDjango on Windows. I get the following error message and I don’t know what to do. All environment variables are set in Windows and I can import using

from osgeo import gdal

successfully in python terminal like

import gdal

outdated. In the Postgresql database, I have all the extensions needed like address_standardizer , fuzzystrmatch , ogr_fdw , pgrouting , plpgsql , pointcloud , pointcloud_postgis , postgis , postgis_sfcgal , postgis_tiger_geocoder and postgis_topology .

Django project settings:

DATABASES = { 'default': { 'ENGINE': 'django.contrib.gis.db.backends.postgis', 'NAME': 'postgis_24_sample', 'USER': 'postgres', 'PASSWORD': 'Hello123', 'HOST': 'localhost', 'PORT': '', } } GDAL_LIBRARY_PATH = os.getenv('GDAL_LIBRARY_PATH') GEOS_LIBRARY_PATH = os.getenv('GEOS_LIBRARY_PATH') INSTALLED_APPS = [ ... 'django.contrib.postgis', ... ] 

ERROR:

 (easy_geodj) C:\Users\dell\Desktop\easy_geodj\easy_geodj\djlocate>python manage.py runserver Unhandled exception in thread started by <function wrapper at 0x066D6330> Traceback (most recent call last): File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\utils\autoreload.py", line 227, in wrapper fn(*args, **kwargs) File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\core\management\commands\runserver.py", line 117, in inner_run autoreload.raise_last_exception() File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\utils\autoreload.py", line 250, in raise_last_exception six.reraise(*_exception) File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\utils\autoreload.py", line 227, in wrapper fn(*args, **kwargs) File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\__init__.py", line 27, in setup apps.populate(settings.INSTALLED_APPS) File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\apps\registry.py", line 108, in populate app_config.import_models() File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\apps\config.py", line 202, in import_models self.models_module = import_module(models_module_name) File "c:\python27\Lib\importlib\__init__.py", line 37, in import_module __import__(name) File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\auth\models.py", line 4, in <module> from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\auth\base_user.py", line 52, in <module> class AbstractBaseUser(models.Model): File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\db\models\base.py", line 124, in __new__ new_class.add_to_class('_meta', Options(meta, app_label)) File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\db\models\base.py", line 330, in add_to_class value.contribute_to_class(cls, name) File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\db\models\options.py", line 214, in contribute_to_class self.db_table = truncate_name(self.db_table, connection.ops.max_name_length()) File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\db\__init__.py", line 33, in __getattr__ return getattr(connections[DEFAULT_DB_ALIAS], item) File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\db\utils.py", line 211, in __getitem__ backend = load_backend(db['ENGINE']) File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\db\utils.py", line 115, in load_backend return import_module('%s.base' % backend_name) File "c:\python27\Lib\importlib\__init__.py", line 37, in import_module __import__(name) File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\db\backends\postgis\base.py", line 5, in <module> from .features import DatabaseFeatures File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\db\backends\postgis\features.py", line 1, in <module> from django.contrib.gis.db.backends.base.features import BaseSpatialFeatures File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\db\backends\base\features.py", line 4, in <module> from django.contrib.gis.db.models import aggregates File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\db\models\__init__.py", line 3, in <module> from django.contrib.gis.db.models.aggregates import * # NOQA File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\db\models\aggregates.py", line 1, in <module> from django.contrib.gis.db.models.fields import ExtentField File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\db\models\fields.py", line 3, in <module> from django.contrib.gis import forms, gdal File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\forms\__init__.py", line 3, in <module> from .fields import ( # NOQA File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\forms\fields.py", line 4, in <module> from django.contrib.gis.geos import GEOSException, GEOSGeometry File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\geos\__init__.py", line 5, in <module> from .collections import ( # NOQA File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\geos\collections.py", line 11, in <module> from django.contrib.gis.geos.geometry import GEOSGeometry, LinearGeometryMixin File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\geos\geometry.py", line 11, in <module> from django.contrib.gis import gdal File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\gdal\__init__.py", line 43, in <module> from django.contrib.gis.gdal.driver import Driver # NOQA File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\gdal\driver.py", line 5, in <module> from django.contrib.gis.gdal.prototypes import ds as vcapi, raster as rcapi File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\gdal\prototypes\ds.py", line 9, in <module> from django.contrib.gis.gdal.libgdal import GDAL_VERSION, lgdal File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\gdal\libgdal.py", line 48, in <module> lgdal = CDLL(lib_path) File "c:\python27\Lib\ctypes\__init__.py", line 366, in __init__ self._handle = _dlopen(self._name, mode) WindowsError: [Error 126] The specified module could not be found 
+7
python django geospatial postgis geodjango
source share
2 answers

GIS dependencies are really hard to get, especially on Windows. If you want to stick with this OS, I would recommend using OsGeo4W .

The steps that worked for me are as follows:

Be sure to uninstall all distributions of these GIS packages that you have installed, and carefully follow the instructions for OSGeo4W Installation Instructions . Apache and MapServer are installed for installation by default, you can disable them because they are not needed.

How can you change your settings.py to look like this:

 GEOS_LIBRARY_PATH = 'C:\\OSGeo4W64\\bin\\geos_c.dll' GDAL_LIBRARY_PATH = 'C:\\OSGeo4W64\\bin\\gdal201.dll' 

Note 1: the paths will depend on where you installed OSGeo4W, but (as far as I remember) these are the default values.

Note 2: if you download and install the 32-bit version, your paths should look like this:

 GEOS_LIBRARY_PATH = 'C:\\OSGeo4W\\bin\\geos_c.dll' GDAL_LIBRARY_PATH = 'C:\\OSGeo4W\\bin\\gdal201.dll' 

I was working on a project using a similar stack and felt that it was much easier to configure Linux on Linux (specifically Ubuntu). If this is just an educational personal project or if it will still be hosted on a Linux machine, I would suggest switching to the Linux dev environment.

In Ubuntu, for example, you can simply do:

 $ sudo apt-get install binutils libproj-dev gdal-bin 

In addition, the official GeoDjango docs have good information.

+3
source share

I would ignore all manual attempts to manually install and use the anaconda environment. GIS laws are notoriously inconsistent with installation, and the anaconda smooths out a large number of rough edges.

+3
source share

All Articles