矢量地图切片技术分析

1. 什么是矢量切片

传统的栅格地图切片,是预先在Server端绘制好固定的PNG和JPG切片集合。而矢量切片是很早就已经出现,并已通过各种不同的技术手段在应用中表现出来,大多以json或二进制文件将矢量地图数据传输至前端进行绘制。例如百度地图、Google地图等都较早实现了栅格和矢量两种模式。

矢量地图切片将矢量数据通过不同的描述文件来组织和定义,通常通过自定义文件或json文件进行传输,在前端按需请求不同的矢量瓦片数据文件,并利用类似canvas等技术进行绘制。使用这种技术有不少好处,例如不再需要为不同的样式而反复进行制图、渲染、切片、更新service等过程,并且在当前各种高分屏、视网膜屏大肆发展的阶段,避开按照特定DPI和分辨率渲染的栅格图片在不同的显示设备上无法以统一清晰的效果呈现,等等。

当前,矢量切片已经广泛应用开了,现在的在OSM数据中得到了广泛的使用,例如这个站点提供了OSM Planet和分国家区域的daily下载包,并且以MBTiles文件的形式提供。

 

1.1 矢量切片规范

Mapbox提出了Vector Tile的开放规范,并遵守Creative Commons Attribution 3.0 United States License:Mapbox Vector Tile Specification,该规范用到了Google的Protocol Buffers作为数据编码规范。同样被Mapbox列入规范的还有MBTiles is a specification,作为在SQLite中存储切片数据的规范。在两者的github页面上,都可以找到对应规范的实现清单,这些实现大多是开源工具,也包含一些闭源软件,而这些所有,足以支撑起矢量切片的数据转换、数据存储、数据服务的全技术架构的基本骨架。

1.2 数据存储

在Mapbox所用的实现中,Google Protocol Buffers是很重要的一环,Vector tiles被编码为.mvt为后缀的文件。其中,最核心的数据结构定义可参看:Vector Tile protobuf schema document

值得一提的是,OpenStreetMap的数据包也叫PBF,也同样用到了该数据互交换格式,但正如对XML的不同应用一样,两者并不相同。

MBTiles是另一种存储技术,号称能够高效地在单个SQLite数据文件中存储百万级的切片。这实质上是利用了SQLite本身较好地跨平台特性,所以Mapbox iOS toolkits等也能够直接利用MBTiles来存储数据。另一个比较显著的特点是方便图像的复用,例如大比例尺下,大量单色区域(绿地、海洋等)的切片文件可以重用。例如TileMill(现在已演化为Mapbox Studio)使用MBTiles来存储数据,并用于导出切片文件。MBTiles作为关系数据库,自然也可以用于存储矢量切片。目前来看,MBTiles最常用的使用场景是切片数据的导入导出和移动端离线使用。

例如一个典型的MBTiles库的切片表的字段如下:

2. 矢量切片的地图投影

目前为止,大多数的VT技术都没有在地图投影上做太多扩展,例如Mapbox就只支持Web Mercator投影。其实纵观Web Map的发展,这似乎一直都是不成文的行业规范了。2005年,Google Map的异军突起让Web Mercator得以众所周知,作为墨卡托投影的一个变种,这种投影(通常,指的是ESPG:3857,历史上变迁过多次,更多可看看这篇文章)被越来越广泛地使用,OpenStreetMap、Mapbox、BingMaps、Mapquest等等。此外,ESRI等商业GIS平台也都有较好的支持。开源的地图前端框架,例如OpenLayers、Leaflet等,也极其推崇这个投影。这是典型的工程领域推动的产物,而非科学界到工程界的应用,而过程也比较漫长,下面概要地整理了下Web Mercator投影的发展过程。

2.1 Mercator投影

Web Mercator其实是墨卡托投影的一个变种,所以不得不提到传统意义上的Mercator投影。这种投影得名于Gerardus Mercator(1512-1594),一个荷兰的地图学家,并由其于1569年提出。按照这种投影法,可以将世界地图绘制在一整个长方形画布上,而经纬线在任何地方都能垂直相交。这种地图在编制航海图中应用很广泛。

墨卡托投影通常叫做“正轴等角圆柱投影”,或“等角正切圆柱投影”,即以与地轴方向一致的圆柱切割地球,按照等角条件,将经纬网投影到圆柱面上,最后讲圆柱面展开成平面后形成。这样的展开,经纬线相交成直角,经线间隔相等,而纬线间隔从基准纬线处相两极逐渐增大。因此,墨卡托投影的地图上长度和面积变形明显:基准纬线处无变形,变形程度向两极逐渐增大,但是因为它在各个方向均等扩大的特性,保持了方向和相互位置关系的正确。这也是为什么在地图上,方向和角度依然是保持正确的,因此地图上两点的航线,方向是正确的,所以在海上能够准确指向目的地。

QQ20161210-0
上图来自维基百科

2.2 Web Mercator的变化

Web Mercator的公式与标准的球面墨卡托投影一样,实质上是将球面墨卡托投影公式运用于椭球面坐标的投影计算方法。该投影坐标的大地基准面(Datum)是WGS84椭球体,球面墨卡托投影公式选用WGS84椭球体的长半轴半径,即6378137米。相比于墨卡托投影(球面或椭球面)在任意点各向长度比相等,沿直线方位不变的特性,只相当于近似的椭球面墨卡托。

从数学公式来看,墨卡托投影的地图坐标计算公式如下:

\[
x=R(\lambda-\lambda_0) \\
y=R ln tan({\pi \over 4}+{\phi \over 2})
\]

其中\(R\)是球体的半径,\(\lambda\)是经度(弧度),\(\phi\)是纬度(弧度)。

类球体(spheroid,也有时候叫做ellipsoid of revolution)的地图坐标如下:
\[
x=a(\lambda-\lambda_0) \\
y={a\over2}ln [
tan({\pi \over 4}+{\phi \over 2})
{({{1-e\sin\phi} \over {1+e\sin\phi}})}^{e\over2}
]
\]

其中\(a\)是椭球体的长半轴,\(e\)是椭球体的第一偏心率,\(e={\epsilon \over a}\),\(\epsilon=\sqrt{a^2-b^2}\),\(b\)是椭球体的短半径。

某种程度上讲,Web Mercator的坐标计算与Mercator相比,主要在于纬度的计算,而这种计算差异,却是工程领域逐步传承下来的做法。普遍认为,当年谷歌工程师为了简便计算(抑或压根是搞错了?),直接使用了WGS84椭球体的长半轴作为半径的正球体(没有使用椭球体和第一偏心率),公式中的经纬度坐标使用的是WGS84坐标。这显然不符合地图学和GIS学界的科学理论,甚至有人认为搞乱了空间参考的标准体系。我猜测也是长久以来这种投影没有被学界广泛宣传的原因之一。

因此,考虑这种球体和椭球体之间的混搭,Web Mercator并非是等角投影了,只能说是近似。有人做了如下的实验,对比了两种投影在纬线上的差异。


上图借用自这篇博文

在ArcGIS的投影中,Web Mercator被称作Auxiliary Sphere。而在投影参数设置上,3785使用的是正球体参数,3857使用的是椭球体参数。

3. 应用技术架构

矢量切片只是GIS或地图可视化服务的其中一个实现环节,所以首先要构建完整的地图服务架构,在这点上,商业平台如ESRI,可以基于各自的实现技术来满足用户需求。然而熟悉开源技术栈的架构,有利于灵活配置和构建满足特定使用场景的平台、工具链或搭建个性化的数据生产流程。

首先值得借鉴的,是OpenStreetMap,OSM创立了开源地图和协同服务的完整案例,在其wiki上可以看到OSM Components的发展历程,当前的架构如下图:

该架构图从数据库、API、前端、后端Tile层、编辑器等角度,提供了尽可能全地工具框架,取其所需者,应可获益良多。

工具的使用可以让架构大相近庭,然而也有一些基本实现的文章值得一读,例如Graham Dunlop的这篇博文:Vector tiles remixed,介绍了如何脱离Mapbox技术栈,来实现基于开放地图数据的MVT的创建。下图是他的工作流,看的出来tilemaker是他使用的核心组件,更多内容可以直接去阅读那篇文章,不多赘述,但这中技术流程理论上可以移植到任何基础数据,而非仅仅是OSM planet data。

4. 总结

通过已有开源框架的大致情况分析,矢量切片相关的数据读取和解析、前端可视化技术,相对较为丰富,而私有化的样式和制图工具、切片维护和服务工具都还比较短缺或者说并不是很完善。因此,要自行完整搭建一套基于私有数据的矢量切片数据处理与服务平台,技术上仍然有很多路要走,不仅说是要跨坑,而且有不少桥梁要搭建,又不少针对现有组建的改动需要完成。任重而道远,但依旧是可以去做的事情。

更多参考:
  1. Implications of Web Mercator and Its Use in Online Mapping
  2. http://gdunlop.github.io/Vector-tiles-remixed/
  3. https://www.mapbox.com/about/open/
  4. https://github.com/mapbox/awesome-vector-tiles
  5. http://wiki.openstreetmap.org/wiki/Main_Page

90 thoughts on “矢量地图切片技术分析

  1. 尚爱思套图说道:

    我只是来看一看,好久没来了~

  2. Alvin Kosmowski说道:

    Hiya! I simply want to give a huge thumbs up for the good information you have got right here on this post. I will likely be coming again to your blog for more soon.

  3. view说道:

    I simply want to mention I am just very new to blogging and site-building and absolutely savored this page. Very likely I’m likely to bookmark your blog . You certainly come with awesome writings. Many thanks for sharing with us your website.

  4. kumahasiaweh说道:

    Hi there, I found your website via Google while searching for a comparable matter, your website came up, it appears to be like great. I have bookmarked it in my google bookmarks.

  5. Faytech North America is a touch screen Manufacturer of both monitors and pcs. They specialize in the design, development, manufacturing and marketing of Capacitive touch screen, Resistive touch screen, Industrial touch screen, IP65 touch screen, touchscreen monitors and integrated touchscreen PCs. Contact them at http://www.faytech.us, 121 Varick Street,3rd Floor,New York, NY 10013,+1 646 205 3214

  6. (Metroclick.com说道:

    MetroClick specializes in building completely interactive products like Photo Booth for rental or sale, Touch Screen Kiosks and Digital Signage, and experiences. With our own hardware production facility and in-house software development teams, we are able to achieve the highest level of customization and versatility for Photo Booths, Touch Screen Kiosks and Digital Signage. MetroClick, 121 Varick St, #301, New York, NY 10013, +1 646-843-0888

  7. dentysta gorzów说道:

    Hey there are using WordPress for your site platform? I’m new to the blog world but I’m trying to get started and set up my own. Do you need any coding expertise to make your own blog? Any help would be really appreciated!

  8. I haven’t checked in here for some time as I thought it was getting boring, but the last several posts are good quality so I guess I will add you back to my daily bloglist. You deserve it my friend 🙂

  9. find out说道:

    Definitely engaging specifics you have stated, thank you so much for publishing.

  10. It can be practically unattainable to see well-updated individuals on this content, although you appear like you fully grasp those things you’re writing about! Thanks

  11. dentysta gorzów说道:

    One thing I would like to say is that earlier than purchasing more pc reminiscence, take a look at the machine in to which getting installed. In the event the appliance is usually running Windows xp, for instance, the particular memory roof is 3. 25GB. Setting up a many more than this would rigorously constitute any waste. Be sure that one’s mother board can handle the upgrade amount, as well. Interesting blog post BLOGTITLE. NAME

  12. I like this web blog so much, saved to favorites. “Respect for the fragility and importance of an individual life is still the mark of an educated man.” by Norman Cousins.

  13. dentysta gorzów说道:

    Hey there just wanted to give you a brief heads up and let you know a few of the pictures aren’t loading correctly. I’m not sure why but I think its a linking issue. I’ve tried it in two different browsers and both show the same outcome.

  14. Very interesting details you have observed , regards for posting . “Pleasure and love are the pinions of great deeds.” by Charles Fox.

  15. my sources说道:

    It really is suitable day to create some preparations for the long run. I have go through this blog posting and if I have the ability to, I want to suggest you number of enlightening recommendation.

  16. Continue说道:

    Noticeably absorbing specifics that you have said, many thanks for adding.

  17. click for info说道:

    I merely have to notify you that I am new to blogging and extremely adored your write-up. More than likely I am likely to save your blog post . You indeed have magnificent article blog posts. Delight In it for share-out with us your main site post

  18. I’ve recently started a site, the info you offer on this web site has helped me greatly. Thanks for all of your time & work.

  19. Flowers Cork说道:

    I simply couldn’t go away your site before suggesting that I really enjoyed the standard info an individual provide on your guests? Is going to be again incessantly in order to investigate cross-check new posts

  20. dentysta gorzów说道:

    Good post however I was wondering if you could write a litte more on this subject? I’d be very thankful if you could elaborate a little bit more. Appreciate it!

  21. Incredible! This blog looks exactly like my old one! It’s on a completely different subject but it has pretty much the same page layout and design. Excellent choice of colors!

  22. I genuinely enjoy looking through on this website, it has got excellent articles. “Beware lest in your anxiety to avoid war you obtain a master.” by Demosthenes.

  23. click this site说道:

    I simply hope to share it with you that I am new to wordpress blogging and clearly valued your page. Quite possibly I am most likely to remember your blog post . You undoubtedly have excellent article material. Value it for giving out with us all of your internet information

  24. I like what you guys are up too. Such clever work and reporting! Keep up the excellent works guys I’ve incorporated you guys to my blogroll. I think it will improve the value of my website :).

  25. Hello There. I found your blog using msn. This is a very well written article. I will make sure to bookmark it and come back to read more of your useful information. Thanks for the post. I will definitely comeback.

  26. Thankyou for helping out, superb information.

  27. I gotta favorite this site it seems extremely helpful very beneficial

  28. Generally I don’t read post on blogs, however I would like to say that this write-up very forced me to take a look at and do it! Your writing taste has been amazed me. Thanks, quite great article.

  29. My brother suggested I might like this website. He was entirely right. This post actually made my day. You cann’t imagine just how much time I had spent for this information! Thanks!

  30. Very nice post. I just stumbled upon your weblog and wished to say that I have really enjoyed surfing around your blog posts. After all I will be subscribing to your rss feed and I hope you write again soon!

  31. www.biocentro.cl说道:

    Cursos masajes para toda la gente de todas las edades.

  32. Thanks for the sensible critique. Me and my neighbor were just preparing to do a little research on this. We got a grab a book from our local library but I think I learned more clear from this post. I’m very glad to see such wonderful information being shared freely out there.

  33. Wow, incredible blog structure! How long have you been running a blog for? you made running a blog look easy. The total look of your website is wonderful, let alone the content!

  34. this website说道:

    MichaelJemery.com is a site with many hypnosis downloads. Whether you are looking for free hypnosis downloads, self hypnosis download for mp3, video and any audio files, Michael Jemery has the downloads for you. You can download hypnosis from apps, audio, mp3 and even youtube !

  35. Health & Fitness说道:

    Thanks , I have just been searching for information about this subject for a while and yours is the best I’ve found out so far. However, what in regards to the bottom line? Are you positive in regards to the supply?

  36. As I site possessor I believe the content matter here is rattling magnificent , appreciate it for your efforts. You should keep it up forever! Good Luck.

  37. There is evidently a bundle to identify about this. I assume you made some good points in features also.

  38. Automotive说道:

    Hiya, I’m really glad I have found this information. Nowadays bloggers publish just about gossips and net and this is really frustrating. A good web site with exciting content, this is what I need. Thank you for keeping this site, I will be visiting it. Do you do newsletters? Cant find it.

  39. Travel & Leisure说道:

    I’m not sure where you’re getting your info, but good topic. I needs to spend some time learning more or understanding more. Thanks for magnificent information I was looking for this information for my mission.

  40. Undeniably believe that which you stated. Your favorite reason seemed to be on the internet the easiest thing to be aware of. I say to you, I certainly get irked while people consider worries that they plainly do not know about. You managed to hit the nail upon the top and also defined out the whole thing without having side effect , people could take a signal. Will likely be back to get more. Thanks

  41. Emery EPS说道:

    Emeryeps is a SEO(Search Engine optimzation) and Internet Marketing company. They help businesses to get traffic from various search engine and online community. They have seo experts and consultants with many years of SEO Experiences. No matter where your business is located, EmeryEPS.com can help your business to secure your highly convertible leads online.

  42. Hello, With the outset I would want to thank you for the time place into producing the short article and apologize for my English. He aided me immensely, and several things became obvious to me. Mainly these contained with this report: BLOGURL. Will position a backlink on my blog. Totally sure I will give the title: BLOGTITLE, so my buddies are interested in it 🙂 and i have plenty of associates who are interested in computer systems and all connected to them. Regards NAME.

  43. dentysta gorzów说道:

    The first time That i heard Rush Limbaugh around the radio in 1991, I heard him referring to help you women as “Feminazis” along with his disregarded anything bigger had to say seeing that that day. Others should do precisely the same. He is, simply put, a nut! NAME

  44. Thank you for sharing superb informations. Your site is so cool. I’m impressed by the details that you’ve on this site. It reveals how nicely you understand this subject. Bookmarked this web page, will come back for more articles. You, my friend, ROCK! I found just the info I already searched everywhere and simply could not come across. What a perfect web site.

  45. Thank you a bunch for sharing this with all of us you really recognize what you are speaking approximately! Bookmarked. Please also visit my website =). We could have a hyperlink change arrangement among us!

  46. You are my intake, I have few blogs and often run out from post :). “He who controls the past commands the future. He who commands the future conquers the past.” by George Orwell.

  47. I have read some excellent stuff here. Certainly value bookmarking for revisiting. I wonder how so much effort you place to make the sort of excellent informative website.

  48. I’ll immediately take hold of your rss feed as I can not in finding your email subscription hyperlink or newsletter service. Do you have any? Kindly let me understand so that I may just subscribe. Thanks.

  49. I think you have mentioned some very interesting points , regards for the post.

  50. I wanted to post you this tiny word so as to thank you so much as before for those magnificent ideas you’ve featured above. It’s simply pretty open-handed of you to supply without restraint exactly what a number of people could have sold as an e book to help make some bucks for their own end, especially considering that you might have tried it if you wanted. Those solutions additionally served to become good way to recognize that someone else have the same zeal like my own to learn a great deal more in regard to this problem. I believe there are a lot more fun instances in the future for people who examine your site.

  51. Good write-up, I am normal visitor of one¡¦s website, maintain up the excellent operate, and It’s going to be a regular visitor for a lengthy time.

  52. You are a very bright individual!

  53. I and also my friends happened to be studying the nice items located on your web site and then all of a sudden I had an awful suspicion I never thanked the web site owner for those techniques. These guys became as a consequence very interested to read through all of them and already have surely been tapping into these things. Appreciation for indeed being indeed helpful as well as for picking out some important areas most people are really eager to be informed on. My personal honest apologies for not expressing gratitude to earlier.

  54. Some truly good content on this internet site , appreciate it for contribution.

  55. Generally I do not read post on blogs, but I wish to say that this write-up very pressured me to try and do it! Your writing style has been amazed me. Thanks, quite great post.

  56. Fantastic goods from you, man. I’ve understand your stuff previous to and you’re just extremely wonderful. I really like what you have acquired here, really like what you’re saying and the way in which you say it. You make it enjoyable and you still care for to keep it smart. I can’t wait to read much more from you. This is really a great website.

  57. Great beat ! I would like to apprentice while you amend your website, how can i subscribe for a blog website? The account aided me a acceptable deal. I had been tiny bit acquainted of this your broadcast offered bright clear concept

  58. I gotta favorite this web site it seems very helpful very beneficial

  59. hp samsung murah说道:

    Does your site have a contact page? I’m having problems locating it but, I’d like to shoot you an e-mail. I’ve got some ideas for your blog you might be interested in hearing. Either way, great blog and I look forward to seeing it improve over time.

  60. My developer is trying to convince me to move to .net from PHP. I have always disliked the idea because of the expenses. But he’s tryiong none the less. I’ve been using WordPress on several websites for about a year and am worried about switching to another platform. I have heard good things about blogengine.net. Is there a way I can transfer all my wordpress content into it? Any kind of help would be greatly appreciated!

  61. Wow! This blog looks just like my old one! It’s on a entirely different subject but it has pretty much the same layout and design. Wonderful choice of colors!

  62. You have remarked very interesting points! ps decent web site.

  63. I have been absent for some time, but now I remember why I used to love this site. Thanks, I’ll try and check back more often. How frequently you update your web site?

  64. jeremy abrams说道:

    Un58TX Wohh just what I was looking for, appreciate it for posting.

  65. Trappe Prisliste说道:

    Only wanna remark on few general things, The website design and style is perfect, the subject matter is very good : D.

  66. Hello there! This post could not be written much better! Looking at this post reminds me of my previous roommate! He constantly kept talking about this. I’ll forward this article to him. Pretty sure he will have a great read. I appreciate you for sharing!

  67. My developer is trying to convince me to move to .net from PHP. I have always disliked the idea because of the expenses. But he’s tryiong none the less. I’ve been using WordPress on a number of websites for about a year and am anxious about switching to another platform. I have heard fantastic things about blogengine.net. Is there a way I can import all my wordpress content into it? Any kind of help would be greatly appreciated!

  68. Just wanna comment that you have a very nice internet site , I the style and design it actually stands out.

  69. Trapper Protecta说道:

    I like this web site so much, bookmarked. “Respect for the fragility and importance of an individual life is still the mark of an educated man.” by Norman Cousins.

  70. My developer is trying to convince me to move to .net from PHP. I have always disliked the idea because of the expenses. But he’s tryiong none the less. I’ve been using Movable-type on several websites for about a year and am nervous about switching to another platform. I have heard great things about blogengine.net. Is there a way I can transfer all my wordpress posts into it? Any kind of help would be greatly appreciated!

  71. Woah! I’m really enjoying the template/theme of this website. It’s simple, yet effective. A lot of times it’s very hard to get that “perfect balance” between usability and appearance. I must say that you’ve done a superb job with this. Additionally, the blog loads super fast for me on Firefox. Outstanding Blog!

  72. I dugg some of you post as I cogitated they were handy very beneficial

  73. Have you ever considered publishing an e-book or guest authoring on other sites? I have a blog based upon on the same subjects you discuss and would love to have you share some stories/information. I know my viewers would appreciate your work. If you are even remotely interested, feel free to shoot me an email.

  74. Home Improvement说道:

    I’m also writing to let you be aware of of the helpful discovery my friend’s daughter experienced visiting yuor web blog. She learned lots of things, not to mention how it is like to possess an incredible helping mood to have many others really easily master a variety of complex things. You actually exceeded visitors’ expectations. Many thanks for delivering those valuable, healthy, explanatory and as well as cool tips on that topic to Julie.

  75. Doriserele说道:

    Absolutely NEW update of SEO/SMM software “XRumer 16.0 + XEvil”:
    captchas recognition of Google, Facebook, Bing, Hotmail, SolveMedia, Yandex,
    and more than 8400 another size-types of captcha,
    with highest precision (80..100%) and highest speed (100 img per second).
    You can connect XEvil 3.0 to all most popular SEO/SMM programms: XRumer, GSA SER, ZennoPoster, Srapebox, Senuke, and more than 100 of other software.

    Interested? You can find a lot of impessive videos about XEvil in YouTube.
    See you later 😉

    XRumer201707

  76. Everyone loves what you guys are usually up too. Such clever work and coverage! Keep up the fantastic works guys I’ve added you guys to our blogroll.

  77. Health说道:

    I like what you guys are up also. Such intelligent work and reporting! Keep up the excellent works guys I’ve incorporated you guys to my blogroll. I think it will improve the value of my website :).

  78. Business说道:

    I was examining some of your blog posts on this site and I conceive this internet site is rattling instructive! Continue posting .

  79. Women说道:

    Perfectly indited written content , thankyou for selective information .

  80. Career And Jobs说道:

    I enjoy you because of all of your work on this web site. My aunt delights in doing internet research and it is easy to see why. We all know all about the powerful tactic you convey vital ideas by means of this website and therefore strongly encourage participation from the others on that issue while our own simple princess is undoubtedly starting to learn a lot of things. Enjoy the remaining portion of the new year. Your doing a remarkable job.

  81. Fashion说道:

    Its like you read my mind! You appear to know a lot about this, like you wrote the book in it or something. I think that you can do with a few pics to drive the message home a bit, but other than that, this is excellent blog. A great read. I’ll certainly be back.

  82. I went over this web site and I think you have a lot of wonderful info, bookmarked (:.

  83. I went over this web site and I believe you have a lot of fantastic info, saved to bookmarks (:.

  84. Technology说道:

    It is in reality a nice and useful piece of info. I am satisfied that you just shared this useful info with us. Please stay us up to date like this. Thanks for sharing.

  85. I really like what you guys are up too. This kind of clever work and coverage! Keep up the excellent works guys I’ve added you guys to our blogroll.

  86. dani说道:

    “Greetings! Very helpful advice within this post! It is the little changes which will make the greatest changes. Thanks for sharing!”

  87. Pets说道:

    You are my breathing in, I possess few web logs and very sporadically run out from to post .I conceive this web site has got some very fantastic info for everyone. “Philosophy triumphs easily over past evils and future evils but present evils triumph over it.” by La Rochefoucauld.

  88. Doriserele说道:

    Revolutional update of SEO/SMM software “XRumer 16.0 + XEvil”:
    captcha regignizing of Google, Facebook, Bing, Hotmail, SolveMedia, Yandex,
    and more than 8400 another size-types of captchas,
    with highest precision (80..100%) and highest speed (100 img per second).
    You can connect XEvil 3.0 to all most popular SEO/SMM programms: XRumer, GSA SER, ZennoPoster, Srapebox, Senuke, and more than 100 of other programms.

    Interested? You can find a lot of introducing videos about XEvil in YouTube.
    Good luck!

    XRumer201707

  89. Jewelry说道:

    Absolutely written subject matter, thanks for entropy. “In the fight between you and the world, back the world.” by Frank Zappa.

  90. You have brought up a very fantastic details , regards for the post.

发表评论

电子邮件地址不会被公开。