Python 은 바 이 두 지 도 를 이용 하여 두 곳 의 거 리 를 얻 습 니 다(데모 첨부)

바 이 두 맵 오픈 플랫폼
바 이 두 맵 오픈플랫폼 에 들 어간 후에 사용자 에 게 로그 인 하고 위의콘 솔를 클릭 하여 안내 에 따라 활성화 한 후에 서버 유형의 응용 을 만 들 고 이름 을 임의로 설정 합 니 다.그 중에서 화이트 리스트 검 사 는 어떠한 제한 도 하지 않 고 작성 할 수 있 습 니 다0.0.0.0/0.생 성 에 성공 한 후 화면 은 다음 그림 과 같 아야 합 니 다.그 중에서 방문 애플 리 케 이 션(AK)즉 도중에 빨간색 사각형 으로 둘러싸 인 부분 은 함부로 누설 되 지 않도록 주의해 야 합 니 다.뒤에 사용 해 야 합 니 다.이것 은 뒤에 방문 할 때 필요 한 암호 입 니 다.
在这里插入图片描述
필요 한 API 소개
이 항목 에 사 용 된 모든 API 는 웹 서비스 API공식 개발 문서입 니 다.
1.장소 검색 서비스
장소 검색 서비스(Place API 라 고도 함)는 웹 API 인터페이스 서비스 이다.
서 비 스 는 다양한 장면 의 장소(POI)검색 기능 을 제공 하 는데 도시 검색,원형 지역 검색,사각형 지역 검색 을 포함한다.개발 자 는 인 터 페 이 스 를 통 해 장소(POI)의 기초 나 상세 한 지리 정 보 를 얻 을 수 있 습 니 다.
우 리 는 이 API 를 이용 하여 지 정 된 장소의 경위도(lat,lg)두 개의 인 자 를 얻 습 니 다.
2.대량 계산 서비스
일괄 산정 로 서비스(일명 RouteMatrix API)는 HTTP/HTTPS 형식 으로 제공 되 는 경량급 일괄 산정 로 인터페이스 로 사용 자 는 이 서 비 스 를 통 해 기점 과 종점 좌표 에 따라 노선 계획 거리 와 주 행 시간 을 계산 할 수 있 으 며 RouteMatrix API V 2.0 은 중국 대륙 지역 을 지원 한다.
우 리 는 이 API 를 이용 하여 두 지점(경위도 로 제시)간 의 노선 계획 거 리 를 얻 습 니 다.
Python 프로그램 작성
0.필요 한 모듈
  •  requests
  • json
  • 1.해당 지점 의 경 위 를 가 져 오기
    들 어 오 는address장소 검색 서 비 스 를 통 해 경위도,반환 값 은 경위도 에 대응 하 는 문자열 값 으로 중간 에 쉼표 로 구분 한 다음 에 하나의 조회 와 상 태 를 되 돌려 줍 니 다.조회 에 실패 하면 상태 값 은 0 이 아 닙 니 다.
    코드 에 있 는 AK 를 처음부터 캡 처 한 AK 코드 로 바 꾸 는 것 을 주의 하 세 요.
    
    def getPosition(address):
        url = r"http://api.map.baidu.com/place/v2/search?query={}&region=  &output=json&ak={}".format(
            address,
            AK  #                  
        )
        res = requests.get(url)
        json_data = json.loads(res.text)
    
        if json_data['status'] == 0:
            lat = json_data["results"][0]["location"]["lat"]  #   
            lng = json_data["results"][0]["location"]["lng"]  #   
        else:
            print("[ERROR] Can not find {}.".format(address))
            return "0,0", json_data["status"]
        return str(lat) + "," + str(lng), json_data["status"]
    
    
    2.두 곳 사이 의 거리 확보
    들 어 오 는 두 지점(경위도 설명)을 대량 계산 서 비 스 를 통 해 얻 을 수 있 는 노선 계획 거리 입 니 다.이 범례 는 운전 운전 운전(대응 매개 변 수 는'driving')방식 으로 계산 된다.
    코드 에 있 는 AK 를 처음부터 캡 처 한 AK 코드 로 바 꾸 는 것 도 마찬가지 입 니 다.
    
    def getDistance(start, end):
        url = "http://api.map.baidu.com/routematrix/v2/driving?output=json&origins={}&destinations={}&ak={}".format(
            start,
            end,
            AK  #                  
        )
        res = requests.get(url)
        content = res.content
        jsonv = json.loads(str(content, "utf-8"))
        dist = jsonv["result"][0]["distance"]["value"]
        return dist
    
    3.통합 함수 호출
    두 지점 의 이름 을 입력 하고 두 지점 의 거 리 를 되 돌려 줍 니 다.특정한 지점 에서 조회 할 수 없 을 때 되 돌아 오 는 결 과 는-1 로 설정 합 니 다.
    
    def calcDistance(startName, endName):
        start, status1 = getPosition(startName)
        end, status2 = getPosition(endName)
        if status1 == 0 and status2 == 0:
            return getDistance(start, end)
        else:
            return -1
    
    4.간단 한 기능 테스트 진행
    운행 코드 는 베 이 징 과 청 두 사이 의 거 리 를 출력 하 는데 그 단 위 는 미터 이다.
    在这里插入图片描述
    5.엑셀 의 대량 장소 에 대해 거 리 를 계산한다.data.xlsx파일 의 장 소 를 모두 읽 고 거 리 를 계산 하여 결 과 를 로 컬result.xlsx파일 에 저장 합 니 다.그 중에서 우 리 는 거리의 단 위 를 천 미터 로 설정 합 니 다.주 모듈 코드 는 다음 과 같 습 니 다.
    
    if __name__ == "__main__":
        data = pd.read_excel("data.xlsx")
        res = []
        for i in range(0, len(data)):
            startName = data.iloc[i, 0]
            endName = data.iloc[i, 1]
            dist = calcDistance(startName, endName)
            res.append([startName, endName, dist / 1000])
        pd.DataFrame(res).to_excel(
            "result.xlsx",
            header=["  ", "  ", "  "],
            index=None,
            encoding="utf-8"
        )
    
    그 중data.xlsx파일 의 내용 은 다음 과 같다.
    在这里插入图片描述
    대응 하 는 출력result.xlsx파일 의 내용 은 다음 과 같 습 니 다.
    在这里插入图片描述
    부록
    
    #         
    AK = "       AK     "
    
    import pandas as pd
    import requests
    import json
    
    
    def getPosition(address):
        url = r"http://api.map.baidu.com/place/v2/search?query={}&region=  &output=json&ak={}".format(
            address,
            AK  #                  
        )
        res = requests.get(url)
        json_data = json.loads(res.text)
    
        if json_data['status'] == 0:
            lat = json_data["results"][0]["location"]["lat"]  #   
            lng = json_data["results"][0]["location"]["lng"]  #   
        else:
            print("[ERROR] Can not find {}.".format(address))
            return "0,0", json_data["status"]
        return str(lat) + "," + str(lng), json_data["status"]
    
    
    def getDistance(start, end):
        url = "http://api.map.baidu.com/routematrix/v2/driving?output=json&origins={}&destinations={}&ak={}".format(
            start,
            end,
            AK  #                  
        )
        res = requests.get(url)
        content = res.content
        jsonv = json.loads(str(content, "utf-8"))
        dist = jsonv["result"][0]["distance"]["value"]
        return dist
    
    
    def calcDistance(startName, endName):
        start, status1 = getPosition(startName)
        end, status2 = getPosition(endName)
        if status1 == 0 and status2 == 0:
            return getDistance(start, end)
        else:
            return -1
    
    
    if __name__ == "__main__":
        data = pd.read_excel("data.xlsx")
        res = []
        for i in range(0, len(data)):
            startName = data.iloc[i, 0]
            endName = data.iloc[i, 1]
            dist = calcDistance(startName, endName)
            res.append([startName, endName, dist / 1000])
        pd.DataFrame(res).to_excel(
            "result.xlsx",
            header=["  ", "  ", "  "],
            index=None,
            encoding="utf-8"
        )
    
    
    파 이 썬 이 바 이 두 지 도 를 이용 하여 두 곳 의 거 리 를 얻 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 바 이 두 지 도 를 통 해 두 곳 의 거리 내용 을 얻 을 수 있 습 니 다.우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기