karimbahgat / GeoVis

Python module to visualize shapefiles on a map
MIT License
38 stars 13 forks source link

It cannot open shapefiles #5

Open nadyabasos opened 8 years ago

nadyabasos commented 8 years ago

Hello. I installed the package by the option B, imported it successfully but got an error on the very first line from the Instant Mapping section: geovis.ViewShapefile("C:/shapefile.shp")

The error:

Traceback (most recent call last): File "", line 1, in File "./GeoVis-0.2.0\geovisinit.py", line 2321, in ViewShapefile File "./GeoVis-0.2.0\geovisinit.py", line 1511, in init File "./GeoVis-0.2.0\geovisinit.py", line 1515, in NewImage File "./GeoVis-0.2.0\geovisinit.py", line 909, in NewImage File "C:\Python27\lib\site-packages\PIL\Image.py", line 2014, in new return Image()._new(core.new(mode, size)) TypeError: integer argument expected, got float

I tried many different shapefiles, also using Customized Maps lines, but never managed to open any. I also tried to set the size myself: mysize = 500, 500 geovis.ViewShapefile(polygonshp, mysize)

But then I got an error:

TypeError: ViewShapefile() takes exactly 1 argument (2 given)

Python 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)] on win32. So how do I use the package? Thanks.

dropthemic commented 8 years ago

To get it working, edit init.py and modify line 907 from: dimensions = (width, height) to dimensions = (int(width), int(height))

I also had some issues with pillow and conda... but that's a different story. https://github.com/ContinuumIO/anaconda-issues/issues/150

vegetabledog commented 7 years ago

I encountered the "TypeError: integer argument expected, got float" at first time. I used Jupyter Notebook to write my python script. I read one answer from Karimbahgat on another Web Page to know that it may be caused by old version of PIL module from anaconda.

I used your way to edit two part of "dimensions = (width, height)" to "dimensions = (int(width), int(height))" of the init.py of geovis folder.

But after I implement the instant mapping sentence, "geovis.ViewShapefile("hk_line.shp")". I encounter another error problem. I'm wondering why.

The error:

> rendering hk_line
> 0%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100%
>   |||||||||||||||||||||||||||||||||||||||||||||||||
>         task completed in 16.592139 seconds
> 
> ---------------------------------------------------------------------------
> KeyError                                  Traceback (most recent call last)
> <ipython-input-5-2ada0375bda9> in <module>()
> ----> 1 geovis.ViewShapefile("hk_line.shp")
> 
> /Users/chenzhong/GeoVis-0.2.0/geovis/__init__.py in ViewShapefile(shapefilepath, **customoptions)
>    2320     customoptions = _CheckOptions(customoptions)
>    2321     renderer = _Renderer()
> -> 2322     renderer.ViewShapefile(shapefilepath, customoptions)
>    2323 def SaveShapefileImage(shapefilepath, savepath, **customoptions):
>    2324     """
> 
> /Users/chenzhong/GeoVis-0.2.0/geovis/__init__.py in ViewShapefile(self, shapefilepath, customoptions)
>    1516     def ViewShapefile(self, shapefilepath, customoptions):
>    1517         self._RenderShapefile(shapefilepath, customoptions)
> -> 1518         self._RenderMapTitle(shapefilepath, customoptions)
>    1519         self._ViewRenderedShapefile()
>    1520     def SaveShapefileImage(self, shapefilepath, savepath, customoptions):
> 
> /Users/chenzhong/GeoVis-0.2.0/geovis/__init__.py in _RenderMapTitle(self, shapefilepath, customoptions)
>    1539         if customoptions.get("maptitle"):
>    1540             textoptions = _CheckTextOptions(dict([("textsize",0.0452)]))
> -> 1541             self._RenderText(0.5, 0.05, customoptions["maptitle"], textoptions)
>    1542     def _RenderText(self, relx, rely, text, textoptions):
>    1543         self.renderer.RenderText(relx, rely, text, textoptions)
> 
> /Users/chenzhong/GeoVis-0.2.0/geovis/__init__.py in _RenderText(self, relx, rely, text, textoptions)
>    1541             self._RenderText(0.5, 0.05, customoptions["maptitle"], textoptions)
>    1542     def _RenderText(self, relx, rely, text, textoptions):
> -> 1543         self.renderer.RenderText(relx, rely, text, textoptions)
>    1544     def _RenderRectangle(self, upperleft, bottomright, customoptions):
>    1545         customoptions = self._RelSizesToPixels(customoptions)
> 
> /Users/chenzhong/GeoVis-0.2.0/geovis/__init__.py in RenderText(self, relx, rely, text, options)
>     913         options["textsize"] = options["textsize"]*2
>     914         if not options.get("texteffect"):
> --> 915             self._BasicText(relx, rely, text, options)
>     916     def RenderRectangle(self, upperleft, bottomright, customoptions):
>     917         leftrelx, uprely = upperleft
> 
> /Users/chenzhong/GeoVis-0.2.0/geovis/__init__.py in _BasicText(self, relx, rely, text, options)
>    1022 draws basic text, no effects
>    1023 """
> -> 1024         fontlocation = self.sysfontfolders[OSSYSTEM]+self.fontfilenames[options["textfont"]]
>    1025         font = PIL.ImageFont.truetype(fontlocation, size=options["textsize"])
>    1026         fontwidth, fontheight = self.drawer.textsize(text, font)
> 
> KeyError: 'darwin'
karimbahgat commented 7 years ago

The error happens when it is trying to render text. The global OSSYSTEM detects that you are on a mac (darwin), and tries to use it as a key to locate the system-specific font folder from the sysfontfolders attribute of the backend renderer class. But the error indicates that sysfontfolders does not contain a key named "darwin". Not sure why, because the source code for all the renderer classes have dict with a darwin key... Can you insert a print statement right before the error line to display the content of the sysfonfolders attribute?