Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
If you want to work through the examples in Chapter 3. Working With Vector Data, the bird observation data can be downloaded here:
http://desktopgisbook.com/files/desktop_gis_birds.zip
For the backdrop, use the world mosiac raster which is available from the Data page.
Read more of this story at Slashgeo.
One of the highlights of this trip was the chance to meet fellow Python and GIS programmer, and blogger, Jáchym Čepický.
I'm not sure how many readers of Planet OSGeo understand Czech and know that Jáchym went through a scary episode in life this past summer. He gave me a sobering recap and then we had some less sobering toasts to his good health at Pivovarský klub. In a city served almost exclusively by single-beer pubs, Pivovarský klub is an oasis for the beer enthusiast. I had several beers from the tap that I never saw anywhere else -- beers far more fresh and flavorful than the ubiquitous Gambrinus.
After a rather long lapse, I had the occasion to write some Java code recently (mainly because it didn’t look like Howard’s PySDE was functional).
I didn’t like it.
Not to start a language flame war, but after using Python almost exclusively for 6 months, I found Java to be cumbersome. I kept thinking “if it were Python I could do it this way”.
Sending an email from Java—frightening. From Python—simple.
Lest you think I’m a Java newbie, I’ve been using it for both desktop and web applications for over 10 years.
Its ease of use and rapid development time, coupled with the fact that Python is the de facto “GIS” scripting language in most arenas, makes it my new favorite language.
Of course the old axiom still stands—To each his own…
Read more of this story at Slashgeo.
To my astonishment, I received the Sol Katz Award for 2008 today. For the record, here is the acceptance speech I gave via video to the FOSS4G closing plenary session:This is a big honour for me, to be in the company of people like Frank Warmerdam, Steve Lime and Markus Neteler as a Sol Katz recipient.
Those guys built core pieces of open source software with their bare hands, from the ground up, and that alone marks them out as special, but they also helped build their communities, and that's a big part of their contribution, too.
In my case, community building is almost my only contribution.
I have added some very small amounts of code to PostGIS and uDig over the years, but until only a few months ago my main contribution was community building, by finding the funding or staff time to develop the projects, providing some design guidelines, and by working on the mailing lists to help people with problems.
So I want to start out by thanking a few of the people who did much of the actual work on the projects I have been identified with over the years, the PostGIS spatial database and the uDig desktop application.
Dave Blasby, a brilliant programmer, who wrote the first versions of PostGIS when he was at Refractions, and who taught me by osmosis many of the technical fundamentals I exercise to this day.
Sandro Santilli, who was so impressive as a volunteer contributor to PostGIS that I hired him sight-unseen to maintain PostGIS, which he did from his home in Rome, for a number of years.
Mark Cave-Ayland, who is still involved in PostGIS, and the "go to" guy when the problems get really hard.
Jody Garnett and Jesse Eichar, who took the uDig project from a sketch in a funding proposal to a working application, and have continued to nurture and improve it up to this day.
Those are just a very few of the people who have contributed to making the PostGIS and uDig projects successful, there are so many more, and I thank them all. Thank you so much!
I hope, that my receiving this award will inspire other non-technical members of the open source community. Open source is collaborative in all kinds of ways, not only do we share code, but we share effort, and money. For a manager, contributing money or staff time to open source is often a karmic investment – the return is impossible to foresee, and yet, in my experience, there always seems to be a return in the end, you are repaid for your investment many times in many ways, most of which you don't expect.
I can't accept an award honoring my investments, in time and money, to open source, without also honoring two men who are largely unknown in the open source GIS community.
Graeme Leeming and Philip Kayal were my business partners for ten years at Refractions Research, during the time we developed PostGIS and uDig, and without their willingness to invest in my crazy schemes, we would never have achieved what we did.
Their willingness to join in my enthusiasms and get off the beaten path of consulting was critical to making the projects successful, and all of us took risks together to make the projects great. So thanks Graeme and Phil, and also all the folks at Refractions.
I hope you have all had a great FOSS4G, I am sorry I could not be with you in person this year, but I'm looking forward to raising a pint with you all in Sydney, Australia next year.
Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
This weekend I finished reviewing Pragmatic Version Control Using Git by Travis Swicegood. If you are a git user or interested in learning about the latest in version control for your source code, check it out. The book is available in beta now.
Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
Just watched Bart’s presentation on his employer’s use of OL + ExtJS: to see a map customized so thoroughly that I can no longer recognize it as OL is kinda neat.
Now watching Tim Schaub explain Vector Styling; “So new many developers don’t even know how to use it.” I’ll state that I think this is equal parts ‘new’ and ‘lack of effort into documentation’
Showing a *really* cool styling demo tool, which lets you put in code, run it, and executes the JS and creates a map. Totally need to get that into the website.
Showing the addUniqueStyleRules stuff; just keeps reminding me we really need graduated symbolizer convenience methods. Maybe I can convince him to do that at the code sprint this weekend.
We need to get these style rules in SVN somewhere; Tim’s clearly done a lot of work very recently on this, and getting this into the documentation and website sounds like a great thing to me.
A friend pointed out this Guardian article about Stallman's (and others) perspective on the cloud computing direction. From an open source perspective I've felt similar concerns re: the shift to GMail, but I know that many users (like me) merely use it for mail mirroring, not a wholesale dependency.
"If I vote for this, my constituents who hate Wall Street (and that's a lot of them) will hate me!"Multiply by a few hundred Representatives with fingers in the wind and voila! No plan, Dow tanks 700.
"But if this fails, the economy could crumble, and they'll hate me more!"
"But if vote against it, and it passes, I win both ways! Hate Wall Street? I voted against it! Economy does OK? Who's going to remember or care how I voted? Economy crumbles? It was a bad plan anyways!"
Want a quick feel for how bad the credit crisis is? Compare how much banks will accept in interest on Treasury bills (basically a risk-free investment) to what they expect to receive in interest on loans to other banks (there is a non-zero risk that the bank might default, say, declare bankruptcy). In normal times, banks don't go out of business (very often) so the difference is very small. In exceptional times (like now) nobody knows who is going to be in business tomorrow, and the difference is very large. Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
However, moving geometry from PostGIS into GEOS format incurs a cost. And not all predicate algorithms are hard. Point-in-polygon tests, for example, are relatively easy.Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
After climbing Table Mountain yesterday, I’m somewhat beat, but was able to make it up at 0730 to give a GeoDjango workshop with Josh. After spending the first hour running around attempting to get power for everyone and get DVDs copied, we got started.
Overall, the workshop went well. We had a variety of users — including two people who were relatively successful with running GeoDjango from their own (mac) laptops. I’ve learned a few things about using VMWare — for example, I was reminded that there is no real VMWare option for PPC Macs, and that installing VMWare on Mandriva is not as trivial as it maybe should be.
I was able to get two of my machines working with the VMWare DVD we had and distributed (link later once I talk to Josh and we fix some of the missing things), and gave them out to people. With our 25 people, we had about 15 laptops running, with others sharing.
Learned a few key points: For one, our documentation on the workshop was insufficiently explanatory of how to do things like “edit files”, “open a terminal”, etc. A number of people were facing significant problems towards the start because of that. (Also, not installing vim on the VMWare image was problematic for me, and Erik had the same problem with emacs.) Due to the somewhat staggered start, we got a little bit lost in the weeds pretty quickly, and didn’t get a chance to really explain what GeoDjango was about to start, which I think was a lack in the workshop.
Overall, we got through setting up the VMWare image (though not installation from scratch), starting a project, creating a model, setting up the admin (with this being one of the more difficult parts, specifically because almost no one had internet access within the VM), generating KML, viewing the KML on an OpenLayers map, and using the GDAL tools (LayerMapping) to import polygon data from a shapefile and view/edit that. A couple people got ahead through creating a Ward view as well, which was nice.
There are a number of aspects of the workshop that need more polish, but overall, I think people who were interested got to see GeoDjango in admin, and see why it’s pretty cool. Hopefully we can clean up our workshop docs to make it smoother for the next person to walk through it, and get more people interested in GeoDjango and learning about Django in general through that.
Read more of this story at Slashgeo.
Have arrived in Cape Town in preparation for FOSS4G. And the most important part of the trip — the drinking of the beers — is already in full force.
I’m staying in the Fountains Hotel; apparently a good choice, given the number of random FOSS4G passerby we’ve had so far.
18 hours of flying is a long time, but didn’t go poorly, though I am lacking any clothes until Monday afternoon (so I’ll be kind of stinky for my workshop with Josh on GeoDjango on Monday). Made it to the hotel, then headed out to Dinner at Cape To Cuba. Was good environment and tasty, for not a bad price. We then went back to the Fountains Hotel and had a couple drinks at the hotel bar.
I’ve uploaded pictures — they’re tagged by day and foss4g2008, so you should be able to see daily shots as I continue to upload them. (I’ve also got a FOSS4G 2008 set.) Today we’re doing a trip up Table Mountain — taking the cable car — leaving from Fountains Hotel around 10AM (breakfast at 9:15).
PSA: If you’re at all interested in GeoDjango, and have more than a passing knowledge of Python, I highly recommend coming to our GeoDjango workshop (and bringing a laptop). It’s gonna be great.
PSA2: If you’re staying at Fountains, and don’t want to go down to the desk to get an internet voucher, you can still ssh. Just join the wireless network, and ’ssh $ipaddress’. (If you don’t know your IP address, you can look it up by using ‘dig @72.232.176.58 yourdomain.example.com’.) If you need to get to the web, you can add “-D 4000″ to your ssh command — ’ssh -D 4000 crschmidt.net’ — to set up a SOCKS proxy. Then, in Firefox Preferences -> Advanced -> Network -> Connection, do manual Proxy configuration, and enter ‘localhost’, ‘4000′ as a “SOCKS Host”.
…school, job, trips, move, army, school, move, new job…lots of things have been happening in my life with speed of light, so I’ve had to change most of my plans, especially those about traveling. And, I can’t make it to attend the FOSS4G 2008 conference.
Nevertheless, I’m still listed next to two positions of the conference program and that’s correct. I planned to help Frank Warmerdam during the Raster Processing and Preparation with GDAL workshop and to give one presentation - Introduction to ASPRS LAS data processing with libLAS.
Apparently, I won’t be able to assist Frank during the workshop - I’m sorry Frank! and I’m crossing my fingers for you. And, the libLAS presentation will be given by…Frank - crossing my fingers harder :-) Originally, I promised Frank I will provide him with presentation slides and I’ll be a virtual assistant. Actually, I failed even with that :-(
Fortunately, Hobu took over this task and prepared PDF document with a set of fantastic slides. Frank and Howard have really saved my ass and I’d like to send them veeery big thanks!
I regret I can’t come to Cape Town, to experience the fantastic atmosphere, to see hundreds geogeeks together, to have a great time with friends and to drink a little too much beer with Tim. See you guys in Sydney, 2009!
I've just seen mention of this via Twitter, but haven't discussed with or seen any statement from the developers, on advice of lawyers, no doubt: Reuters sues GMU for no real reason other than Zotero's competition with, and besting of EndNote. Is this the kind of company you want to support, Steve? One that seems ready to sue its users for trying to free their data from its proprietary format?
Read more of this story at Slashgeo.
Linux.com published an interesting article - a tutorial - about famous components of Free and Open Source Software stack for Web Mapping. Justin Palk, the author, gives a very accessible introduction to building Web Mapping solution using GeoServer, PostGIS and OpenLayers. I think it’s a great writing for anyone who takes first steps in Web Mapping with FOSS4G.
Serving and styling maps with GeoServer by Justin Palk on September 24, 2008
Read more of this story at Slashgeo.
Read more of this story at Slashgeo.
Premise
I have always had a hard time thinking about various parameters associated with random fields and empirical semi-variograms. The gstat package for R has an interesting interface for simulating random fields, based on a semi-variogram model. It is possible to quickly visualize the effect of altering semi-variogram parameters, by "seeding" the random number generator with the same value at each iteration. Of primary interest were visualization of principal axis of anisotropy, semi-variogram sill, and semi-variogram range. The code used to produce the images is included below. For more information on the R implementation of gstat, see the R-sig-GEO mailing list.

About to head out to FOSS4G 2008. Leaving from Boston this morning, New York this afternoon, arriving at Cape Town around 4pm with a refuel-only stop in Dakar.
I’m staying at the Fountains Hotel, and will try to spend most of my time in the lobby. (If you see a guy with a Macbook sitting around there, there’s a fair chance he’s me.)
I’m presenting Collaborative Mapmaking with GeoDjango, which should be great for anyone who has worked with Django but not GeoDjango, and even people who haven’t used Django can probably play along.
OpenLayers users should be interested in Tim’s excellent summary of the OpenLayers-related sessions; as he mentions though, there are *36* sessions that mention OL, so it seems likely that no matter what track you follow, you’ll see *some* OpenLayers mentioned.
After the conference, a couple of OL developers are doing a trip around the Cape; on Monday morning, I fly out to Kruger National Park for a 3 day whirlwind tour. I’ve rented the car, but I’m still keeping an eye out for anyone who wants to room with me: I can take at least one more person (and if we get two more, we can rent a bigger car :)). If you’re interested and fly out Friday or later, let me know!
I’ll be trying to keep Twitter updated with my whereabouts; if you’re interested in tracking me, you can follow me, though I expect I’ll be less prolific than usual, since I won’t have cheap text messaging access.
If you’re at FOSS4G, look me up!
I have a client who needs the services of an ArcGIS Extension developer. The extension they need is really quite straightforward, but I don’t have any chops or time to do it in a timely manner. The extension needs to be of the typical structured data capture variety — a few buttons here, some domain values there. It’s fairly generic and related to the utility industry.
If you have experience with ArcGIS extensions and utilities, or even if you are a ArcGIS extension whiz, and you are interested in earning a little extra, please contact me at hobu.inc@gmail.com



empty_output_buffer and fill_input_buffer functions means that most existing code will require slight modifications before it can use the Intel libraries – they cannot just be dropped into place as a binary-only update.
In 2004, Microsoft published Visual C++ Toolkit 2003 - full version of Visual C++ 2003 optimizing compiler (version 1310) available free of charge. It was the first free, good and almost complete implementation of C++ programming language by Microsoft. It is quite old but still used by many developers.
The Toolkit is fairly complete, but you can not avoid a few hacks if you want to use it :-) So, I’ve decided to collect them all in one place to help building projects like GEOS, libLAS or GDAL/OGR with the Visual C++ Toolkit 2003.
First, installation of the following packages is required:
This is list of hacks like installation of missing components and fixing a project makefiles:
The .NET Framework SDK 1.1 installation (listed above) is required in order to get C Run-Time libraries installed: msvcrt.lib and msvcrtd.lib. The .NET SDK installer will copy these files (and a few other components) to directories located in:
C:\Program Files\Microsoft Visual Studio .NET 2003
Surprisingly, import library for C++ Run-Time Library msvcp71.dll is not included in the Visual C++ Toolkit 2003 distribution. Missing files can be downloaded from CERN server: msvcprt.lib and msvcprt.def. Copy them into
C:\Program Files\Microsoft Visual C++ Toolkit 2003\lib
The Toolkit does not include lib.exe utility - Microsoft Library Manager. Fortunately, lib.exe is just a simple wrapper on Microsoft Incremental Linker - link.exe. So, in your NMAKE makefiles replace lib.exe (or lib) command with:
link.exe /lib
Alternatively, you can build custom lib.exe wrapper using lib.c program. Recently, I’ve fixed NMAKE makefiles of GEOS (r2190) and libLAS (r876) projects using the former option.
Most of articles about Visual C++ Toolkit 2003 and Platform SDK installation procedure suggest to permanently update environment variables like INCLUDE, LIB and PATH. Personally, I don’t like this approach. Instead, I write a simple SET_MSVC71.BAT script which I execute in console window before I run NMAKE to build a software project using Visual C++ Toolkit 2003.
The script I use consists of three commands:
@echo off CALL "C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\SetEnv.Cmd" CALL "C:\Program Files\Microsoft Visual C++ Toolkit 2003\vcvars32.bat" CALL "C:\Program Files\Microsoft.NET\SDK\v1.1\Bin\sdkvars.bat"
Copy this script to location that is available from the PATH.
Below, a few simple steps are presented of using Visual C++ Toolkit 2003 and environment configured as presented above to build libLAS project. The same procedure should work for projects like GEOS or GDAL/OGR.
Configure environment by executing SET_MSVC71.BAT script:
C:\> SET_MSVC71.BAT
Check if basic commands are available: cl.exe, nmake.exe, link.exe.
Go to libLAS source code directory:
C:\> cd dev\liblas\trunk
Run NMAKE command to build libLAS library and utilities:
C:\dev\liblas\trunk> nmake /f makefile.vc
Good luck!
This post should be interesting to users of GDAL MSG driver - Meteosat Second Generation.
In July 2008, by the way of doing GDAL MSG driver cleanup, I’ve also applied a few fixes to the Public Wavelet Transform Decompression Library (aka Wavelet Transform Software) developed by EUMETSAT. I patched WT version 2.03 and sent my fixes to EUMETSAT.
Recently, I’ve got a message from EUMETSAT they approved the patch and will include it in upcoming release of the Wavelet Transform Decompression Library. Actually, new version 2.04 has been already published and is available to download (after registration) from the EUMETSAT website.
Modification of the source code to support a newer version of gcc compiler. gcc 4.2.x and previous versions are now supported. Upgrade fixes kindly provided by Mateusz Loskot.
Modified files with respect to previous version: CImage.h, CJBlock.h, CJBlock.cpp
It’s really nice to see my work wasn’t a waste of time :-)
QgisToMapServer converts a saved QGIS project file to a map file, ready to be served with MapServer. A binary preview version for both Mac and Windows is available now. For Linux/Unix users, the source code is available from the Git repository.
QgisToMapServer is different from the plugin in QGIS. It is a standalone Python application providing the following features:
For full details see: http://spatialserver.net/qgis2ms
Thanks to some hand holding from Chris and Josh, Pleiades now has Spherical Mercator maps using the Google physical geography layer as a stand-in for our ideal ancient world base map. See http://pleiades.stoa.org/places/639166. Coordinate transformation is provided by the code I blogged yesterday.
I've just finished writing a module that supports projection of objects that provide the geometry part of the Lab's geo interface: proj.py. Maybe you'll find it useful. What it does is take a geojson geometry (or Shapely geometry) and return a new projected geojson geometry object:
>>> from pleiades.openlayers.proj import Transform, PROJ_900913 >>> transform = Transform(PROJ_900913) >>> # Point, forward >>> from geojson import Point >>> point = Point(coordinates=(25.0, 25.0)) >>> fwd = transform(point) >>> fwd Point(coordinates=(2782987.269831839, 2875744.6243522423)) >>> # Point, inverse >>> inv = transform(fwd, inverse=True) >>> inv Point(coordinates=(24.999999999999996, 24.999999999999996)) >>> # Line, forward >>> from geojson import LineString >>> line = LineString(coordinates=((25.0, 25.0), (30.0, 30.0))) >>> fwd = transform(line) >>> fwd LineString(coordinates=((2782987.269831839, 2875744.6243522423), ...)) >>> # Line, inverse >>> inv = transform(fwd, inverse=True) >>> inv LineString(coordinates=((24.999999999999996, 24.999999999999996), ...))
There's also an object hook if you'd like the transform to yield instances of your own classes.
Pyproj is Jeffrey Whitaker's Python interface to PROJ.4. I'm no longer interested in other Python projection packages. Its most interesting feature is interoperability with packages (such as Shapely) that use the Numpy array interface. It depends on Cython, which makes it a bit tricky to include in a buildout: you must install Cython into your buildout's python, not as an egg, and make the pyproj egg only after this step is finished. Like this:
[buildout]
parts =
cython-src
cython-install
pyproj
[cython-src]
recipe = hexagonit.recipe.download
url = http://cython.org/Cython-0.9.8.1.1.tar.gz
[cython-install]
recipe = iw.recipe.cmd
on_install = true
cmds =
cd ${buildout:directory}/parts/cython-src/Cython-0.9.8.1.1
${python:executable} setup.py install
[pyproj]
recipe = zc.recipe.egg:eggs
index = http://atlantides.org/eggcarton/index
eggs = pyproj
You might be able to pull pyproj off PyPI, but here I am using my own index. Once built, you can try it out using zopepy:
>>> from pyproj import Proj >>> defn_900913 = """ ... +proj=merc +a=6378137 +b=6378137 ... +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 ... +units=m +nadgrids=@null +no_defs ... """ >>> proj_900913 = Proj(defn) >>> lonlat = (25.0, 25.0) >>> proj_900913(*lonlat) (2782987.269831839, 2875744.6243522423)
I like that projection definitions can be split across lines of the screen.
KML lacks two important elements. It has neither 1) a simple and universal element equivalent to Dublin Core description (such as {http://purl.org/dc/elements/1.1/}description), nor 2) an excellent element for encapsulating or linking to rich content accompanying placemarks. Instead of the first, we have kml:Snippet. Snippet! It's somewhere in between a title and a description and that's no place to be. Instead of the second, we have kml:description, which supports an under-specified subset of HTML and other media including video.
The kml:description element is not about metadata anymore, it's about adding rich content -- charts, photos, video -- to popup windows of a geographic browsers. Under-specification of the content of kml:description is a problem. Which HTML elements are valid? Why shouldn't all be valid? The choice only between escaping HTML and using CDATA blobs is another problem. XHTML in a description wouldn't break the KML document; why shouldn't we be able to use XHTML without CDATA? Lack of support for dynamic content is yet another problem. Why can't we specify rich content by a URL, to be fetched only as needed and refreshed only if modified? Limitations of KML's description element and its ties to the original implementation hold us back. We need something better.
The Atom community wrestled with the same issues and came up with the atom:content element. An atom:content element may contain text, HTML, XHTML, XML, encoded binary media, or provide a URL to another document or media resource. When prompted, Atom processors (such as a news reader) display this content to a user. All HTML or XHTML elements are valid. CDATA blobs are unnecessary and not allowed. Atom's content element comes with clear processing instructions: HTML must be escaped, and should be valid within a <div>. The immediate child element of XHTML content must be a <div>. While guided by implementations, none of this depends on unspecified behavior of a particular Atom processor.
The "src" attribute of the atom:content element provides developers with more options. It allows you to decouple semi-static data from dynamic data. The locations and identifiers of physical instruments deployed in the field (river gauges, ASOS, you name it) can be decoupled from their nearly real-time observations and measurements. Serve a representation of the deployed instruments as a static document updated only as are the physical objects. From each instrument entry, link to a specialized web resource that produces tables or graphs on demand.
Atom processors can also take advantage of the "src" attribute to improve performance perceived by a user. Fetch the feed, show users titles and summaries first, get rich content as the user asks for it -- or get the rich content in the background, or during lulls in user activity. Processors should also be able to exercise conditional GET to avoid reloading unchanged rich content.
The atom:content element appears to support all of the requirements of, and overcome all of the faults of, kml:description. It fully embraces and accommodates rich content and provides new design options via links to dynamic or massive content. KML is already open to Atom elements (version 2.2 already includes atom:author, atom:link, and atom:name) and so atom:content is a more natural replacement for kml:description than RSS 1.0's content element or RSS 2.0's enclosure element. I'm not in a position to offer any advice to Google, but -- considering its investment in Atom, to act on the commonalities between KML and Atom seems useful and even profitable.
I've heard from KML folks that nothing pushes the spec forward more than working code. I'm not interested in writing a new geographic browser, but I can start serving KML enhanced with atom:content (which meets needs of a user that just cropped up on Monday), support it in my own KML processing packages, and perhaps even exercise my withering C++ skills on a libkml patch. After that? Let's swap in atom:summary for kml:Snippet. Snippet!