文档章节

Erlang 根据经纬度从百度地图分析出地理名称保存到mysql

yunnet
 yunnet
发布于 2013/10/12 15:15
字数 764
阅读 278
收藏 0
点赞 1
评论 0

一、erlang中使用mysql客户端

   使用git获取,https://github.com/dizzyd/erlang-mysql-driver.git

二、common.hrl定义

%%%------------------------------------------------
%%% File    : common.hrl
%%% Author  : yunnet
%%% Created : 2013-08-14
%%% Description: 公共定义
%%%------------------------------------------------

%%数据库连接
-define(DB, mysql_conn_poll).
-define(DB_HOST, "127.0.0.1").
-define(DB_PORT, 3306).
-define(DB_USER, "root").
-define(DB_PASS, "root").
-define(DB_NAME, "track").
-define(DB_ENCODE, utf8).


-define(C_TUSER_SQL, "create table tUser (id int not null auto_increment, sUsername varchar(50) not null,sPassword varchar(20) not null, nSex int null, primary key (id)) engine = myisam").
-define(C_TUSER_NAME, "tUser").

三、mysqlLib.erl简单封装

%%%------------------------------------------------
%%% File    : mysql_test.erl
%%% Author  : yunnet
%%% Created : 2013-08-14
%%% Description: mysql测试单元
%%%------------------------------------------------

-module(mysql_lib).
-compile(export_all).
-include("common.hrl").


printf(_Data) ->
    io:format("this is test data: ~p~n", [_Data]).

connect()->
    mysql:start_link(?DB, ?DB_HOST, ?DB_PORT, ?DB_USER, ?DB_PASS, ?DB_NAME, fun(_, _, _, _) -> ok end, ?DB_ENCODE),
    Result = mysql:connect(?DB, ?DB_HOST, ?DB_PORT, ?DB_USER, ?DB_PASS, ?DB_NAME, ?DB_ENCODE, true),   
	case Result of
	  {ok, ConnPid} -> ok;
	  {error, Reason} -> error
	end,
    ok.
	  
createTable(_Table, _SQLText)->
	mysql:fetch(?DB, io_lib:format(<<"drop table if exists '~s'">>, [_Table])),
	mysql:fetch(?DB, io_lib:format(<<"'~s'">>, [_SQLText])),
    %%mysql:fetch(?DB, <<"create table tUser (id int not null auto_increment, sUsername varchar(50) not null,sPassword varchar(20) not null, nSex int null, primary key (id)) engine = myisam">>),
	ok.
	
%%增加用户信息	
addUser(_User, _Password, _Sex) ->
  Sql_Text = io_lib:format(<<"insert into tUser (sUsername, sPassword, nSex) values ('~s','~s',~p)">>, [_User, _Password, _Sex]), 
  A = list_to_binary(Sql_Text),
  io:format("~p~n", [A]),  
  executeSQL(?DB, Sql_Text),
  ok.
 
%%增加地理信息
addGpsDesc(_Content) ->
    io:format("address: ~ts~n", [list_to_binary([_Content])]),	
    Sql_Text = io_lib:format(<<"insert into gps_desc(sXmlContent) values('~ts')">>, [unicode:characters_to_list([_Content])]),
    io:format("Sql_Text: ~ts~n", [list_to_binary(Sql_Text)]),
    executeSQL(?DB, Sql_Text),
    ok.
    

%%写入数据库 
%%_SqlText=sql语句, _DB=连接原子名称
executeSQL(_DB, _SqlText)->
	mysql:fetch(_DB, _SqlText).

%%读数据库 
%%_SqlText=sql语句, _DB=连接原子名称
%%返回查询数据列表
executeQuery(_DB, _SqlText)->
	case mysql:fetch(_DB, _SqlText) of
			{data, MySQLRes}-> case mysql:get_result_rows(MySQLRes) of
							  []->[];
							  List->List
							  end;
		_->[]
	end.

四、获取地理信息

-module(takeUrl). 

-import(lists, [reverse/1]).
-import(html_util, [escape/1, unescape/1]).
-include_lib("xmerl/include/xmerl.hrl").

-compile(export_all).

-record(xmlResponse, {
    lat,
	lng,
	address,
	business,
	streetNumber,
	street,
	district,
	city,
	province,
	cityCode	   
	}).

start() ->
    ok = http_start(),    
    ok = mysql_start().
   

%% inets start
http_start() ->
    ok = inets:start(),
     io:format("inets start ok.~n").

%% mysql start 
mysql_start() ->
    ok = mysql_lib:connect(),
    io: format("mysql connect ok.~n").
    
  
stop() ->
  ok = inets:stop().

%%取横坐标  
main() ->
    for(23107237, 23107347, fun(I) -> vertical(I) end),
    ok.

%%取竖坐标	
vertical(I) ->
    for(113269804, 113269914, fun(A) -> get_http(I/1000000, A/1000000) end), 
    ok.  
	
%% 根据URL获取内容
get_http(_Lat, _Lng) ->   
   Url = io_lib:format("http://api.map.baidu.com/geocoder?output=xml&location=~f,%20~f&key=37492c0ee6f924cb5e934fa08c6b1676", [_Lat, _Lng]),
   {ok, Response} = get_Result(Url),
   {ok, Address} = parseXml(Response),
   mysql_lib:addGpsDesc(Address).	
    
	
%% 根据获取的内容保存到文件
get_Result(_Url) -> 
  {ok, {{Version, 200, ReasonPhrase}, Headers, Body}} = httpc:request(get, {_Url, []}, [], []),
  {ok, Body}.
%%  io:format("Version:~p~n ReasonPhrase:~p~n Headers:~p~n Body: ~p~n", [Version, ReasonPhrase, Headers, Body]),


%% @doc Parses Response data.
parseXml(_Response) ->
    Fixed = fix_unicode(_Response),
    {Doc, _} = xmerl_scan:string(Fixed), 
		
    [LatNode] = xmerl_xpath:string("//lat", Doc),     %% 查找唯一节点
    [LatContent] = LatNode#xmlElement.content,
    #xmlResponse.lat = string:to_float(LatContent#xmlText.value),
	
    [LngNode] = xmerl_xpath:string("//Lng", Doc),
    [LngContent] = LngNode#xmlElement.content,
    #xmlResponse.lng = string:to_float(LngContent#xmlText.value),
	
    [AddressNode] = xmerl_xpath:string("//formatted_address", Doc),
    [AddressContent] = AddressNode#xmlElement.content,
    #xmlResponse.address = AddressContent#xmlText.value,
	
    [BusinessNode] = xmerl_xpath:string("//business", Doc),
    [BusinessContent] = BusinessNode#xmlElement.content,
    #xmlResponse.business = BusinessContent#xmlText.value,
	
    [CityCodeNode] = xmerl_xpath:string("//cityCode", Doc),
    [CityCodeContent] = CityCodeNode#xmlElement.content,
    #xmlResponse.cityCode = string:to_integer(CityCodeContent#xmlText.value),    

   
    %%得到节点
%%    [Element1] = xmerl_xpath:string("/GeocoderSearchResponse/result/formatted_address", Doc),
%%    [XmlContent1] = Element1#xmlElement.content,
%%    Formatted_address = XmlContent1#xmlText.value,
%%    #xmlResponse.address = Formatted_address,   

    {ok, #xmlResponse.address}.
     

%% @doc Parses an indiviual element into a proplist. This isn't a generic approach.
parse_element(Node, Doc) ->
	[
		{Element, Value} ||
		#xmlElement{content = XmlElem} <- xmerl_xpath:string(Node, Doc),
		#xmlElement{name = Element, attributes = Attributes} <- XmlElem,
		#xmlAttribute{name = data, value = Value} <- Attributes
	].


%% @doc fixes problems with xmerl and unicode
fix_unicode(XmlString) -> 
        Binary = unicode:characters_to_binary(XmlString, unicode), 
        binary_to_list(Binary).


  
for(Max, Max, F) -> [F(Max)];
for(I, Max, F) -> [F(I) | for(I + 1, Max, F)].

© 著作权归作者所有

共有 人打赏支持
yunnet
粉丝 5
博文 29
码字总数 23479
作品 1
广州
百度地图资源下载备注

http://developer.baidu.com/map/devRes.htm 相关下载 名称 说明 下载 百度地图城市名称-中心点经纬度(cityCenter)关系对照 您可以通过此文件获知百度地图的全国各城市中心点(cityCenter)...

宝塔镇河妖
2016/09/04
38
0
百度地图桌面程序源码,CatchPacket网络抓包软件

百度地图桌面程序源码,CatchPacket网络抓包软件 Extjs c# asp.net 兼职 qq:2294508843 百度地图桌面程序源码 功能介绍: 1.根据ip定位地理位置信息,ip网段,isp提供商,ip地理位置 2.根据i...

acer
2014/11/03
235
1
关于Google Maps的地图类型(MapType)的一些心得

在Google Maps之中地图类型(MapType)是一个比较复杂的类,可是在Google Maps API说明之中却没有比较明确的说明,我将我对API分析之后的一些心得写出来,供大家参考。 每一个地图类型首先是一...

zhengguogaun
2013/06/19
0
0
【高德地图API】如何解决坐标转换,坐标偏移?

一、坐标体系 首先我们要明白,开发者能接触到哪些坐标体系呢? 第一种分类: 1、 GPS,WGS-84,原始坐标体系。一般用国际标准的GPS记录仪记录下来的坐标,都是GPS的坐标。很可惜,在中国,任...

hejunbinlan
2015/08/07
0
0
微信公众号开发之用户地理位置坐标转百度坐标

微信公众号开发之用户地理位置坐标转百度坐标(搜狗、google地图坐标转百度地图坐标) 上海为卓信息科技——专业实现电子地图二次开发应用百度谷歌地图API调用开发。 我们知道,Google地图、s...

睡得
2015/03/18
16.2K
3
关于大头针和覆盖物的一些知识

在百度地图的开发过程中,一般都是根据model类给出的经纬度在地图上添加大头针,以及当选中当前的大头针的时候在此添加覆盖物以标记这个位置就是当前选中的,与此同时,还要根据选中的大头针...

Virgo_only
2016/10/14
95
0
数据可视化:使用D3JS创建动画地图,发射动画

示例图 演示页面 制作思路 需要绘制一张中国地图,做为背景。 需要主要城市的经纬坐标,以绘制路线起点和终点。 从起点绘制一条逐渐延伸的线,到终点。 接收到物流单的城市,绘制一个闪烁的标...

无鱼二饼
01/26
0
0
根据一连串的经纬度在地图上画出轨迹

根据一连串的经纬度画出行走的轨迹,显示在地图上,并保存图片,除了高德,百度,前台 提供的api,有后台纯java的吗

心境111
2016/09/06
791
2
HTML5 Geolocation API和Google Maps API结合实现路线导航

HTML5提供了地理位置定位功能(Geolocation API),能确定用户位置,我们可以借助HTML5的该特性开发基于地理位置信息的应用。本文结合实例给大家分享如何使用HTML5,借助百度、谷歌地图接口来...

iNiL0119
2016/09/14
103
0
报表开发工具中开放的部分图表js接口列表

1.. 描述 报表开发工具FineReport 8.0版本中开放了部分图表js接口,在具体应用的过程中很多人都不知道这些接口到底有什么作用,该怎么应用,所以根据我自己的应用在下面归纳了这些新开放js接...

九月你好123
2015/11/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
1
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
13
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
2
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
2
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 vim 4.expect [root@yong-01 sbin]# vim 4.expect#!/usr/bin/expectset passwd "20655739"spawn rsync -av ro...

lyy549745
今天
1
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
今天
1
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
今天
3
0
java 8 复合Lambda 表达式

comparator 比较器复合 //排序Comparator.comparing(Apple::getWeight);List<Apple> list = Stream.of(new Apple(1, "a"), new Apple(2, "b"), new Apple(3, "c")) .collect(......

Canaan_
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部