Клуб API Карт

Найдено на тему «Python»:
Using Open Source GIS tools for spatial data - QGIS, GDAL and Python
dimik
8 апреля 2013, 16:43
Серия статей на OpenShift (пока их две) по созданию геоинформационных сервисов.

Читать далее

Python,Geos,OGR,QGIS,GDAL,OpenShift
Пример кода на Python для кодирования вершин ломаной в Base64.
tzhe
15 февраля 2011, 19:13

Возникла задача отдавать карты используя static api яндекс.карт.

Как известно, координаты можно закодировать в base64, алгоритм приведен по ссылке: http://api.yandex.ru/maps/jsapi/doc/dg/tasks/how-to-add-polyline.xml#encoding-polyline-points

Так как сайт разрабатывается для мобильников, то на javascript не рассчитываю. Поэтому конвертирую координаты в base64 на сервере.

Сайт строится на Django, следовательно, написал метод на Python для конвертации. Метод привожу ниже, если есть какие-то замечания по улучшению, то милости просим.

 #Метод для кодирования вершин ломаной
#аргумент: строка с координатами разделенными запятой (пример: 37.593578,55.735094,37.592159,55.732469,37.589374,55.734162)
def encodeToBase64(aPoints):   
    keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_="
    coordTuple = eval(aPoints)
    coordList = []
    diffList = []
    reverseString = ""
    encodedString = ""
    for i in range(len(coordTuple)):
        coordList.append(int(coordTuple[i] * 1000000))
    diffList.append(toBin(coordList[0]))
    diffList.append(toBin(coordList[1]))   
    for index in range(len(coordList)):
        if index+2 < len(coordList):
            diffList.append(toBin(coordList[index+2] - coordList[index]))
    binString = "".join(diffList)
    for i in range(len(binString)/32):
        fourByteString = binString[i*32:(i+1)*32]
        byte1 = fourByteString[0:8]
        byte2 = fourByteString[8:16]
        byte3 = fourByteString[16:24]
        byte4 = fourByteString[24:32]
        reverseFourByteString = byte4 + byte3 + byte2 + byte1
        reverseString += reverseFourByteString
    for i in range(len(reverseString)/6):
        encodedString += keyStr[int(reverseString[i*6:(i+1)*6], 2)]
    remainder = len(binString)%6
    if remainder: 
        lastString = reverseString[-1*remainder:]
        for i in range(6 - remainder):
            lastString += "0"
        encodedString += keyStr[int(lastString, 2)]
        for j in range(0, 6-remainder, 2):
            encodedString += "="    
    return encodedString

#Метод для пробразования целого в 32-х битное двоичное предстваление
#аргументы: целое, count - количество битов
def toBin(x, count=32):
    return "".join(map(lambda y:str((x>>y)&1), range(count-1, -1, -1)))

4 комментария
ломаная,Python
Python и YMapsML
Удалённый пользователь
17 сентября 2010, 14:19

Привет :)

Может кто знает, есть ли уже библиотеки на питоне для работы и парсинга YMapsML ? В частности ответов от геокодера.

Стандартный xml.dom.minidom.parse ругается :

ExpatError: unbound prefix: line 2, column 0
Ищу чем лучше и правильней парсить на питоне такой xml.
10 комментариев
Python,API 1.x,YMapsML