Skip to content

Commit

Permalink
Fixing query string buffer logic in opencage geocoder
Browse files Browse the repository at this point in the history
  • Loading branch information
kellydunn committed May 10, 2015
1 parent b64a898 commit 8c701c5
Showing 1 changed file with 34 additions and 10 deletions.
44 changes: 34 additions & 10 deletions opencage_geocoder.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
"io/ioutil"
"net/http"
"net/url"

"bytes"
)

// This struct contains all the funcitonality
Expand Down Expand Up @@ -77,12 +77,26 @@ func (g *OpenCageGeocoder) Request(url string) ([]byte, error) {
// if one occurs during the geocoding request.
func (g *OpenCageGeocoder) Geocode(query string) (*Point, error) {
url_safe_query := url.QueryEscape(query)
key := ""

var queryStr = bytes.NewBufferString("?")
_, err := queryStr.WriteString(fmt.Sprintf("q=%s", url_safe_query))
if err != nil {
return nil, err
}

if (OpenCageAPIKey != "") {
key = "key="+OpenCageAPIKey+"&"
_, err := queryStr.WriteString(fmt.Sprintf("&key=%s", OpenCageAPIKey))
if err != nil {
return nil, err
}
}

data, err := g.Request(fmt.Sprintf("?%sq=%s&pretty=1", key, url_safe_query))
_, err = queryStr.WriteString("&pretty=1")
if err != nil {
return nil, err
}

data, err := g.Request(queryStr.String())
if err != nil {
return nil, err
}
Expand All @@ -100,9 +114,6 @@ func (g *OpenCageGeocoder) extractLatLngFromResponse(data []byte) (Point, error)
res := &opencageGeocodeResponse{}
json.Unmarshal(data, res)

// fmt.Printf("%s\n", data)
// fmt.Printf("%v\n", res)

if len(res.Results) == 0 {
return Point{}, opencageZeroResultsError
}
Expand All @@ -116,12 +127,25 @@ func (g *OpenCageGeocoder) extractLatLngFromResponse(data []byte) (Point, error)
// Returns the first most available address that corresponds to the passed in point.
// It may also return an error if one occurs during execution.
func (g *OpenCageGeocoder) ReverseGeocode(p *Point) (string, error) {
key := ""
var queryStr = bytes.NewBufferString("?")
_, err := queryStr.WriteString(fmt.Sprintf("q=%f,%f", p.lat, p.lng))
if err != nil {
return "", err
}

if (OpenCageAPIKey != "") {
key = "key="+OpenCageAPIKey+"&"
_, err := queryStr.WriteString(fmt.Sprintf("&key=%s", OpenCageAPIKey))
if err != nil {
return "", err
}
}

_, err = queryStr.WriteString("&pretty=1")
if err != nil {
return "", err
}

data, err := g.Request(fmt.Sprintf("?%sq=%f,%f&pretty=1", key, p.lat, p.lng))
data, err := g.Request(queryStr.String())
if err != nil {
return "", err
}
Expand Down

0 comments on commit 8c701c5

Please sign in to comment.