Saniyede çok büyük miktarda gerçek zamanlı veri içeren bir projede çalışıyorum (websockets tarafından sağlanan). Bu nedenle, Google'ın API'sini bir Şehir + Bölgeyi bir longlat koordinatına dönüştürmek için kullanamaz. 1 ila 100 başarı oranı elde ediyorum. Google API'nın Koordinatör hizmeti için & Bölgesi'ne sınırsız bir alternatif var mı? İdeal olarak bu tür verilerin yerel olarak depolanmış bir JSON dizisi?Google Maps Geolocation API'ye alternatif
cevap
Genellikle çok sayıda veri noktasıyla uğraşırken, bunları bir kez sunucuda kodlarsınız. Daha sonra, lat/long'ları müşterilerinize kullanıma hazır olarak aktarabilirsiniz.
Google, sunucunuzdan kullanabileceğiniz bir Geocoding web service sahiptir, ancak 2,500/gün istek sınırı vardır. Bu işe yaramazsa, OSM'un Nominatim'ine de bakabilirsiniz; Mapquest hosts sınırsız bir web hizmeti.
datasciencetoolkit.org'a bir göz atın. EC2 üzerinde barındırabileceğiniz ve kendi sunucunuza coğrafi konum aramaları yapabileceğiniz ve dolayısıyla API sınırları olmayan bir sanal makine görüntüsü/AMI sunarlar.
Ayrıca, Yahoo'ların Google’dan daha yüksek limitlere sahip coğrafi konum belirleme API'si de var.
Yahoo tarafından YQL adı verilen bir hizmeti kullanabilirsiniz. Bu hizmet, günde 100.000'e kadar sınırlı sayıda istek için ücretsizdir. Sonra enlem ve boylamı yanıt XML'inde sorgu/sonuç/yer/centroid'e alabilirsiniz.
Bu hizmetle farkettiğim bir şey şehir isimlerinin tam olması gerektiğidir ve birden çok sonuç olması mümkündür.
http://developer.yahoo.com/yql/
Örnek YQL sorgusu:
http://query.yahooapis.com/v1/public/yql?q=SELECT * FROM geo.places WHERE text="Seattle" and placeTypeName = "Town"
Tepki XML:
<?xml version="1.0" encoding="UTF-8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="1" yahoo:created="2012-07-09T16:20:40Z" yahoo:lang="en-US">
<results>
<place xmlns="http://where.yahooapis.com/v1/schema.rng" xml:lang="en-US" yahoo:uri="http://where.yahooapis.com/v1/place/2490383">
<woeid>2490383</woeid>
<placeTypeName code="7">Town</placeTypeName>
<name>Seattle</name>
<country code="US" type="Country">United States</country>
<admin1 code="US-WA" type="State">Washington</admin1>
<admin2 code="" type="County">King</admin2>
<admin3/>
<locality1 type="Town">Seattle</locality1>
<locality2/>
<postal/>
<centroid>
<latitude>47.603561</latitude>
<longitude>-122.329437</longitude>
</centroid>
<boundingBox>
<southWest>
<latitude>47.422359</latitude>
<longitude>-122.472153</longitude>
</southWest>
<northEast>
<latitude>47.745071</latitude>
<longitude>-122.176193</longitude>
</northEast>
</boundingBox>
<areaRank>6</areaRank>
<popRank>12</popRank>
</place>
</results>
</query>
<!-- total: 82 -->
<!-- engine5.yql.mud.yahoo.com -->
bir çözüm API çağrısı sınırını artmıyor, her zaman daha ödenek alabilir ama olabilir yüksek istek/saniye sadece ulaşılabilir değil. Aktarılan verilerde bu bilgiye ihtiyacımız olduğunu kabul ediyorum, ancak şu anda ellerimizin dışında kalıyor, böyle bir bilginin Açık Kaynaklı dizisine bir bağlantı olmasını umuyordum. –
Veri kaynağını kendisi değiştiremezseniz, her zaman veri akışını proxy edebilirsiniz. Sunucunuzun veri kaynağına bağlanmasını sağlayın, coğrafi kodlamayı yapın, ardından verileri + akışları istemcilere aktarın. – josh3736