Here's the github page: http://github.com/michaellenahan/sofa
I'm very new to this so it's all good learning. The code is the same as described in my earlier email. Some points: 1. Mark - I tried your suggestion entry['georss::point'], entry['georss:point'] and some other variants in vendor/couchapp/lib/atom.js, but with no success - when I try these the point is omitted from the output altogether. 2. Any pointers on how to make latitude and longitude required fields in edit.html? Eventually I'd like to find a way to make it easier for users to choose locations from a dropdown and not enter co-ordinates manually. For now, I'd just like to make the fields compulsory. I'm probably missing something very simple, but I wasn't able to find a way to do that. Thanks! Michael On 24 July 2010 10:33, Michael Lenahan <[email protected]> wrote: > Thanks everyone. Looks like my task for today is to learn git: > http://progit.org/book/. > > On 24 July 2010 02:30, J Chris Anderson <[email protected]> wrote: >> >> On Jul 23, 2010, at 12:23 PM, Michael Lenahan wrote: >> >>> Thanks, jchris! >>> >>> I now have this: >>> http://mick.couchone.com/blog/_design/geosofa/_list/index/recent-posts?descending=true&limit=10&format=atom >>> >>> And this is what it looks like in Google Maps: >>> http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=http:%2F%2Fmick.couchone.com%2Fblog%2F_design%2Fgeosofa%2F_list%2Findex%2Frecent-posts%3Fdescending%3Dtrue%26limit%3D10%26format%3Datom&sll=37.0625,-95.677068&sspn=35.547176,56.513672&ie=UTF8&z=3 >>> >> >> This is super amazing. >> >> If you are willing to share your changes back to the world via git, I'm sure >> people will dig in and help you refine this even further. >> >> Thanks so much for sharing it makes me really happy to see people pushing >> the boundaries like this. >> >> Chris >> >>> Here's what I did: >>> >>> I copied sofa into a new folder geosofa, and made these changes: >>> >>> (at the end of vendor/couchapp/lib/atom.js) >>> >>> exports.header = function(data) { >>> // >>> //var f = <feed xmlns="http://www.w3.org/2005/Atom"/>; >>> var f = <feed xmlns="http://www.w3.org/2005/Atom" >>> xmlns:georss="http://www.georss.org/georss"/>; >>> // >>> f.title = data.title; >>> f.id = data.feed_id; >>> f.li...@href = data.feed_link; >>> f.li...@rel = "self"; >>> f.generator = "CouchApp on CouchDB"; >>> f.updated = rfc3339(data.updated); >>> return f.toXMLString().replace(/\<\/feed\>/,''); >>> }; >>> >>> exports.entry = function(data) { >>> var entry = <entry/>; >>> entry.id = data.entry_id; >>> entry.title = data.title; >>> entry.content = data.content; >>> entry.conte...@type = (data.content_type || 'html'); >>> entry.updated = rfc3339(data.updated); >>> entry.author = <author><name>{data.author}</name></author>; >>> entry.li...@href = data.alternate; >>> entry.li...@rel = "alternate"; >>> // >>> entry.point = data.point; >>> // >>> return entry; >>> } >>> >>> (at the end of lists/index.js) >>> >>> alternate : path.absolute(path.show('post', row.id)), >>> // >>> //point : row.value.loc[1] + " " + row.value.loc[0] >>> point : row.value.latitude + " " + row.value.longitude >>> // >>> }); >>> // send the entry to client >>> send(feedEntry); >>> } while (row = getRow()); >>> } >>> >>> // close the loop after all rows are rendered >>> return "</feed>"; >>> }); >>> }; >>> >>> (I also made the following rudimentary changes to templates/edit.html) >>> >>> <!-- form to create a post --> >>> <form id="new-post" action="new.html" method="post"> >>> <h1>{{pageTitle}}</h1> >>> <!-- amended for geosofa --> >>> <p><label>Place Name</label> >>> <input type="text" size="50" name="title" value=""></p> >>> <p><label>Latitude</label> >>> <input type="text" size="50" name="latitude" value=""></p> >>> <p><label>Longitude</label> >>> <input type="text" size="50" name="longitude" value=""></p> >>> <!-- --> >>> >>> Some issues: >>> >>> 1. I wasn't able to edit atom.js to make it take account of the full >>> name for georss:point >>> >>> entry.georss:point = data.point >>> >>> I tried backslash-escaping, quoting, square brackets etc but with no luck. >>> >>> In the end I settled with "point" (without the namespace). It works >>> but it's a bit wrong. >>> >>> 2. I started by saving the data in an array called "loc", since this >>> is the way suggested by Volker >>> (http://vmx.cx/cgi-bin/blog/index.cgi/geocouch-the-future-is-now:2010-05-03:en,CouchDB,Python,Erlang,geo) >>> and more in line with geojson. >>> >>> However, I've been tripped up by my lack of knowledge in couchapp - I >>> don't know how to write from my couchapp into an array, whereas >>> writing into separate latitude, longitude fields was very easy - just >>> a matter of adding the text input tags to templates/edit.html >>> >>> Thanks very much. Couchapp is simply amazing. >>> >>> Michael >>> >>> On 22 July 2010 21:34, J Chris Anderson <[email protected]> wrote: >>>> >>>> On Jul 22, 2010, at 1:27 PM, Michael Lenahan wrote: >>>> >>>>> Hi there - I'm looking to find ways to get CouchDB to serve georss (in >>>>> this >>>>> case, a point with latitude and longitude). >>>>> >>>>> I'm taking sofa as my starting point, because it has atom feed capability >>>>> built in. >>>>> >>>>> So, sofa can generate this: >>>>> http://mick.couchone.com/blog/_design/sofa/_list/index/recent-posts?descending=true&limit=10&format=atom >>>>> >>>>> In the couchapp files on my local machine I'm looking to amend >>>>> sofa/lists/index.js so that the feed entry includes georss:point as >>>>> specified here: >>>>> http://www.georss.org/simple#Point >>>>> >>>>> Currently the relevant part of sofa/lists/index.js looks like this: >>>>> >>>>> // generate the entry for this row >>>>> var feedEntry = Atom.entry({ >>>>> entry_id : >>>>> path.absolute('/'+encodeURIComponent(req.info.db_name)+'/'+encodeURIComponent( >>>>> row.id)), >>>>> title : row.value.title, >>>>> content : html, >>>>> updated : new Date(row.value.created_at), >>>>> author : row.value.author, >>>>> alternate : path.absolute(path.show('post', row.id)) >>>>> }); >>>>> >>>> >>>> you will need to modify atom.js to add the proper xml to the output. >>>> >>>> http://github.com/jchris/sofa/blob/master/vendor/couchapp/lib/atom.js#L32 >>>> >>>> You should just copy this to your app's lib folder (I probably never >>>> should have put it in vendor in the first place, no other app uses it, I >>>> think). >>>> >>>> I don't know geo rss well enough but if it indeed RSS not Atom you will >>>> probably need to use atom.js as a starting point to write your own XML >>>> generator. >>>> >>>> >>>> >>>>> Has anyone out there done this already? Specifically I wonder how to >>>>> handle >>>>> the fact of georss:point containing a colon and getting that to work in >>>>> the >>>>> js file. >>>>> >>>>> Also - apologies if this is a dumb question - is it simply a matter of >>>>> including latitude and longitude in my couchdb database, then >>>>> concatenating >>>>> these at the correct position in this js file - >>>>> >>>>> georss:point : row.value.latitude + ' ' + row.value.longitude >>>>> >>>> >>>> for this, you can quote the keys, like: "georss:point" >>>> >>>>> - or are there other things I need to consider before referencing these db >>>>> elements? >>>>> >>>>> Thanks! >>>>> >>>>> Michael >>>> >>>> >> >> >
