geonymapi.py 文件源码

python
阅读 24 收藏 0 点赞 0 评论 0

项目:geonymapi 作者: geonym 项目源码 文件源码
def getGeonym(self, req, resp, query=None):
        resp.status = falcon.HTTP_200
        geo = None

        # projections utilisées pour transformation en WGS84/Lambert93
        s_srs = Proj(init='EPSG:2154')
        t_srs = Proj(init='EPSG:4326')

        if 'x' in req.params and 'y' in req.params:
            lon,lat = transform(s_srs,t_srs,req.params['x'],req.params['y'])
            query = geonym.ll2geonym(lat, lon)
        elif 'lat' in req.params and 'lon' in req.params:
            query = geonym.ll2geonym(float(req.params['lat']), float(req.params['lon']))
        elif 'geonym' in req.params:
            query = req.params['geonym']
        elif 'adresse' in req.params:
            r = requests.get(URL_GEOCODER+'/search', params={"q":req.params['adresse'], "autocomplete":0, "limit":1}, timeout=1)
            geo = json.loads(r.text)
            geo['source']=URL_GEOCODER
            query = geonym.ll2geonym(geo['features'][0]['geometry']['coordinates'][1], geo['features'][0]['geometry']['coordinates'][0])

        if query is not None and geonym.checkGeonym(query):
            rev = None
            data = geonym.geonym2ll(query)
            if 'reverse' in req.params and req.params['reverse']=='yes':
                r = requests.get(URL_GEOCODER+'/reverse', params={"lat":data['lat'],"lon":data['lon'],"limit":1}, timeout=1)
                if r.status_code == 200:
                    rev = json.loads(r.text)
                    rev['source']=URL_GEOCODER

            x,y = transform(t_srs,s_srs,data['lon'],data['lat'])
            # on ne retourne les coordonnées Lambert que si on est en zone Lambert93
            if y > -357823.2365 and x > 6037008.6939 and y < 1313632.3628 and x< 7230727.3772:
                data['x'] = int(x)
                data['y'] = int(y)

            data['checksum'] = geonym.checksum(query)

            geojson = {"type":"Feature",
                "properties":data,
                "link": "http://www.geonym.fr/visu/?g=%s" % (geonym.cleanGeonym(query),),
                "params":geonym.getParams(),
                "geometry":{"type":"Polygon","coordinates":[[[data['west'],data['south']],[data['east'],data['south']],[data['east'],data['north']],[data['west'],data['north']],[data['west'],data['south']]]]}}
            if rev is not None:
                geojson['reverse'] = rev
            if geo is not None:
                geojson['geocode'] = geo
            resp.body = json.dumps(geojson, sort_keys=True, indent=4, separators=(',', ': '))
            resp.set_header('Content-type','application/json')
        else:
            geojson = {
                "type": "Feature",
                "link": "https://github.com/geonym/geonymapi",
                "params": geonym.getParams()
            }
            resp.status = falcon.HTTP_400
            resp.set_header('Content-type', 'application/json')
            resp.body = json.dumps(
                geojson, sort_keys=True, indent=4, separators=(',', ': '))
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号