LuisT Posted January 14, 2011 at 04:35 AM Report Share #363472 Posted January 14, 2011 at 04:35 AM Olá caros amigos, Sou novo aqui no fórum e sinto-me mal em estar a pedir a vossa ajuda logo no meu primeiro tópico. Mas estou um pouco desesperado... Procuro uma lista actualizada com todos os códigos postais de portugal e com a latitude e longitude de cada um deles... Alguém possui esta base de dados? Estou disposto a pagar por ela... Visitei o site dos CTT, eles têm lá a lista actualizada, mas com informações a mais e sem a latitude e longitude. Mas em todo o caso, se alguém conseguir remover o que não interessa dessa lista ficando apenas os codigos postais, eu agradecia! Nem que depois tenha de encontrar as lat/lng um a um. Alguém me pode ajudar por favor? Obrigado! Link to comment Share on other sites More sharing options...
IceBrain Posted January 14, 2011 at 05:22 AM Report Share #363473 Posted January 14, 2011 at 05:22 AM Se postares aqui a lista, pode ser que consiga remover - não me consigo registar no site deles. Quanto às coordenadas, se vires na mesma página eles têm outros formatos para "Mapa dos códigos postais". Um deles é KML, que é um formato XML, razoavelmente fácil de tratar; na <description> tens lá o código postal e depois tens os pontos geográficos que delimitam o local que o CP cobre. Claro que se queres obter apenas um par Longitude/latitude para cada CP, tens que calcular o centroide do polígono. Outra opção seria usares o webservice que é simpaticamente disponibilizado e que te devolve esse centro em coordenadas a partir de qualquer CP. Mas se vais pedir _todos_, é preferível contactá-los e pedir-lhes uma cópia da BD do que estares a massacrar-lhes o servidor. http://geodivagar.blogspot.com/2010/09/cp4-georeferenciados-centroides.html ❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents A list of command line apps Link to comment Share on other sites More sharing options...
LuisT Posted January 14, 2011 at 11:27 AM Author Report Share #363488 Posted January 14, 2011 at 11:27 AM Obrigado pela sua resposta IceBrain. Aqui vai a lista actualizada dos códigos postais obtida no site dos CTT: http://www.enigmashare.com/v0wzawadldc4 Será que alguem me consegue arranjar a lista que procuro? Codigo Postal xxxx-xxx + Latitude e Longitude Formato CSV ou em tabela de base de dados MySQL Estou disposto a pagar por este serviço Link to comment Share on other sites More sharing options...
LuisT Posted January 14, 2011 at 01:03 PM Author Report Share #363495 Posted January 14, 2011 at 01:03 PM Paguei o serviço a um programador e já tenho a lista actualizada com latitudes e longitudes de cada código postal português 😁 Obrigado na mesma pela vossa atenção! Já agora, aproveito para informar que caso alguém procure esta lista, estou disposto a vender uma cópia, bastando para isso contactando-me via MP. Obrigado a todos mais uma vez. Link to comment Share on other sites More sharing options...
IceBrain Posted January 14, 2011 at 01:20 PM Report Share #363497 Posted January 14, 2011 at 01:20 PM LuisT: só uma sugestão: devias aprender expressões regulares. Neste caso retirar os CP desse ficheiro teria sido facílimo com elas. Mas ainda bem que arranjaste a lista 😁 ❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents A list of command line apps Link to comment Share on other sites More sharing options...
geodivagar Posted January 17, 2011 at 12:41 AM Report Share #363946 Posted January 17, 2011 at 12:41 AM Viva, por curiosidade, sou o autor do WS referido e nos Logs reparei que, na sequência desta thread, alguém fez o pedido das coordenadas para todos os cp4 existentes. Acabou por funcionar como um teste de carga bastante interessante, tendo o servidor (neste caso a infraestrutura do GAE) se comportado bastante bem. Se quiserem, em vez de pagar pela BD a quem pagou ao programador que por sua vez terá apontado ao WS em batch, talvez fosse preferível contribuírem monetariamente para a melhoria do serviço. 🙂 Sugestão de melhorias "a pagantes": - Reposta em XML ou GML ou KML or else - URLs mais REST tipo http://codigospostais.appspot.com/cp4/2675/foo em vez de http://codigospostais.appspot.com/cp4?codigo=2675&callback=foo - Pedidos por bounding box Link to comment Share on other sites More sharing options...
IceBrain Posted January 17, 2011 at 01:05 AM Report Share #363949 Posted January 17, 2011 at 01:05 AM Olá geodivagar. Ainda bem que aguentou, mas de qualquer forma é desconsideração por parte de quem faz pedidos em massa sem avisar :| ❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents A list of command line apps Link to comment Share on other sites More sharing options...
Black-Wolf Posted September 15, 2011 at 06:07 PM Report Share #412308 Posted September 15, 2011 at 06:07 PM Desculpem desenterrar isto mas será que alguém ainda tem a lista KMZ que estava no site dos CTT? O link deles está morto... Obrigado Link to comment Share on other sites More sharing options...
fmcruz Posted February 28, 2012 at 05:26 PM Report Share #441498 Posted February 28, 2012 at 05:26 PM Boa Tarde. Por acaso alguém sabe se existe (ou como é que pode ser obtido) um ficheiro que faça corresponder cada codigo postal a 7 digitos (CP7), com coordenadas geograficas. Isto é, ou um ficheiro que tenha em forma de tabela o Centroide de cada CP7, ou uma shapefile ou outro formato que permtia num SIG ver os poligonos de cada CP7? Obrigado!! Link to comment Share on other sites More sharing options...
mAiN_iNfEcTiOn Posted April 20, 2012 at 01:18 PM Report Share #450166 Posted April 20, 2012 at 01:18 PM Ma friend, checka os ctt.pt ... Na área de pesquisa por cod. postal tens disponível o KML com especificação por codpostal 4 + 3 🙂 Link to comment Share on other sites More sharing options...
cusco Posted February 25, 2014 at 10:53 AM Report Share #546563 Posted February 25, 2014 at 10:53 AM Ma friend, checka os ctt.pt ... Na área de pesquisa por cod. postal tens disponível o KML com especificação por codpostal 4 + 3 😉 Olá, o KML disponível parece só ter os polygons CP4 - Ainda têm com CP3 ?? Link to comment Share on other sites More sharing options...
cusco Posted July 28, 2016 at 03:17 PM Report Share #597865 Posted July 28, 2016 at 03:17 PM Olá, para os interessados, já tinha publicado em outro post ( https://www.portugal-a-programar.pt/topic/58129-base-de-dados-ctt-em-mysql-com-latitude-longitude/ ) tenho um conjunto de scripts no github que permite popular uma base de dados MySQL com os codigos postais CTT e latitude/longitude baseado no google maps: https://github.com/cusco/ctt Link to comment Share on other sites More sharing options...
fauves Posted October 13, 2016 at 01:50 PM Report Share #599590 Posted October 13, 2016 at 01:50 PM Em 28/07/2016 às 16:17, cusco disse: Olá, para os interessados, já tinha publicado em outro post ( https://www.portugal-a-programar.pt/topic/58129-base-de-dados-ctt-em-mysql-com-latitude-longitude/ ) tenho um conjunto de scripts no github que permite popular uma base de dados MySQL com os codigos postais CTT e latitude/longitude baseado no google maps: https://github.com/cusco/ctt Boas cusco! reparei que para o código postal 4740-XXX a Lat/long é sempre a mesma (-8.770147,41.5650629), ou seja, temos 1000 e poucos registos repetidos para todos. Para atualizar estas coordenadas basta correr o updateGEO? Ou tens algum ficheiro atualizado? Link to comment Share on other sites More sharing options...
fauves Posted October 17, 2016 at 09:25 AM Report Share #599662 Posted October 17, 2016 at 09:25 AM (edited) Criei a BD em mySQL e fiz a atualização da lat e long, mas ele mete os mesmos valores que tens. Reparei que ele só pesquisa pelo CP4 na api. Alguém pode ajudar-me a corrigir esta situação? $mysqli = new mysqli('localhost', 'root', '', 'CTT'); $qry = "select distinct CP4, CP3 from codigosPostais where LONGITUDE = '' AND LATITUDE = '' order by CP4 asc, CP3 asc limit 2500"; $qid = $mysqli->query($qry); if($qid->num_rows == 0){ echo "No results in database to update\n"; die(); } while($row = $qid->fetch_object()){ $geo = getGeo($row->CP4, $row->CP3); if(!isset($geo->lat)){ echo "$row->CP4-$row->CP3|error|$geo\n"; continue; } $updQry = "update codigosPostais SET LONGITUDE=$geo->lat, LATITUDE=$geo->lng WHERE CP4=$row->CP4 AND CP3='$row->CP3'"; $updQid = $mysqli->query($updQry); $aff = $mysqli->affected_rows; echo "$row->CP4-$row->CP3|$aff\n"; #die(); } function getGeo($cp4, $cp3){ #$url = "http://maps.googleapis.com/maps/api/geocode/json?address=$cp4-$cp3&sensor=false&components=country:PT"; $url = "http://ditu.google.cn//maps/api/geocode/json?address=$cp4-$cp3&sensor=false&components=country:PT"; /* IP CHANGING STUFF * * Uncomment this and the comment block a few lines below * only if you understand what it does, and after reading * changeIp() function comments * $i = 0; if(!file_exists('/ramdrive/googleip.txt')){ file_put_contents('/ramdrive/googleip.txt','10.100.100.15'); $currentIp = '10.100.100.16'; // default IP }else{ $currentIp = file_get_contents('/ramdrive/googleip.txt'); } $opts = array( 'socket' => array( 'bindto' => "$currentIp:0", ), ); $context = stream_context_create($opts); again: $data = json_decode(file_get_contents($url,false,$context)); */ $data = @file_get_contents($url,false); if($data == false){ return "error fetching $url"; } $data = json_decode($data); if($data->status == 'OVER_QUERY_LIMIT'){ /* IP Changing stuff if($i > 6){ die('OVER_QUERY_LIMIT'); } $i++; $context = stream_context_create(changeIp()); goto again: */ echo "Google returned over query limit\n"; die(); } //$geo = $data->results[0]->geometry->location; $maxKey = max(array_keys($data->results)); $geo = $data->results[$maxKey]->geometry->location; return $geo; } function changeIp(){ /* * This will return context options for file_get_contents * the following IP list will basically be bound by the router * with a netmap rule, NATing to different external IP's * thus, allowing to increase google's limit of 2500 requests * per IP per day. * * IP List * * 10.100.101.10 * 192.168.3.210 * 192.168.3.211 * 192.168.3.212 * 192.168.3.213 * 192.168.3.214 */ $lastIp = trim(file_get_contents('/ramdrive/googleip.txt')); // get last $newIp = $lastIp; // in case for some reason it remains unchanged switch($lastIp){ case '10.100.101.10': $newIp = '192.168.3.210'; break; case '192.168.3.210': $newIp = '192.168.3.211'; break; case '192.168.3.211': $newIp = '192.168.3.212'; break; case '192.168.3.212': $newIp = '192.168.3.213'; break; case '192.168.3.213': $newIp = '192.168.3.214'; break; case '192.168.3.214': $newIp = '10.100.101.10'; break; } file_put_contents('/ramdrive/googleip.txt',$newIp); $opts = array( 'socket' => array( 'bindto' => "$newIp:0", ), ); return $opts; } ?> Edited October 17, 2016 at 10:01 AM by fauves Link to comment Share on other sites More sharing options...
cusco Posted October 18, 2016 at 10:15 AM Report Share #599683 Posted October 18, 2016 at 10:15 AM Em 17/10/2016 às 10:25, fauves disse: Criei a BD em mySQL e fiz a atualização da lat e long, mas ele mete os mesmos valores que tens. Reparei que ele só pesquisa pelo CP4 na api. Alguém pode ajudar-me a corrigir esta situação? $mysqli = new mysqli('localhost', 'root', '', 'CTT'); $qry = "select distinct CP4, CP3 from codigosPostais where LONGITUDE = '' AND LATITUDE = '' order by CP4 asc, CP3 asc limit 2500"; $qid = $mysqli->query($qry); if($qid->num_rows == 0){ echo "No results in database to update\n"; die(); } while($row = $qid->fetch_object()){ $geo = getGeo($row->CP4, $row->CP3); if(!isset($geo->lat)){ echo "$row->CP4-$row->CP3|error|$geo\n"; continue; } $updQry = "update codigosPostais SET LONGITUDE=$geo->lat, LATITUDE=$geo->lng WHERE CP4=$row->CP4 AND CP3='$row->CP3'"; $updQid = $mysqli->query($updQry); $aff = $mysqli->affected_rows; echo "$row->CP4-$row->CP3|$aff\n"; #die(); } function getGeo($cp4, $cp3){ #$url = "http://maps.googleapis.com/maps/api/geocode/json?address=$cp4-$cp3&sensor=false&components=country:PT"; $url = "http://ditu.google.cn//maps/api/geocode/json?address=$cp4-$cp3&sensor=false&components=country:PT"; /* IP CHANGING STUFF * * Uncomment this and the comment block a few lines below * only if you understand what it does, and after reading * changeIp() function comments * $i = 0; if(!file_exists('/ramdrive/googleip.txt')){ file_put_contents('/ramdrive/googleip.txt','10.100.100.15'); $currentIp = '10.100.100.16'; // default IP }else{ $currentIp = file_get_contents('/ramdrive/googleip.txt'); } $opts = array( 'socket' => array( 'bindto' => "$currentIp:0", ), ); $context = stream_context_create($opts); again: $data = json_decode(file_get_contents($url,false,$context)); */ $data = @file_get_contents($url,false); if($data == false){ return "error fetching $url"; } $data = json_decode($data); if($data->status == 'OVER_QUERY_LIMIT'){ /* IP Changing stuff if($i > 6){ die('OVER_QUERY_LIMIT'); } $i++; $context = stream_context_create(changeIp()); goto again: */ echo "Google returned over query limit\n"; die(); } //$geo = $data->results[0]->geometry->location; $maxKey = max(array_keys($data->results)); $geo = $data->results[$maxKey]->geometry->location; return $geo; } function changeIp(){ /* * This will return context options for file_get_contents * the following IP list will basically be bound by the router * with a netmap rule, NATing to different external IP's * thus, allowing to increase google's limit of 2500 requests * per IP per day. * * IP List * * 10.100.101.10 * 192.168.3.210 * 192.168.3.211 * 192.168.3.212 * 192.168.3.213 * 192.168.3.214 */ $lastIp = trim(file_get_contents('/ramdrive/googleip.txt')); // get last $newIp = $lastIp; // in case for some reason it remains unchanged switch($lastIp){ case '10.100.101.10': $newIp = '192.168.3.210'; break; case '192.168.3.210': $newIp = '192.168.3.211'; break; case '192.168.3.211': $newIp = '192.168.3.212'; break; case '192.168.3.212': $newIp = '192.168.3.213'; break; case '192.168.3.213': $newIp = '192.168.3.214'; break; case '192.168.3.214': $newIp = '10.100.101.10'; break; } file_put_contents('/ramdrive/googleip.txt',$newIp); $opts = array( 'socket' => array( 'bindto' => "$newIp:0", ), ); return $opts; } ?> Olá Como podes ver pela variavel $url ele vai ao google perguntar CP4 e CP3 No entanto, no github tens agora um dump completo da base de dados, podes simplesmente importar esse 🙂 Falta talvez criar um script que apenas actualiza, quando os ficheiros dos CTT têm dados novos? (não me recordo como está) Link to comment Share on other sites More sharing options...
fauves Posted October 18, 2016 at 04:34 PM Report Share #599706 Posted October 18, 2016 at 04:34 PM 6 horas atrás, cusco disse: Olá Como podes ver pela variavel $url ele vai ao google perguntar CP4 e CP3 No entanto, no github tens agora um dump completo da base de dados, podes simplesmente importar esse 🙂 Falta talvez criar um script que apenas actualiza, quando os ficheiros dos CTT têm dados novos? (não me recordo como está) Boas! Estava a ter alguns problemas com o teu ficheiro geoupdate, entretanto abri um topic nesta secção com a minha dúvida: https://www.portugal-a-programar.pt/forums/topic/74313-pesquisa-por-latitude-e-longitude-por-c%C3%B3digos-postais/ Link to comment Share on other sites More sharing options...
cusco Posted October 19, 2016 at 03:37 PM Report Share #599745 Posted October 19, 2016 at 03:37 PM Olá fauves Como respondi nesse outro tópico, e para que fique registado, alterei o código do dito ficheiro no GitHub para tentar corresponder à expectativa. Faz checkout e testa :-) 1 Report Link to comment Share on other sites More sharing options...
G Guedes Posted October 25, 2017 at 07:27 PM Report Share #607658 Posted October 25, 2017 at 07:27 PM Em 17/01/2011 às 00:41, geodivagar disse: Viva, por curiosidade, sou o autor do WS referido e nos Logs reparei que, na sequência desta thread, alguém fez o pedido das coordenadas para todos os cp4 existentes. Acabou por funcionar como um teste de carga bastante interessante, tendo o servidor (neste caso a infraestrutura do GAE) se comportado bastante bem. Se quiserem, em vez de pagar pela BD a quem pagou ao programador que por sua vez terá apontado ao WS em batch, talvez fosse preferível contribuírem monetariamente para a melhoria do serviço. 🙂 Sugestão de melhorias "a pagantes": - Reposta em XML ou GML ou KML or else - URLs mais REST tipo http://codigospostais.appspot.com/cp4/2675/foo em vez de http://codigospostais.appspot.com/cp4?codigo=2675&callback=foo - Pedidos por bounding box Olá geodivagar, Procuro uma solução por bounding box que me dê uma lista de códigos postais com 7 dígitos. Sabe de alguma solução? Mt Obrigado GG Link to comment Share on other sites More sharing options...
Antonio Leitao Posted November 28, 2021 at 02:21 PM Report Share #624736 Posted November 28, 2021 at 02:21 PM Em 14/01/2011 às 11:03, LuisT disse: Paguei o serviço a um programador e já tenho a lista actualizada com latitudes e longitudes de cada código postal português 😁 Obrigado na mesma pela vossa atenção! Já agora, aproveito para informar que caso alguém procure esta lista, estou disposto a vender uma cópia, bastando para isso contactando-me via MP. Obrigado a todos mais uma vez. Olá LuisT, eu tenho interesse em comprar a lista de codigo postal + lat/long. Gostaria de saber como proceder. O que é MP? Obrigado! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now