在线地址:58同城品牌公寓高德搜房

Github地址:https://github.com/liguobao/58HouseSearch

知乎专栏(点赞用的):高德API+Python解决租房问题(.NET版)

经过了一个星期的修补补,以及小伙伴奉献的代码,整个项目基本处于基本稳定运行的状态。

同时加入了一下新功能:

  1. IP定位:调用高德地图IP定位功能实现
  2. 移动地图中心定位:调用高德地图移动地图定位实现
  3. 定位城市名转58同城城市名以获得准确58同城城市域名:抓取58同城城市分类信息
  4. 优化数据源、去除广告数据:小伙伴奉献代码

今天主要简单讲解一下其中使用的一些高德地图API接口。

#####高德地图JavaScript API 主体为map对象,基本所有的操作都是通过map对象来实现的。
map对象实例化是通过 Amap类来做的。如以下代码:

1
2
3
4
5
6
map = new AMap.Map("container", {
resizeEnable: true,
zoomEnable: true,
center: [121.297428, 31.1345],//经纬度,此处为上海
zoom: 11
});

IP定位

调用Map.CitySearch()获得当前IP所在城市,直接将地图显示成当前城市。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function showCityInfo(map) {
//实例化城市查询类
var citysearch = new AMap.CitySearch();
//自动获取用户IP,返回当前城市
citysearch.getLocalCity(function (status, result) {
if (status === 'complete' && result.info === 'OK') {
if (result && result.city && result.bounds) {
var cityinfo = result.city;//获得XX市
var citybounds = result.bounds;//用于设置地图显示位置的实例
cityName = cityinfo.substring(0, cityinfo.length - 1);//去掉市这个字
ConvertCityCNNameToShortCut();//城市名转换成58同城城市域名字母,如上海->sh,苏州->su,
//下面会有实现代码 document.getElementById('IPLocation').innerHTML = '您当前所在城市:' + cityName;
//地图显示当前城市
map.setBounds(citybounds);
}
} else {
document.getElementById('IPLocation').innerHTML = result.info;
}
});
}

移动地图自动中心定位

之前有一版是让用户输入城市名,然后直接定位到输入的城市的。
这个功能卡在了设置地图显示位置上,如果是使用高德地图提供的搜索控件的话,又存在输入结果之后搜索结果可能是多个的问题。而且这点我只是要取到用户想要定位的城市而已,感觉没必要做得太复杂。
昨晚在看高德地图API的时候发现,有一个移动地图获得地图中心所在位置的样例,马上眼前一亮了。这个功能比我想要的还要好…果断上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function MapMoveToLocationCity()
{
map.on('moveend', getCity);
function getCity() {
map.getCity(function (data) {
if (data['province'] && typeof data['province'] === 'string') { var cityinfo = (data['city'] || data['province']);
cityName = cityinfo.substring(0, cityinfo.length - 1);
ConvertCityCNNameToShortCut();//城市名转58同城地区域名 document.getElementById('IPLocation').innerHTML = '地图中心所在城市:' + cityName; }
});
}
}

整个代码的意思是,给map绑定一下移动时间,移动完了之后,调用getCity的方法获取当前地图中心所在城市信息。

这个时候要注意,城市名可能在city对象里面,也可能在province里面。

原因很简单:普通城市等级就是城市,我国还存在一个和省份一个等级的城市:直辖市。因此直辖市的城市名是在province里面的。

城市名匹配58同城地区域名

这个是上个版本(两三天前)的一个bug引出来的新功能。

上个版本是让用户输入城市名,然后提取城市名的中文拼音首字母作为58同城地区域名。如上海 =sh,广州=gz,北京=bj,成都=cd。

这个功能使用的是网上别人写的一个JS库,通过汉字匹配实现的。转换出来的数据没什么问题,不过我国汉字实在奥妙。

广州=gz,赣州=gz;
遂宁=sn;绥宁=sn;
惠州=hz,杭州=hz。

这样一来,上面这个做法就没法玩了。

想了下怎么解决这个问题,灵机一动。反正是在爬58的数据,这个城市名和城市域名数据58同城肯定有啊,然后找到了这个。
58同城城市分类导航

很明显,我要的所有城市名和城市域名都是里面了。

晚上和衣衣说了下,衣衣一大早就把处理好的json数据给我了。

于是来了下面一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//加载json文件
$.getJSON("DomainJS/city.json", function (data)
{
allCityInfo = data;
}); function ConvertCityCNNameToShortCut()
{
var filterarray = $.grep(allCityInfo, function (obj) {
return obj.cityName == cityName;
});//找到当前城市名对应的json对象
//获取json对象的地区域名
cityNameCNPY = filterarray instanceof Array ?
filterarray[0].shortCut : filterarray != null ? filterarray.shortCut : "";
}

高德地图自动补全功能

1
2
3
<div class="control-input">
<input id="work-location" type="text" style="width:60%">
</div>
1
2
3
4
5
var auto = new AMap.Autocomplete({
input: "work-location"
}); AMap.event.addListener(auto, "select", workLocationSelected);

看方法前面也知道,其实这就是把ID为work-location的input初始化为地图插件,然后给Amap增加了一个监听事件。
当其中选中某一个数据的时候,触发workLocationSelected函数。效果如下:

在这里locationSelected是定位到所选位置,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function workLocationSelected(e) {
workAddress = e.poi.name;
loadWorkLocation();
} function loadWorkLocation() {
delWorkLocation();
var geocoder = new AMap.Geocoder({
city: cityName,
radius: 1000
}); geocoder.getLocation(workAddress, function (status, result) {
if (status === "complete" && result.info === 'OK') {
var geocode = result.geocodes[0];
x = geocode.location.getLng();
y = geocode.location.getLat();
loadWorkMarker(x, y);
loadWorkRange(x, y, 60, "#3f67a5", vehicle);
map.setZoomAndCenter(12, [x, y]);
}
})
}

至于导航功能代码我没怎么动,没去研究就不献丑了…

最后来个效果图。

####北京

####成都

####苏州

###深圳

高德API+.NET解决租房问题(JS相关)的更多相关文章

  1. 高德API+.NET解决租房问题(可能是最可靠房源:上海互助租房)

    作者:李国宝链接:https://zhuanlan.zhihu.com/p/22113421来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. PS:最近点赞和关注的小伙伴 ...

  2. 高德API+Python解决租房问题(.NET版)

    源码地址:https://github.com/liguobao/58HouseSearch 在线地址:58公寓高德搜房(全国版):http://codelover.link:8080/ 周末闲着无事 ...

  3. 高德 API+Python 解决租房问题

    项目简介: 编写Python脚本爬取某租房网站的房源信息,利用高德的 js API 在地图上标出房源地点,划出距离工作地点1小时内可到达的范围,附上公交路径规划功能查看不同路径的用时. 一.介绍 1. ...

  4. 高德API+.NET解决租房问题(新增诚信房源)

    作者:李国宝链接:https://zhuanlan.zhihu.com/p/22105008(欢迎点赞)来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 之前有小伙伴反应 ...

  5. c#两种方式调用google地球,调用COM API以及调用GEPLUGIN 与js交互,加载kml文件,dae文件。将二维高德地图覆盖到到三维谷歌地球表面。

    网络上资源很多不全面,自己在开发的时候走了不少弯路,在这里整理了最全面的google全套开发,COM交互,web端交互.封装好了各种模块功能. 直接就可以调用. 第一种方式:调用COMAPI实现调用g ...

  6. js相关(easyUI),触发器,ant,jbpm,hibernate二级缓存ehcache,Javamail,Lucene,jqplot,WebService,regex,struts2,oracle表空间

    *********************************************js相关********************************************* // 在指 ...

  7. nginx实现动态分离,解决css和js等图片加载问题

    改帖专门为使用nginx,通过nginx把请求转发到web服务器再返回客户端的时候,解决css和js和图片加载不出来的问题. 如果没安装nginx,请访问一下地址进行安装 http://www.cnb ...

  8. 【前端知识体系-JS相关】ES6专题系列总结

    1.如何搭建ES6的webpack开发环境? 安装Node环境 node -v // 10.14.1 安装NPM环境 npm -v // 6.4.1 安装babel npm install @babe ...

  9. 【高德API】如何利用MapKit开发全英文检索的iOS地图

    原文:[高德API]如何利用MapKit开发全英文检索的iOS地图 制作全英文地图的展示并不困难,但是要制作全英文的数据检索列表,全英文的信息窗口,你就没办法了吧.告诉你,我有妙招!使用iOS自带的M ...

随机推荐

  1. *Amazon problem: 234. Palindrome Linked List (reverse the linked list with n time)

    Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...

  2. mvc做网站怎么在mvc中直接访问.html网页 [问题点数:20分]

    最近用.net mvc做一个网站 我想在mvc中直接访问一个 .html页面 怎么设置一下啊 现在直接访问是404不让访问的 放到view文件夹外面...

  3. 【[SDOi2012]Longge的问题】

    求\(\sum_{i=1}^ngcd(i,n)\) 考虑枚举\(gcd\),现在答案变成这样 \(\sum_{d|n}d*f(d)\) \(f(d)=\sum_{i=1}^n [gcd(i,n)==d ...

  4. 什么是React中的组件

    组件就是页面上的一部分.如图,左边是一个网页.右边是对应的一个组件图.我们可以把一个大的网页拆分成很多小的部分.比如标题部分,对应一个组件,就是标题组件.搜索部分,对应的组件就是搜索组件.而这个搜索组 ...

  5. 2018.10.14 MyBatis配置实现对用户的增删改查

    记得导入对应的Jar包 ant-1.9.6.jar ant-launcher-1.9.6.jar asm-5.2.jar cglib-3.2.5.jar commons-logging-1.2.jar ...

  6. sublime重构变量

    选中变量后按下Ctrl+D可批量修改变量名

  7. 【luogu P3379 最近公共祖先】 模板

    题目链接:https://www.luogu.org/problemnew/show/P3379 倍增求lca,先存下板子,留个坑以后再填讲解. in 5 5 43 12 45 11 42 43 23 ...

  8. Android学习笔记_51_转android 加载大图片防止内存溢出

    首先来还原一下堆内存溢出的错误.首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片.应用的布局很简单,一个Button一个ImageView, ...

  9. Windows下安装PCL点云库

    原文链接:http://blog.csdn.net/u012337034/article/details/38270109 简介:         在Windows下安装PCL点云库的方法大概有两种: ...

  10. 细说多线程之Thread与Runnable

    1:创建线程的两种方式: 继承Thread类 public class MyThread extends Thread { @Override public void run() { } } MyTh ...